libspmenu: Integrate libspmenu into main project

This commit is contained in:
Jacob 2023-09-25 18:18:00 +02:00
parent 3d9711c971
commit b1e16da5ca
7 changed files with 478 additions and 16 deletions

View file

@ -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

View file

@ -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
}

View file

@ -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
View 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
View 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
View 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
View 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);
}