#!/bin/sh [ ! -f "$HOME/.config/spmenu/spmenu_run.conf" ] && \ mkdir -p "$HOME/.config/spmenu/spmenu_run.conf" && \ touch "$HOME/.config/spmenu/spmenu_run.conf" || \ . "$HOME/.config/spmenu/spmenu_run.conf" [ -z "$TERMINAL" ] && TERMINAL="st -e" [ -z "$BROWSER" ] && BROWSER="xdg-open" [ -z "$TORRENT" ] && TORRENT="qbittorrent" [ -z "$HISTFILE" ] && HISTFILE="${XDG_CACHE_HOME:-$HOME/.cache/}/spmenu_run.hist" path() { echo "$PATH" | tr ':' '\n' | uniq | sed 's#$#/#' | xargs ls -lu --time-style=+%s 2>&1 | awk '/^(-|l)/ { print $6, $7 }' | sort -rn | cut -d' ' -f 2 2>&1; } # run spmenu and parse it parse() { dout="$(path | sed "s/\&/\&/g" | spmenu -im -H "$HISTFILE" "$@")" [ "$(printf '%c' "$dout")" = "#" ] && RUN_ARG="$TERMINAL" [ "$(printf "$dout" | awk '{ print $1 }')" = "magnet" ] && "$TORRENT" "$(printf "$dout" | sed "s/magnet //")" && return [ "$(printf "$dout" | awk '{ print $1 }')" = "www" ] && "$BROWSER" "$(printf "$dout" | sed "s/www //")" && return # terminal [ "$RUN_ARG" != "$TERMINAL" ] && printf "%s" "$dout" | sed "s/#//g" | ${SHELL:-"/bin/sh"} & return [ "$RUN_ARG" = "$TERMINAL" ] && $TERMINAL -e "$(printf "%s" "$dout" | sed "s/#//g")"; return } main() { parse "$@" rm -f "$HOME/.cache/spmenu_run" } main "$@"