upgrade run launcher significantly

This commit is contained in:
speedie 2023-03-28 15:10:57 +02:00
parent a257e61d90
commit cf1b79008b
8 changed files with 68 additions and 16 deletions

View file

@ -82,6 +82,12 @@ You may use long, descriptive arguments or the shorter arguments.
`-nip, --no-indent ` `-nip, --no-indent `
: Don't indent items to prompt width : Don't indent items to prompt width
`-ci, --color-items `
: Color items
`-nci, --no-color-items `
: Don't color items
`-a, --alpha ` `-a, --alpha `
: Enable alpha : Enable alpha

View file

@ -86,6 +86,7 @@ spmenu.class: spmenu
spmenu.fast: 0 spmenu.fast: 0
spmenu.managed: 0 spmenu.managed: 0
spmenu.mon: -1 spmenu.mon: -1
spmenu.coloritems: 1
!! Image !! Image
spmenu.imagewidth: 86 spmenu.imagewidth: 86

View file

@ -134,6 +134,10 @@ readargs(int argc, char *argv[])
indentitems = 1; indentitems = 1;
} else if (!strcmp(argv[i], "-nip") || (!strcmp(argv[i], "--no-indent"))) { // don't indent to prompt width } else if (!strcmp(argv[i], "-nip") || (!strcmp(argv[i], "--no-indent"))) { // don't indent to prompt width
indentitems = 0; indentitems = 0;
} else if (!strcmp(argv[i], "-ci") || (!strcmp(argv[i], "--color-items"))) { // color items
coloritems = 1;
} else if (!strcmp(argv[i], "-nci") || (!strcmp(argv[i], "--no-color-items"))) { // don't color items
coloritems = 0;
} else if (i + 1 == argc) { } else if (i + 1 == argc) {
// any of the arguments we checked first // any of the arguments we checked first
if ((!strcmp(argv[i], "-xrdb") if ((!strcmp(argv[i], "-xrdb")
@ -358,6 +362,8 @@ usage(void)
"spmenu -p, --prompt <text> Set spmenu prompt text to <text>\n" "spmenu -p, --prompt <text> Set spmenu prompt text to <text>\n"
"spmenu -ip, --indent Indent items to prompt width\n" "spmenu -ip, --indent Indent items to prompt width\n"
"spmenu -nip, --no-indent Don't indent items to prompt width\n" "spmenu -nip, --no-indent Don't indent items to prompt width\n"
"spmenu -ci, --color-items Color items\n"
"spmenu -nci, --no-color-items Don't color items\n"
"spmenu -a, --alpha Enable alpha\n" "spmenu -a, --alpha Enable alpha\n"
"spmenu -na, --no-alpha Disable alpha\n" "spmenu -na, --no-alpha Disable alpha\n"
"spmenu -tp, --allow-typing Allow the user to type\n" "spmenu -tp, --allow-typing Allow the user to type\n"

View file

@ -64,6 +64,9 @@ drawitemtext(struct item *item, int x, int y, int w)
memcpy(scm, scheme[SchemeItemNormPri], sizeof(scm)); memcpy(scm, scheme[SchemeItemNormPri], sizeof(scm));
} }
// don't color
if (!coloritems) memcpy(scm, scheme[SchemeItemNorm], sizeof(scm));
drw_setscheme(drw, scm); // set scheme drw_setscheme(drw, scm); // set scheme
// parse item text // parse item text

View file

@ -94,6 +94,7 @@ ResourcePref resources[] = {
{ "color14", STRING, &col_sgrcolor14 }, { "color14", STRING, &col_sgrcolor14 },
{ "color15", STRING, &col_sgrcolor15 }, { "color15", STRING, &col_sgrcolor15 },
{ "coloritems", INTEGER, &coloritems },
{ "menuposition", INTEGER, &menuposition }, { "menuposition", INTEGER, &menuposition },
{ "menupaddingv", INTEGER, &menupaddingv }, { "menupaddingv", INTEGER, &menupaddingv },
{ "menupaddingh", INTEGER, &menupaddingh }, { "menupaddingh", INTEGER, &menupaddingh },

View file

@ -160,4 +160,5 @@ static int pango_password = 0; /* Enable support for pango markup f
#define borderalpha opaque /* Border alpha */ #define borderalpha opaque /* Border alpha */
/* Misc */ /* Misc */
static char worddelimiters[] = " "; /* Word delimiters, " " is default. */ static int coloritems = 1; /* Color items or not */
static char worddelimiters[] = " "; /* Word delimiters used for keybinds that change words, " " is default. */

View file

@ -1,9 +1,11 @@
#!/bin/sh #!/bin/sh
[ -z "$TERMINAL" ] && TERMINAL="st -e" [ -z "$TERMINAL" ] && TERMINAL="st -e"
[ -z "$BROWSER" ] && BROWSER="xdg-open" [ -z "$BROWSER" ] && BROWSER="xdg-open"
[ -z "$TORRENT" ] && TORRENT="qbittorrent" [ -z "$TORRENT" ] && TORRENT="qbittorrent"
[ -z "$HISTORY" ] && HISTORY="${XDG_CACHE_HOME:-$HOME/.cache/}/spmenu_run.hist" [ -z "$WEB_GREP" ] && WEB_GREP="http:|https:|www[.]"
[ -z "$RUNLAUNCHER" ] && RUNLAUNCHER=spmenu [ -z "$MAGNET_GREP" ] && MAGNET_GREP="magnet:?"
[ -z "$HISTORY" ] && HISTORY="${XDG_CACHE_HOME:-$HOME/.cache/}/spmenu_run.hist"
[ -z "$RUNLAUNCHER" ] && RUNLAUNCHER=spmenu
[ -z "$RUNLAUNCHER_ARGS" ] && RUNLAUNCHER_ARGS="--insert --hist-file $HISTORY $*" [ -z "$RUNLAUNCHER_ARGS" ] && RUNLAUNCHER_ARGS="--insert --hist-file $HISTORY $*"
check() { check() {
@ -25,7 +27,7 @@ path() {
} }
print_help() { print_help() {
cat << EOF | $RUNLAUNCHER $RUNLAUNCHER_ARGS --lines 20 --columns 1 --normal --sgr1 "#FFFF00" --hide-cursor --no-allow-typing > /dev/null cat << EOF | $RUNLAUNCHER $RUNLAUNCHER_ARGS --lines 20 --columns 1 --normal --sgr1 "#FFFF00" --hide-cursor --no-allow-typing --no-color-items --prompt "" > /dev/null
Start typing in keywords to list out entries. Press Enter to select an entry. The selected entry will be run through a shell. Start typing in keywords to list out entries. Press Enter to select an entry. The selected entry will be run through a shell.
To set spmenu options, you pass arguments to 'spmenu_run' directly. See 'spmenu --help' for a list of valid arguments. To set spmenu options, you pass arguments to 'spmenu_run' directly. See 'spmenu --help' for a list of valid arguments.
To configure spmenu, you may also copy /usr/share/spmenu/example.Xresources to $HOME/.config/spmenu/spmenurc and edit that. To configure spmenu, you may also copy /usr/share/spmenu/example.Xresources to $HOME/.config/spmenu/spmenurc and edit that.
@ -38,26 +40,52 @@ $(printf '\033[0;31m')Note: This may also be displayed if you deleted your spmen
EOF EOF
} }
# run spmenu and parse it print_config() {
[ -f "$HOME/.config/spmenu/run/config" ] && . "$HOME/.config/spmenu/run/config" && return
mkdir -p "$HOME/.config/spmenu/run"
cat << EOF > "$HOME/.config/spmenu/run/config"
# spmenu_run default configuration file
TERMINAL="\${TERMINAL:-st -e}" # Terminal
BROWSER="\${BROWSER:-xdg-open}" # Web browser
TORRENT="\${TORRENT:-qbittorrent}" # Torrent client
WEB_GREP="http:|https:|www[.]" # Needs to be in grep -E syntax
MAGNET_GREP="magnet:?" # Needs to be in grep -E syntax
HISTORY="\${XDG_CACHE_HOME:-\$HOME/.cache/}/spmenu_run.hist" # History file
RUNLAUNCHER="\${RUNLAUNCHER:-spmenu}" # Run launcher to use
RUNLAUNCHER_ARGS="--insert --hist-file \$HISTORY \$*"
EOF
[ -f "$HOME/.config/spmenu/run/config" ] && . "$HOME/.config/spmenu/run/config" && return
}
parse() { parse() {
dout="$(path | sed "s/\&/\&amp;/g" | $RUNLAUNCHER $RUNLAUNCHER_ARGS)" dout="$(path | sed "s/\&/\&amp;/g" | $RUNLAUNCHER $RUNLAUNCHER_ARGS)"
# parse # parse
[ "$(printf '%c' "$dout")" = "#" ] && RUN_ARG="$TERMINAL" [ "$(printf '%c' "$dout")" = "#" ] && EXEC=term
[ "$(printf "$dout" | awk '{ print $1 }')" = "magnet" ] && "$TORRENT" "$(printf "$dout" | sed "s/magnet //")" [ "$(printf "$dout" | awk '{ print $1 }')" = "magnet" ] && EXEC=torrent
[ "$(printf "$dout" | awk '{ print $1 }')" = "www" ] && "$BROWSER" "$(printf "$dout" | sed "s/www //")" [ "$(printf "$dout" | awk '{ print $1 }')" = "www" ] && EXEC=web
[ "$(printf "$dout" | awk '{ print $1 }')" = "?" ] && print_help && main && return [ "$(printf "$dout" | awk '{ print $1 }')" = "?" ] && print_help && main && return
# terminal # check for keywords
[ -z "$RUN_ARG" ] && \ printf "%s" "$dout" | grep -qE "$WEB_GREP" && EXEC=web
printf "%s" "$dout" | sed "s/#//g" | ${SHELL:-"/bin/sh"} & printf "%s" "$dout" | grep -qE "$MAGNET_GREP" && EXEC=torrent
}
[ "$RUN_ARG" = "$TERMINAL" ] && $TERMINAL -e "$(printf "%s" "$dout" | sed "s/#//g")"; return exec_cmd() {
[ -z "$EXEC" ] && EXEC=shell
case "$EXEC" in
"shell") printf "%s" "$dout" | sed "s/#//g" | ${SHELL:-"/bin/sh"} & ;;
"term") $TERMINAL -e "$(printf "%s" "$dout" | sed "s/#//g")" & ;;
"web") $BROWSER "$(printf "$dout" | sed "s/www //g")" & ;;
"torrent") $TORRENT "$(printf "$dout" | sed "s/magnet //g")" & ;;
esac
} }
main() { main() {
check "$@" check "$@"
print_config "$@"
parse "$@" parse "$@"
exec_cmd "$@"
rm -f "$HOME/.cache/spmenu_run" rm -f "$HOME/.cache/spmenu_run"
} }

View file

@ -1,4 +1,4 @@
.\" Automatically generated by Pandoc 3.1 .\" Automatically generated by Pandoc 3.0.1
.\" .\"
.\" Define V font for inline verbatim, using C font in formats .\" Define V font for inline verbatim, using C font in formats
.\" that render this, and otherwise B font. .\" that render this, and otherwise B font.
@ -98,6 +98,12 @@ Indent items to prompt width
\f[V]-nip, --no-indent\f[R] \f[V]-nip, --no-indent\f[R]
Don\[cq]t indent items to prompt width Don\[cq]t indent items to prompt width
.TP .TP
\f[V]-ci, --color-items\f[R]
Color items
.TP
\f[V]-nci, --no-color-items\f[R]
Don\[cq]t color items
.TP
\f[V]-a, --alpha\f[R] \f[V]-a, --alpha\f[R]
Enable alpha Enable alpha
.TP .TP