libspmenu: Integrate libspmenu into main project
This commit is contained in:
parent
3d9711c971
commit
b1e16da5ca
|
@ -141,7 +141,7 @@ directory**. If you want to generate a pacman package, run
|
|||
|
||||
When creating a release, do the following:
|
||||
|
||||
1. Bump version in meson.build (optional)
|
||||
1. Bump version in meson.build and src/libspmenu/meson.build (optional)
|
||||
2. Run `scripts/spmenu_make docs`. This will generate new documentation.
|
||||
3. `git commit -a` to bump version
|
||||
4. Run `scripts/spmenu_make dist`. This will generate a tarball, along
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
# Maintainer: speedie <speedie@speedie.site>
|
||||
|
||||
pkgname=spmenu
|
||||
pkgname=('spmenu' 'libspmenu')
|
||||
pkgbase="spmenu"
|
||||
pkgver=VERSION
|
||||
pkgrel=1
|
||||
pkgdesc="Fancy dynamic menu for X11 and Wayland, compatible with dmenu!"
|
||||
|
@ -29,15 +30,13 @@ makedepends=(
|
|||
|
||||
optdepends=(
|
||||
'wl-clipboard: Clipboard support on Wayland'
|
||||
'libspmenu: C++ library for spmenu'
|
||||
)
|
||||
|
||||
provides=($pkgname)
|
||||
conflicts=($pkgname)
|
||||
source=(
|
||||
"$pkgname-$pkgver.tar.gz"
|
||||
"$pkgname-$pkgver.tar.gz.sig"
|
||||
#"https://ls.speedie.site/releases/$pkgname/$pkgver/$pkgname-$pkgver.tar.gz"
|
||||
#"https://ls.speedie.site/releases/$pkgname/$pkgver/$pkgname-$pkgver.tar.gz.sig"
|
||||
"$pkgbase-$pkgver.tar.gz"
|
||||
"$pkgbase-$pkgver.tar.gz.sig"
|
||||
)
|
||||
|
||||
md5sums=(
|
||||
|
@ -50,15 +49,19 @@ sha256sums=(
|
|||
'SKIP'
|
||||
)
|
||||
|
||||
build(){
|
||||
cd $pkgname-$pkgver
|
||||
mkdir -p build/
|
||||
package_spmenu() {
|
||||
cd "$pkgbase-$pkgver"
|
||||
meson setup --reconfigure --prefix=${pkgdir}/usr build
|
||||
ninja -C build
|
||||
cd build/
|
||||
meson install
|
||||
}
|
||||
|
||||
package() {
|
||||
cd "$pkgname-$pkgver"
|
||||
package_libspmenu() {
|
||||
pkgdesc="C++ library for spmenu"
|
||||
optdepends=()
|
||||
|
||||
meson install -C build
|
||||
cd "$pkgbase-$pkgver/src/libspmenu"
|
||||
meson setup --reconfigure --prefix=${pkgdir}/usr build
|
||||
cd build/
|
||||
meson install
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ wayland=${wayland:-true}
|
|||
x11=${x11:-true}
|
||||
regex=${regex:-true}
|
||||
fifo=${fifo:-true}
|
||||
library=${library:-true}
|
||||
|
||||
prefix="${prefix:-/usr}"
|
||||
|
||||
|
@ -19,7 +20,7 @@ static=${static:-false}
|
|||
|
||||
clean() {
|
||||
clean_headers
|
||||
rm -rf ./*.zst* ./*.tar* ./*.sig* *.PKGBUILD *.ebuild *.ebuild* build/
|
||||
rm -rf ./*.zst* ./*.tar* ./*.sig* *.PKGBUILD *.ebuild *.ebuild* build/ PKGBUILD
|
||||
}
|
||||
|
||||
check_correct_dir() {
|
||||
|
@ -158,12 +159,27 @@ gen_gentoo_pkg() {
|
|||
sha256sum spmenu-${version}.ebuild | cut -d ' ' -f 1 > spmenu-${version}.ebuild.sha256
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -f "packaging/libspmenu.ebuild" ] && [ "$library" != "false" ]; then
|
||||
cp packaging/libspmenu.ebuild libspmenu-${version}.ebuild
|
||||
|
||||
if [ -x "$(command -v gpg)" ]; then
|
||||
gpg --detach-sign --yes --local-user $(whoami) libspmenu-${version}.ebuild
|
||||
fi
|
||||
|
||||
if [ -x "$(command -v md5sum)" ]; then
|
||||
md5sum libspmenu-${version}.ebuild | cut -d ' ' -f 1 > libspmenu-${version}.ebuild.md5
|
||||
fi
|
||||
|
||||
if [ -x "$(command -v sha256sum)" ]; then
|
||||
sha256sum libspmenu-${version}.ebuild | cut -d ' ' -f 1 > libspmenu-${version}.ebuild.sha256
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
gen_arch_pkg() {
|
||||
[ "$(id -u)" = "0" ] && printf "Do not run as root.\n" && exit 1
|
||||
[ ! -x "$(command -v makepkg)" ] && printf "makepkg required for this action.\n" && exit 1
|
||||
[ -f "packaging/spmenu.PKGBUILD" ] || exit 1
|
||||
|
||||
rm -f PKGBUILD
|
||||
|
||||
|
@ -188,10 +204,14 @@ gen_arch_pkg() {
|
|||
# generate MD5 checksum
|
||||
[ -x "$(command -v md5sum)" ] && \
|
||||
md5sum spmenu-${version}-1-x86_64.pkg.tar.zst | cut -d ' ' -f 1 > spmenu-${version}-1-x86_64.pkg.tar.zst.md5
|
||||
[ -x "$(command -v md5sum)" ] && \
|
||||
md5sum libspmenu-${version}-1-x86_64.pkg.tar.zst | cut -d ' ' -f 1 > libspmenu-${version}-1-x86_64.pkg.tar.zst.md5
|
||||
|
||||
# generate SHA256 checksum
|
||||
[ -x "$(command -v sha256sum)" ] && \
|
||||
sha256sum spmenu-${version}-1-x86_64.pkg.tar.zst | cut -d ' ' -f 1 > spmenu-${version}-1-x86_64.pkg.tar.zst.sha256
|
||||
[ -x "$(command -v sha256sum)" ] && \
|
||||
sha256sum libspmenu-${version}-1-x86_64.pkg.tar.zst | cut -d ' ' -f 1 > libspmenu-${version}-1-x86_64.pkg.tar.zst.sha256
|
||||
}
|
||||
|
||||
generate_theme() {
|
||||
|
@ -325,6 +345,13 @@ build() {
|
|||
|
||||
[ "$cp_build" = "true" ] && cp meson.build meson.build.used
|
||||
mv -f meson.build.orig meson.build
|
||||
|
||||
if [ "$library" != "false" ]; then
|
||||
cd src/libspmenu/ || exit 1
|
||||
meson setup --prefix "$prefix" build || exit 1
|
||||
ninja -C build
|
||||
cd ../../ || exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
install() {
|
||||
|
@ -335,6 +362,14 @@ install() {
|
|||
cd .. || exit 1
|
||||
[ "$reconfigure" = "true" ] && rm -rf build/
|
||||
[ "$reconfigure" = "true" ] && clean_headers
|
||||
|
||||
if [ "$library" != "false" ]; then
|
||||
cd src/libspmenu/build/ || exit 1
|
||||
meson install
|
||||
cd ..
|
||||
[ "$reconfigure" = "true" ] && rm -rf build/
|
||||
cd ../../
|
||||
fi
|
||||
}
|
||||
|
||||
help() {
|
||||
|
|
239
src/libspmenu/libspmenu.cpp
Normal file
239
src/libspmenu/libspmenu.cpp
Normal file
|
@ -0,0 +1,239 @@
|
|||
/* libspmenu
|
||||
* spmenu C++ library
|
||||
*
|
||||
* See LICENSE file for copyright and license details.
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <array>
|
||||
#include "libspmenu.hpp"
|
||||
|
||||
bool spmenu::checkBool(bool Bool) {
|
||||
return (Bool == 0 || Bool == 1);
|
||||
}
|
||||
|
||||
std::string spmenu::addArgument(std::string Argument, std::string Value) {
|
||||
std::string str;
|
||||
|
||||
str += " " + Argument + " \"" + Value + "\"";
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
std::string spmenu::addArgument(std::string enabledArgument, std::string disabledArgument, bool Value) {
|
||||
std::string str{};
|
||||
|
||||
std::cout << spmenu::checkBool(Value) << std::endl;
|
||||
if (!spmenu::checkBool(Value)) {
|
||||
return str;
|
||||
}
|
||||
|
||||
if (disabledArgument.empty() || enabledArgument.empty()) {
|
||||
return str;
|
||||
}
|
||||
|
||||
str += " " + (Value ? enabledArgument : disabledArgument);
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
std::string spmenu::generateArguments(spmenu::spmenuSettings *settings) {
|
||||
std::string argList;
|
||||
|
||||
argList += (settings->promptText.empty()) ? "" : (spmenu::addArgument("--prompt", settings->promptText));
|
||||
argList += (settings->preText.empty()) ? "" : (spmenu::addArgument("--pretext", settings->preText));
|
||||
argList += (settings->inputText.empty()) ? "" : (spmenu::addArgument("--input", settings->inputText));
|
||||
argList += (settings->normalModeText.empty()) ? "" : (spmenu::addArgument("--normal-mode-text", settings->normalModeText));
|
||||
argList += (settings->insertModeText.empty()) ? "" : (spmenu::addArgument("--insert-mode-text", settings->insertModeText));
|
||||
argList += (settings->capsLockOnText.empty()) ? "" : (spmenu::addArgument("--caps-lock-on-text", settings->capsLockOnText));
|
||||
argList += (settings->capsLockOffText.empty()) ? "" : (spmenu::addArgument("--caps-lock-off-text", settings->capsLockOffText));
|
||||
argList += (settings->leftArrowText.empty()) ? "" : (spmenu::addArgument("--left-arrow-symbol", settings->leftArrowText));
|
||||
argList += (settings->rightArrowText.empty()) ? "" : (spmenu::addArgument("--right-arrow-symbol", settings->rightArrowText));
|
||||
argList += (settings->lineHeight.empty()) ? "" : (spmenu::addArgument("--line-height", settings->lineHeight));
|
||||
argList += (settings->centerWidth.empty()) ? "" : (spmenu::addArgument("--center-width", settings->centerWidth));
|
||||
argList += (settings->Lines.empty()) ? "" : (spmenu::addArgument("--lines", settings->Lines));
|
||||
argList += (settings->Columns.empty()) ? "" : (spmenu::addArgument("--columns", settings->Columns));
|
||||
argList += (settings->minLines.empty()) ? "" : (spmenu::addArgument("--min-lines", settings->minLines));
|
||||
argList += spmenu::addArgument("--generate-cache", "--no-generate-cache", settings->generateCache);
|
||||
argList += (settings->maxCache.empty()) ? "" : (spmenu::addArgument("--max-cache", settings->maxCache));
|
||||
argList += (settings->cacheDir.empty()) ? "" : (spmenu::addArgument("--cache-dir", settings->cacheDir));
|
||||
argList += spmenu::addArgument("--print-index", "--no-print-index", settings->printIndex);
|
||||
argList += spmenu::addArgument("--fast", "", settings->Fast);
|
||||
argList += spmenu::addArgument("--incremental", "--no-incremental", settings->Incremental);
|
||||
argList += spmenu::addArgument("--require-match", "--no-require-match", settings->requireMatch);
|
||||
argList += spmenu::addArgument("--mark-items", "--no-mark-items", settings->markItems);
|
||||
argList += spmenu::addArgument("--fuzzy", "--no-fuzzy", settings->Fuzzy);
|
||||
argList += spmenu::addArgument("--regex", "--no-regex", settings->Regex);
|
||||
argList += spmenu::addArgument("--password", "--no-password", settings->Password);
|
||||
argList += spmenu::addArgument("--indent", "--no-indent", settings->Indent);
|
||||
argList += spmenu::addArgument("--color-items", "--no-color-items", settings->colorItems);
|
||||
argList += spmenu::addArgument("--sgr", "--no-sgr", settings->Sgr);
|
||||
argList += spmenu::addArgument("--alpha", "--no-alpha", settings->Alpha);
|
||||
argList += spmenu::addArgument("--allow-typing", "--no-allow-typing", settings->allowTyping);
|
||||
argList += spmenu::addArgument("--override-lines", "--no-override-lines", settings->allowOverrideLines);
|
||||
argList += spmenu::addArgument("--override-columns", "--no-override-columns", settings->allowOverrideColumns);
|
||||
argList += (settings->X.empty()) ? "" : (spmenu::addArgument("--x-position", settings->X));
|
||||
argList += (settings->Y.empty()) ? "" : (spmenu::addArgument("--y-position", settings->Y));
|
||||
argList += (settings->W.empty()) ? "" : (spmenu::addArgument("--width", settings->W));
|
||||
argList += (settings->H.empty()) ? "" : (spmenu::addArgument("--min-lines", settings->H));
|
||||
argList += (settings->Preselect.empty()) ? "" : (spmenu::addArgument("--preselect", settings->Preselect));
|
||||
argList += (settings->borderWidth.empty()) ? "" : (spmenu::addArgument("--border-width", settings->borderWidth));
|
||||
argList += spmenu::addArgument("--sort", "--no-sort", settings->Sort);
|
||||
argList += (settings->Priority.empty()) ? "" : (spmenu::addArgument("--priority", settings->Priority));
|
||||
argList += spmenu::addArgument("--case-sensitive", "--case-insensitive", settings->caseSensitive);
|
||||
argList += spmenu::addArgument("--normal", "--insert", settings->defaultMode);
|
||||
argList += spmenu::addArgument("--hide-mode", "--show-mode", settings->hideMode);
|
||||
argList += spmenu::addArgument("--hide-match-count", "--show-match-count", settings->hideMatchCount);
|
||||
argList += spmenu::addArgument("--hide-left-arrow", "--show-left-arrow", settings->hideLeftArrow);
|
||||
argList += spmenu::addArgument("--hide-right-arrow", "--show-right-arrow", settings->hideRightArrow);
|
||||
argList += spmenu::addArgument("--hide-item", "--show-item", settings->hideItem);
|
||||
argList += spmenu::addArgument("--hide-prompt", "--show-prompt", settings->hidePrompt);
|
||||
argList += spmenu::addArgument("--hide-pretext", "--show-pretext", settings->hidePretext);
|
||||
argList += spmenu::addArgument("--hide-input", "--show-input", settings->hideInput);
|
||||
argList += spmenu::addArgument("--hide-powerline", "--show-powerline", settings->hidePowerline);
|
||||
argList += spmenu::addArgument("--hide-caret", "--show-caret", settings->hideCaret);
|
||||
argList += spmenu::addArgument("--hide-highlighting", "--show-highlighting", settings->hideHighlighting);
|
||||
argList += spmenu::addArgument("--hide-image", "--show-image", settings->hideImage);
|
||||
argList += spmenu::addArgument("--hide-caps", "--show-caps", settings->hideCaps);
|
||||
argList += spmenu::addArgument("--xrdb", "--no-xrdb", settings->Xrdb);
|
||||
argList += (settings->Monitor.empty()) ? "" : (spmenu::addArgument("--monitor", settings->Monitor));
|
||||
argList += (settings->Embed.empty()) ? "" : (spmenu::addArgument("--embed", settings->Embed));
|
||||
argList += (settings->histFile.empty()) ? "" : (spmenu::addArgument("--hist-file", settings->histFile));
|
||||
argList += (settings->listFile.empty()) ? "" : (spmenu::addArgument("--list-file", settings->listFile));
|
||||
argList += (settings->configFile.empty()) ? "" : (spmenu::addArgument("--config-file", settings->configFile));
|
||||
argList += (settings->bindsFile.empty()) ? "" : (spmenu::addArgument("--bind-file", settings->bindsFile));
|
||||
argList += (settings->themeFile.empty()) ? "" : (spmenu::addArgument("--theme-file", settings->themeFile));
|
||||
argList += (settings->imageGaps.empty()) ? "" : (spmenu::addArgument("--image-gaps", settings->imageGaps));
|
||||
argList += (settings->imageSize.empty()) ? "" : (spmenu::addArgument("--image-size", settings->imageSize));
|
||||
argList += spmenu::addArgument("--display-image", "--display-icons", settings->imageType);
|
||||
argList += spmenu::addArgument("--image-resize", "--no-image-resize", settings->imageResize);
|
||||
argList += (settings->textPadding.empty()) ? "" : (spmenu::addArgument("--text-padding", settings->textPadding));
|
||||
argList += (settings->verticalPadding.empty()) ? "" : (spmenu::addArgument("--vertical-padding", settings->verticalPadding));
|
||||
argList += (settings->horizontalPadding.empty()) ? "" : (spmenu::addArgument("--horizontal-padding", settings->horizontalPadding));
|
||||
argList += (settings->verticalMargin.empty()) ? "" : (spmenu::addArgument("--vertical-margin", settings->verticalMargin));
|
||||
argList += (settings->horizontalMargin.empty()) ? "" : (spmenu::addArgument("--horizontal-margin", settings->horizontalMargin));
|
||||
argList += spmenu::addArgument("--managed", "--unmanaged", settings->Managed);
|
||||
argList += spmenu::addArgument("--wayland", "-x11", settings->displayProtocol);
|
||||
argList += spmenu::addArgument("--load-config", "--no-load-config", settings->loadConfig);
|
||||
argList += spmenu::addArgument("--load-binds", "--no-load-binds", settings->loadBinds);
|
||||
argList += spmenu::addArgument("--load-theme", "--no-load-theme", settings->loadTheme);
|
||||
argList += (settings->Font.empty()) ? "" : (spmenu::addArgument("--font", settings->Font));
|
||||
argList += (settings->normalItemForegroundColor.empty()) ? "" : (spmenu::addArgument("--normal-item-foreground", settings->normalItemForegroundColor));
|
||||
argList += (settings->normalItemBackgroundColor.empty()) ? "" : (spmenu::addArgument("--normal-item-background", settings->normalItemBackgroundColor));
|
||||
argList += (settings->selectedItemForegroundColor.empty()) ? "" : (spmenu::addArgument("--selected-item-foreground", settings->selectedItemForegroundColor));
|
||||
argList += (settings->selectedItemBackgroundColor.empty()) ? "" : (spmenu::addArgument("--selected-item-background", settings->selectedItemBackgroundColor));
|
||||
argList += (settings->normalNextItemForegroundColor.empty()) ? "" : (spmenu::addArgument("--normal-next-item-foreground", settings->normalNextItemForegroundColor));
|
||||
argList += (settings->normalNextItemBackgroundColor.empty()) ? "" : (spmenu::addArgument("--normal-next-item-background", settings->normalNextItemBackgroundColor));
|
||||
argList += (settings->normalItemPriorityForegroundColor.empty()) ? "" : (spmenu::addArgument("--normal-item-priority-foreground", settings->normalItemPriorityForegroundColor));
|
||||
argList += (settings->normalItemPriorityBackgroundColor.empty()) ? "" : (spmenu::addArgument("--normal-item-priority-background", settings->normalItemPriorityBackgroundColor));
|
||||
argList += (settings->selectedItemPriorityForegroundColor.empty()) ? "" : (spmenu::addArgument("--selected-item-priority-foreground", settings->selectedItemPriorityForegroundColor));
|
||||
argList += (settings->selectedItemPriorityBackgroundColor.empty()) ? "" : (spmenu::addArgument("--selected-item-priority-background", settings->selectedItemPriorityBackgroundColor));
|
||||
argList += (settings->promptForegroundColor.empty()) ? "" : (spmenu::addArgument("--prompt-foreground", settings->promptForegroundColor));
|
||||
argList += (settings->promptBackgroundColor.empty()) ? "" : (spmenu::addArgument("--prompt-background", settings->promptBackgroundColor));
|
||||
argList += (settings->inputForegroundColor.empty()) ? "" : (spmenu::addArgument("--input-foreground", settings->inputForegroundColor));
|
||||
argList += (settings->inputBackgroundColor.empty()) ? "" : (spmenu::addArgument("--input-background", settings->inputBackgroundColor));
|
||||
argList += (settings->preTextForegroundColor.empty()) ? "" : (spmenu::addArgument("--preText-foreground", settings->preTextForegroundColor));
|
||||
argList += (settings->preTextBackgroundColor.empty()) ? "" : (spmenu::addArgument("--preText-background", settings->preTextBackgroundColor));
|
||||
argList += (settings->windowColor.empty()) ? "" : (spmenu::addArgument("--menu-background", settings->windowColor));
|
||||
argList += (settings->normalHighlightForegroundColor.empty()) ? "" : (spmenu::addArgument("--normal-highlight-foreground", settings->normalHighlightForegroundColor));
|
||||
argList += (settings->normalHighlightBackgroundColor.empty()) ? "" : (spmenu::addArgument("--normal-highlight-background", settings->normalHighlightBackgroundColor));
|
||||
argList += (settings->selectedHighlightForegroundColor.empty()) ? "" : (spmenu::addArgument("--selected-highlight-foreground", settings->selectedHighlightForegroundColor));
|
||||
argList += (settings->selectedHighlightBackgroundColor.empty()) ? "" : (spmenu::addArgument("--selected-highlight-background", settings->selectedHighlightBackgroundColor));
|
||||
argList += (settings->numberForegroundColor.empty()) ? "" : (spmenu::addArgument("--number-foreground", settings->numberForegroundColor));
|
||||
argList += (settings->numberBackgroundColor.empty()) ? "" : (spmenu::addArgument("--number-background", settings->numberBackgroundColor));
|
||||
argList += (settings->modeForegroundColor.empty()) ? "" : (spmenu::addArgument("--mode-foreground", settings->modeForegroundColor));
|
||||
argList += (settings->modeBackgroundColor.empty()) ? "" : (spmenu::addArgument("--mode-background", settings->modeBackgroundColor));
|
||||
argList += (settings->leftArrowForegroundColor.empty()) ? "" : (spmenu::addArgument("--left-arrow-foreground", settings->leftArrowForegroundColor));
|
||||
argList += (settings->leftArrowBackgroundColor.empty()) ? "" : (spmenu::addArgument("--left-arrow-background", settings->leftArrowBackgroundColor));
|
||||
argList += (settings->rightArrowForegroundColor.empty()) ? "" : (spmenu::addArgument("--right-arrow-foreground", settings->rightArrowForegroundColor));
|
||||
argList += (settings->rightArrowBackgroundColor.empty()) ? "" : (spmenu::addArgument("--right-arrow-background", settings->rightArrowBackgroundColor));
|
||||
argList += (settings->caretForegroundColor.empty()) ? "" : (spmenu::addArgument("--caret-foreground", settings->caretForegroundColor));
|
||||
argList += (settings->caretBackgroundColor.empty()) ? "" : (spmenu::addArgument("--caret-background", settings->caretBackgroundColor));
|
||||
argList += (settings->borderColor.empty()) ? "" : (spmenu::addArgument("--border-background", settings->borderColor));
|
||||
argList += (settings->sgr0Color.empty()) ? "" : (spmenu::addArgument("--sgr0", settings->sgr0Color));
|
||||
argList += (settings->sgr1Color.empty()) ? "" : (spmenu::addArgument("--sgr1", settings->sgr1Color));
|
||||
argList += (settings->sgr2Color.empty()) ? "" : (spmenu::addArgument("--sgr2", settings->sgr2Color));
|
||||
argList += (settings->sgr3Color.empty()) ? "" : (spmenu::addArgument("--sgr3", settings->sgr3Color));
|
||||
argList += (settings->sgr4Color.empty()) ? "" : (spmenu::addArgument("--sgr4", settings->sgr4Color));
|
||||
argList += (settings->sgr5Color.empty()) ? "" : (spmenu::addArgument("--sgr5", settings->sgr5Color));
|
||||
argList += (settings->sgr6Color.empty()) ? "" : (spmenu::addArgument("--sgr6", settings->sgr6Color));
|
||||
argList += (settings->sgr7Color.empty()) ? "" : (spmenu::addArgument("--sgr7", settings->sgr7Color));
|
||||
argList += (settings->sgr8Color.empty()) ? "" : (spmenu::addArgument("--sgr8", settings->sgr8Color));
|
||||
argList += (settings->sgr9Color.empty()) ? "" : (spmenu::addArgument("--sgr9", settings->sgr9Color));
|
||||
argList += (settings->sgr10Color.empty()) ? "" : (spmenu::addArgument("--sgr10", settings->sgr10Color));
|
||||
argList += (settings->sgr11Color.empty()) ? "" : (spmenu::addArgument("--sgr11", settings->sgr11Color));
|
||||
argList += (settings->sgr12Color.empty()) ? "" : (spmenu::addArgument("--sgr12", settings->sgr12Color));
|
||||
argList += (settings->sgr13Color.empty()) ? "" : (spmenu::addArgument("--sgr13", settings->sgr13Color));
|
||||
argList += (settings->sgr14Color.empty()) ? "" : (spmenu::addArgument("--sgr14", settings->sgr14Color));
|
||||
argList += (settings->sgr15Color.empty()) ? "" : (spmenu::addArgument("--sgr15", settings->sgr15Color));
|
||||
|
||||
if (!settings->windowPosition.empty()) {
|
||||
std::string argument = "";
|
||||
if (settings->windowPosition.compare("Top")) {
|
||||
argument = "--top";
|
||||
} else if (settings->windowPosition.compare("Bottom")) {
|
||||
argument = "--bottom";
|
||||
} else if (settings->windowPosition.compare("Center")) {
|
||||
argument = "--center";
|
||||
}
|
||||
|
||||
argList += " " + argument;
|
||||
}
|
||||
|
||||
if (!settings->itemPosition.empty()) {
|
||||
std::string argument = "";
|
||||
if (settings->itemPosition.compare("Top")) {
|
||||
argument = "--item-top";
|
||||
} else if (settings->itemPosition.compare("Bottom")) {
|
||||
argument = "--item-bottom";
|
||||
}
|
||||
|
||||
argList += " " + argument;
|
||||
}
|
||||
|
||||
if (!settings->imagePosition.empty()) {
|
||||
std::string argument = "";
|
||||
if (settings->imagePosition.compare("Top")) {
|
||||
argument = "--image-top";
|
||||
} else if (settings->imagePosition.compare("Bottom")) {
|
||||
argument = "--image-bottom";
|
||||
} else if (settings->imagePosition.compare("Center")) {
|
||||
argument = "--image-center";
|
||||
} else if (settings->imagePosition.compare("Top Center")) {
|
||||
argument = "--image-topcenter";
|
||||
}
|
||||
|
||||
argList += " " + argument;
|
||||
}
|
||||
|
||||
return argList;
|
||||
}
|
||||
|
||||
std::string spmenu::Run(spmenu::spmenuSettings *settings) {
|
||||
const int bufferSize{ sizeof(settings->standardInput) };
|
||||
std::ostringstream command;
|
||||
std::string ret;
|
||||
std::array<char, bufferSize> buf;
|
||||
|
||||
std::string Arguments;
|
||||
|
||||
Arguments = spmenu::generateArguments(settings);
|
||||
|
||||
command << "printf \"" << settings->standardInput << "\" | spmenu " << Arguments << " " << settings->userArguments;
|
||||
|
||||
std::unique_ptr<FILE, decltype(&pclose)> pipe(popen(command.str().c_str(), "r"), pclose);
|
||||
|
||||
if (!pipe) {
|
||||
std::cerr << "Failed to popen()\n";
|
||||
return ret;
|
||||
}
|
||||
|
||||
while (fgets(buf.data(), buf.size(), pipe.get()) != NULL) {
|
||||
ret += buf.data();
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
153
src/libspmenu/libspmenu.hpp
Normal file
153
src/libspmenu/libspmenu.hpp
Normal file
|
@ -0,0 +1,153 @@
|
|||
#ifndef LIBSPMENU_HPP
|
||||
#define LIBSPMENU_HPP
|
||||
|
||||
#include <iostream>
|
||||
|
||||
namespace spmenu {
|
||||
using Integer = std::string;
|
||||
using String = std::string;
|
||||
using Bool = bool;
|
||||
class spmenuSettings {
|
||||
public:
|
||||
String userArguments{};
|
||||
String standardInput{};
|
||||
|
||||
String promptText{}; // -p
|
||||
String preText{}; // -pt
|
||||
String inputText{}; // -It
|
||||
String normalModeText{}; // -nmt
|
||||
String insertModeText{}; // -imt
|
||||
String capsLockOnText{}; // -clon
|
||||
String capsLockOffText{}; // -clof
|
||||
String leftArrowText{}; // -la
|
||||
String rightArrowText{}; // -ra
|
||||
Integer lineHeight; // -mh
|
||||
Integer centerWidth; // -cw
|
||||
Integer Lines; // -l
|
||||
Integer Columns; // -g
|
||||
Integer minLines; // -ml
|
||||
Bool generateCache; // -gc, -ngc
|
||||
Integer maxCache; // -mc
|
||||
String cacheDir{}; // -cd
|
||||
Bool printIndex; // -ix, -nix
|
||||
Bool Fast; // -f
|
||||
Bool Incremental; // -r, -nr
|
||||
Bool requireMatch; // -rm, -nrm
|
||||
Bool markItems; // -ma, -nma
|
||||
Bool Fuzzy; // -F, -NF
|
||||
Bool Regex; // -R, -NR
|
||||
Bool Password; // -P, -nP
|
||||
Bool Indent; // -ip, -nip
|
||||
Bool colorItems; // -ci, -nci
|
||||
Bool Sgr; // -sgr, -nsgr
|
||||
Bool Alpha; // -a, -na
|
||||
Bool allowTyping; // -tp, -nt
|
||||
Bool allowOverrideLines; // -ol, -nol
|
||||
Bool allowOverrideColumns; // -oc, -noc
|
||||
Integer X; // -x
|
||||
Integer Y; // -y
|
||||
Integer W; // -z
|
||||
Integer H; // -ml
|
||||
Integer Preselect; // -n
|
||||
Integer borderWidth; // -bw
|
||||
Bool Sort; // -so, -nso
|
||||
String Priority{}; // -pri
|
||||
Bool caseSensitive; // -s, -ns
|
||||
Bool defaultMode; // -nm, -im
|
||||
Integer windowPosition; // -t, -b, -c
|
||||
Integer itemPosition; // -itt, -itb
|
||||
Integer imagePosition; // -it, -ib, -ic, -itc
|
||||
Bool hideMode; // -hm
|
||||
Bool hideMatchCount; // -hmc
|
||||
Bool hideLeftArrow; // -hla
|
||||
Bool hideRightArrow; // -hra
|
||||
Bool hideItem; // -hit
|
||||
Bool hidePrompt; // -hpr
|
||||
Bool hidePretext; // -hpt
|
||||
Bool hideInput; // -hip
|
||||
Bool hidePowerline; // -hpl
|
||||
Bool hideCaret; // -hc
|
||||
Bool hideHighlighting; // -hhl
|
||||
Bool hideImage; // -hi
|
||||
Bool hideCaps; // -hcl
|
||||
Bool Xrdb; // -xrdb, -nxrdb
|
||||
Integer Monitor; // -m
|
||||
Integer Embed; // -w
|
||||
String histFile{}; // -H
|
||||
String listFile{}; // -lf
|
||||
String configFile{}; // -cf
|
||||
String bindsFile{}; // -bf
|
||||
String themeFile{}; // -tm
|
||||
Integer imageGaps; // -ig
|
||||
Integer imageSize; // -is
|
||||
Bool imageType; // -di, -df
|
||||
Bool imageResize; // -ir, -nir
|
||||
Integer textPadding; // -txp
|
||||
Integer verticalPadding; // -lp
|
||||
Integer horizontalPadding; // -hp
|
||||
Integer verticalMargin; // -vem
|
||||
Integer horizontalMargin; // -hom
|
||||
Bool Managed; // -wm, -nwm
|
||||
Bool displayProtocol; // -x11, -wl
|
||||
Bool loadConfig; // -lcfg, -ncfg
|
||||
Bool loadBinds; // -lbi, -nlbi
|
||||
Bool loadTheme; // -ltm, -nltm
|
||||
String Font; // -fn
|
||||
String normalItemForegroundColor{}; // -nif
|
||||
String normalItemBackgroundColor{}; // -nib
|
||||
String normalNextItemForegroundColor{}; // -nnif
|
||||
String normalNextItemBackgroundColor{}; // -nnib
|
||||
String selectedItemForegroundColor{}; // -sif
|
||||
String selectedItemBackgroundColor{}; // -sib
|
||||
String normalItemPriorityForegroundColor{}; // -npf
|
||||
String normalItemPriorityBackgroundColor{}; // -npb
|
||||
String selectedItemPriorityForegroundColor{}; // -spf
|
||||
String selectedItemPriorityBackgroundColor{}; // -spb
|
||||
String promptForegroundColor{}; // -pfg
|
||||
String promptBackgroundColor{}; // -pbg
|
||||
String inputForegroundColor{}; // -ifg
|
||||
String inputBackgroundColor{}; // -ibg
|
||||
String preTextForegroundColor{}; // -ptfg
|
||||
String preTextBackgroundColor{}; // -ptbg
|
||||
String windowColor{}; // -mnbg
|
||||
String normalHighlightForegroundColor{}; // -nhf
|
||||
String normalHighlightBackgroundColor{}; // -nhb
|
||||
String selectedHighlightForegroundColor{}; // -shf
|
||||
String selectedHighlightBackgroundColor{}; // -shb
|
||||
String numberForegroundColor{}; // -nfg
|
||||
String numberBackgroundColor{}; // -nbg
|
||||
String modeForegroundColor{}; // -mfg
|
||||
String modeBackgroundColor{}; // -mbg
|
||||
String leftArrowForegroundColor{}; // -laf
|
||||
String leftArrowBackgroundColor{}; // -lab
|
||||
String rightArrowForegroundColor{}; // -raf
|
||||
String rightArrowBackgroundColor{}; // -rab
|
||||
String caretForegroundColor{}; // -cfc
|
||||
String caretBackgroundColor{}; // -cbg
|
||||
String borderColor{}; // -bc
|
||||
String sgr0Color{}; // -sgr0
|
||||
String sgr1Color{}; // -sgr1
|
||||
String sgr2Color{}; // -sgr2
|
||||
String sgr3Color{}; // -sgr3
|
||||
String sgr4Color{}; // -sgr4
|
||||
String sgr5Color{}; // -sgr5
|
||||
String sgr6Color{}; // -sgr6
|
||||
String sgr7Color{}; // -sgr7
|
||||
String sgr8Color{}; // -sgr8
|
||||
String sgr9Color{}; // -sgr9
|
||||
String sgr10Color{}; // -sgr10
|
||||
String sgr11Color{}; // -sgr11
|
||||
String sgr12Color{}; // -sgr12
|
||||
String sgr13Color{}; // -sgr13
|
||||
String sgr14Color{}; // -sgr14
|
||||
String sgr15Color{}; // -sgr15
|
||||
};
|
||||
|
||||
std::string Run(spmenuSettings *settings);
|
||||
std::string generateArguments(spmenuSettings *settings);
|
||||
std::string addArgument(std::string Argument, std::string Value);
|
||||
std::string addArgument(std::string enabledArgument, std::string disabledArgument, Bool Value);
|
||||
Bool checkBool(bool);
|
||||
}
|
||||
|
||||
#endif
|
18
src/libspmenu/meson.build
Normal file
18
src/libspmenu/meson.build
Normal file
|
@ -0,0 +1,18 @@
|
|||
# libspmenu
|
||||
project('spmenu', 'cpp', version : '3.4')
|
||||
cc = meson.get_compiler('cpp')
|
||||
|
||||
project_source_files = [
|
||||
'libspmenu.cpp',
|
||||
]
|
||||
|
||||
project_dependencies = [
|
||||
]
|
||||
|
||||
build_args = [
|
||||
'-DVERSION=' + meson.project_version(),
|
||||
]
|
||||
|
||||
so_version = meson.project_version()
|
||||
|
||||
lib_shared = shared_library('spmenu', project_source_files, version : so_version, install : true)
|
14
src/libspmenu/test.cpp
Normal file
14
src/libspmenu/test.cpp
Normal file
|
@ -0,0 +1,14 @@
|
|||
#include <iostream>
|
||||
#include "libspmenu.hpp"
|
||||
#include "libspmenu.cpp"
|
||||
|
||||
int main() {
|
||||
spmenu::spmenuSettings settings;
|
||||
|
||||
settings.promptText = "libspmenu test";
|
||||
settings.windowPosition = "Bottom";
|
||||
settings.itemPosition = "Top";
|
||||
settings.standardInput = "Item1\nItem2\nItem3\n";
|
||||
|
||||
std::cout << spmenu::Run(&settings);
|
||||
}
|
Loading…
Reference in a new issue