aboutsummaryrefslogtreecommitdiff
path: root/scripts/fzfmenu.sh
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-xscripts/fzfmenu.sh48
1 files changed, 31 insertions, 17 deletions
diff --git a/scripts/fzfmenu.sh b/scripts/fzfmenu.sh
index 978b6b7..7166cef 100755
--- a/scripts/fzfmenu.sh
+++ b/scripts/fzfmenu.sh
@@ -4,32 +4,46 @@
set -e;
-screen_width=$(xdotool getdisplaygeometry 2>/dev/null | cut -d' ' -f1)
-
width_px=1000
height_lines=25
top_offset=0
font_width=7
-win_width=$(($width_px / $font_width))
-win_offset=$((($screen_width - $width_px) / 2))
+fzfmenu() {
+ local screen_width=$(xdotool getdisplaygeometry 2>/dev/null | cut -d' ' -f1)
+
+ local win_width=$(($width_px / $font_width))
+ local win_offset=$((($screen_width - $width_px) / 2))
+
+ local fzf_args=$([ -z "$*" ] && echo "" || printf "'%s' " "$@")
+
+ local stdin_pipe=$(mktemp -u /tmp/fzfmenu-input-XXXX)
+ local stdout_pipe=$(mktemp -u /tmp/fzfmenu-output-XXXX)
+ mkfifo "$stdin_pipe" "$stdout_pipe"
+
+ trap "rm -f '$stdin_pipe' '$stdout_pipe'" EXIT
-fzf_args=$([ -z "$*" ] && echo "" || printf "'%s' " "$@")
+ cat >"$stdin_pipe" <&0 &
+ cat "$stdout_pipe" &
-stdin_pipe=$(mktemp -u /tmp/fzfmenu-input-XXXX)
-stdout_pipe=$(mktemp -u /tmp/fzfmenu-output-XXXX)
-mkfifo "$stdin_pipe" "$stdout_pipe"
+ local cmd="fzf --height=100% $fzf_args <'$stdin_pipe' >'$stdout_pipe'"
-trap "rm -f '$stdin_pipe' '$stdout_pipe'" EXIT
+ st \
+ -i -g "=${win_width}x${height_lines}+${win_offset}+${top_offset}" \
+ -e sh -c "$cmd" \
+ >/dev/null 2>&1;
-cat >"$stdin_pipe" <&0 &
-cat "$stdout_pipe" &
+ wait;
+}
-cmd="fzf --height=100% $fzf_args <'$stdin_pipe' >'$stdout_pipe'"
+fzfinput() {
+ fzfmenu --print-query "$@" | tail -n 1;
+}
-st \
- -i -g "=${win_width}x${height_lines}+${win_offset}+${top_offset}" \
- -e sh -c "$cmd" \
- >/dev/null 2>&1;
+cmd="$1";
+case "$cmd" in
+ select) shift 1; fzfmenu "$@" ;;
+ input) shift 1;fzfinput "$@" ;;
+ *) fzfmenu "$@" ;;
+esac
-wait;