~adnano/wmenu

b8d626ad09a0b38644cc4b07aaefe213529d06cc — sewn 3 months ago 1c6c9c1
add wmenu_run script, similar to dmenu_run script

based off the works of sinanmohd, modified to be simpler and better
to read, with shellcheck.

Co-authored-by: sinanmohd <sinan@firemail.cc>
2 files changed, 37 insertions(+), 0 deletions(-)

M meson.build
A wmenu_run
M meson.build => meson.build +2 -0
@@ 33,6 33,8 @@ rt = cc.find_library('rt')
subdir('protocols')
subdir('docs')

install_data('wmenu_run', install_dir: get_option('bindir'))

executable(
	'wmenu',
	files(

A wmenu_run => wmenu_run +35 -0
@@ 0,0 1,35 @@
#!/bin/sh

cachedir="${XDG_CACHE_HOME:-"$HOME/.cache"}"
cache="$cachedir/wmenu_run"

[ -d "$cachedir" ] || mkdir -p "$cachedir"

uptodate() {
	[ -f "$cache" ] || return 1
	IFS=:
	for path in $PATH; do
		# non-POSIX
		test "$path" -nt "$cache" && return 1
	done
	return 0
}

bins() {
	IFS=:
	for path in $PATH; do
		for bin in "$path"/*; do
			[ -x "$bin" ] && echo "${bin##*/}"
		done
	done
}

path() {
	if uptodate; then
		cat "$cache"
	else
		bins | sort -u | tee "$cache"
	fi
}

path | wmenu "$@" | ${SHELL:-"/bin/sh"} &