diff options
| author | Robert Günzler <r@gnzler.io> | 2023-04-04 12:19:56 +0200 |
|---|---|---|
| committer | Robert Günzler <r@gnzler.io> | 2023-04-04 12:19:56 +0200 |
| commit | 70abde6d16965bcf922789846dd0655584a4bfe5 (patch) | |
| tree | 870afed86e18e76d31aace79ee1e82a31dcbff0e /bin | |
| parent | 65f778c4d3d1c860a4f0003ecf980a38b0e008b3 (diff) | |
bin/menu: update
Signed-off-by: Robert Günzler <r@gnzler.io>
Diffstat (limited to 'bin')
| -rwxr-xr-x | bin/menu | 55 | ||||
| -rwxr-xr-x | bin/mkmenu | 17 |
2 files changed, 52 insertions, 20 deletions
diff --git a/bin/menu b/bin/menu index f40e762..23e7801 100755 --- a/bin/menu +++ b/bin/menu @@ -2,10 +2,14 @@ set -e [ -n "$DEBUG" ] && set -x +# make sure there we are the only running menu +pgrep -x bemenu >/dev/null && killall -INT bemenu + +# always source the config to make sure +. "$HOME"/.config/bemenu.conf + arg0=bemenu -# prompt=${MENU_PROMPT:- :} prompt=${MENU_PROMPT:-} -main_color="#4E4371" args= idx=0 @@ -13,15 +17,37 @@ while test $# -gt $idx; do case "$1" in -run) arg0=bemenu-run - prompt=" " + prompt="" shift ;; -drun) - # arg0=$HOME/devel/upstream/github.com/Cloudef/bemenu/bemenu-drun; prompt=bin - arg0=bemenu-drun - prompt=" " - main_color="#e03c8a" + # arg0=bemenu-drun + # prompt="" shift + desktopfiles() { + fd -e desktop . \ + /usr/share/applications/ \ + /usr/local/share/applications/ \ + /var/lib/flatpak/app/*/current/active/export/share/applications/ \ + "$XDG_DATA_HOME"/applications/ 2>/dev/null || true + } + list_apps() { + desktopfiles | + xargs -I{} awk -F= '/^Name=/{ print $2;exit; }' {} | + sort -u + } + get_desktopfile() { + desktopfiles | + xargs -I{} awk -v name="$1" -F= '/^Name=/{ if($2==name) print FILENAME }' {} | + sort -u | + head -n1 + } + app=$(list_apps | MENU_PROMPT="" "$0") + [ -z "$app" ] && exit 0 + desktopfile=$(get_desktopfile "$app") + [ -z "$desktopfile" ] && exit 0 + nohup xdg-exec "$desktopfile" "$@" >/dev/null 2>&1 & + exit 0 ;; -p) shift @@ -36,17 +62,6 @@ while test $# -gt $idx; do idx=$((idx + 1)) done -# HACK: https://github.com/Cloudef/bemenu/issues/5 -args= [ -n "${MENU_PASSWORD}" ] && args="${args} --password" - -# make sure there we are the only running menu -pgrep "${arg0}" && pkill "${arg0}" - -exec "${arg0}" \ - --tb "$main_color" --tf '#fffffb' \ - --hb "$main_color" --hf '#fffffb' \ - --scb '#1c1c1c' --scf "$main_color" \ - --prompt="${prompt}" \ - ${args} \ - "$@" +[ -n "${MENU_POPUP}" ] && args="${args} --center --width-factor 0.5 --border 2 --list 8" # --fixed-height +exec "${arg0}" --prompt "${prompt}" ${args} "$@" diff --git a/bin/mkmenu b/bin/mkmenu new file mode 100755 index 0000000..614f512 --- /dev/null +++ b/bin/mkmenu @@ -0,0 +1,17 @@ +#!/bin/bash +set -e +[ "$DEBUG" ] && set -x +[ "$TEST" ] && { + jq -cn '{p:"test...",o:[{l:"option a",x:"notify-send a"},{l:"option b",x:"notify-send b"}]}' | env -u TEST $0 + exit 0 +} + +read -r IN + +MENU_PROMPT=$(jq -cr '.p' <<<"$IN") +export MENU_PROMPT + +sel=$(jq -cr '.o[].l' <<<"$IN" | menu) +run=$(jq -cr --arg sel "$sel" '.o[] | select(.l == $sel) | .x' <<<"$IN") + +exec sh -c "$run" |