From bfdbe29c0b32c4e8740d509c2fc5ef8d4709bb16 Mon Sep 17 00:00:00 2001 From: Maarten van Gompel Date: Fri, 17 Jul 2020 21:42:49 +0200 Subject: [PATCH] added deeper context menus for vim/vis, nano, tuir, ncmpcpp, w3m This patch looks at whatever application is running inside the st terminal. and presents a more fine-tuned context menu based on it. It does so by parsing WM_NAME. Supported for the moment: vim/vis, nano, tuir, ncmpcpp, w3m This probably won't work if you're in a terminal multiplexer like screen/tmux, unless it's configured to propagate the name of running application. This patch is to be applied **after** my patch for feh/sxiv from earlier today (not included in this patch) Signed-off-by: Miles Alan --- scripts/core/sxmo_appmenu.sh | 136 ++++++++++++++++++++++++++++------- 1 file changed, 112 insertions(+), 24 deletions(-) diff --git a/scripts/core/sxmo_appmenu.sh b/scripts/core/sxmo_appmenu.sh index 5e357f2..e31a3b2 100755 --- a/scripts/core/sxmo_appmenu.sh +++ b/scripts/core/sxmo_appmenu.sh @@ -122,35 +122,123 @@ programchoicesinit() { " WINNAME=Sxiv && return elif echo "$WMCLASS" | grep -i "st-256color"; then - # St - STSELMODEON="$( - echo "$XPROPOUT" | grep -E '^_ST_SELMODE.+=' | cut -d= -f2 | tr -d ' ' - )" - CHOICES=" - Type complete ^ 0 ^ key Ctrl+Shift+u - Copy complete ^ 0 ^ key Ctrl+Shift+i - Selmode $( - [ "$STSELMODEON" = 1 ] && - printf %b 'On → Off' || - printf %b 'Off → On' - printf %b '^ 0 ^ key Ctrl+Shift+s' - ) - $([ "$STSELMODEON" = 1 ] && echo 'Copy selection ^ 0 ^ key Ctrl+Shift+c') - Paste ^ 0 ^ key Ctrl+Shift+v - Zoom + ^ 1 ^ key Ctrl+Shift+Prior - Zoom - ^ 1 ^ key Ctrl+Shift+Next - Scroll ↑ ^ 1 ^ key Ctrl+Shift+b - Scroll ↓ ^ 1 ^ key Ctrl+Shift+f - Invert ^ 1 ^ key Ctrl+Shift+x - Hotkeys ^ 0 ^ sxmo_appmenu.sh sthotkeys - " - WINNAME=St + # St + # First we try to handle the app running inside st: + WMNAME="${1:-$(echo "$XPROPOUT" | grep -E "^WM_NAME" | cut -d ' ' -f3-)}" + if echo "$WMNAME" | grep -i -E "\"(vi|vim|vis|nvim|neovim)\""; then + #Vim in st + CHOICES=" + Scroll ↑ ^ 1 ^ key Ctrl+Shift+u + Scroll ↓ ^ 1 ^ key Ctrl+Shift+d + Command prompt ^ 0 ^ key Escape Shift+semicolon + Save ^ 0 ^ key Escape Shift+semicolon w Return + Quit ^ 0 ^ key Escape Shift+semicolon q Return + Paste Selection ^ 0 ^ key Escape quotedbl asterisk p + Paste Clipboard ^ 0 ^ key Escape quotedbl plus p + Search ^ 0 ^ key Escape / + Zoom + ^ 1 ^ key Ctrl+Shift+Prior + Zoom - ^ 1 ^ key Ctrl+Shift+Next + St menu ^ 0 ^ sxmo_appmenu.sh st-256color + " + WINNAME=Vim + elif echo "$WMNAME" | grep -i -w "nano"; then + #Nano in st + CHOICES=" + Scroll ↑ ^ 1 ^ key Prior + Scroll ↓ ^ 1 ^ key Next + Save ^ 0 ^ key Ctrl+O + Quit ^ 0 ^ key Ctrl+X + Paste ^ 0 ^ key Ctrl+U + Type complete ^ 0 ^ key Ctrl+Shift+u + Copy complete ^ 0 ^ key Ctrl+Shift+i + Zoom + ^ 1 ^ key Ctrl+Shift+Prior + Zoom - ^ 1 ^ key Ctrl+Shift+Next + St menu ^ 0 ^ sxmo_appmenu.sh st-256color + " + WINNAME=Nano + elif echo "$WMNAME" | grep -i -w "tuir"; then + #tuir (reddit client) in st + CHOICES=" + Previous ↑ ^ 1 ^ key k + Next ↓ ^ 1 ^ key j + Scroll ↑ ^ 1 ^ key Prior + Scroll ↓ ^ 1 ^ key Next + Open ^ 0 ^ key o + Back ← ^ 0 ^ key h + Comments → ^ 0 ^ key l + Post ^ 0 ^ key c + Refresh ^ 0 ^ key r + Quit ^ 0 ^ key q + Zoom + ^ 1 ^ key Ctrl+Shift+Prior + Zoom - ^ 1 ^ key Ctrl+Shift+Next + St menu ^ 0 ^ sxmo_appmenu.sh st-256color + " + WINNAME=tuir + elif echo "$WMNAME" | grep -i -w "w3m"; then + #w3m + CHOICES=" + Back ← ^ 1 ^ key B + Goto URL ^ 1 ^ key U + Next Link ^ 1 ^ key Tab + Previous Link ^ 1 ^ key Shift+Tab + Open tab ^ 0 ^ key T + Close tab ^ 0 ^ Ctrl+q + Next tab ^ 1 ^ key braceright + Previous tab ^ 1 ^ key braceleft + Zoom + ^ 1 ^ key Ctrl+Shift+Prior + Zoom - ^ 1 ^ key Ctrl+Shift+Next + St menu ^ 0 ^ sxmo_appmenu.sh st-256color + " + WINNAME=w3m + elif echo "$WMNAME" | grep -i -w "ncmpcpp"; then + #ncmpcpp + CHOICES=" + Playlist ^ 0 ^ key 1 + Browser ^ 0 ^ key 2 + Search ^ 0 ^ key 2 + Next track ^ 0 ^ key greater + Previous track ^ 0 ^ key less + Pause ^ 0 ^ key p + Stop ^ 0 ^ key s + Toggle repeat ^ 0 ^ key r + Toggle random ^ 0 ^ key z + Toggle consume ^ 0 ^ key R + St menu ^ 0 ^ sxmo_appmenu.sh st-256color + " + WINNAME=ncmpcpp + else + STSELMODEON="$( + echo "$XPROPOUT" | grep -E '^_ST_SELMODE.+=' | cut -d= -f2 | tr -d ' ' + )" + CHOICES=" + Type complete ^ 0 ^ key Ctrl+Shift+u + Copy complete ^ 0 ^ key Ctrl+Shift+i + Selmode $( + [ "$STSELMODEON" = 1 ] && + printf %b 'On → Off' || + printf %b 'Off → On' + printf %b '^ 0 ^ key Ctrl+Shift+s' + ) + $([ "$STSELMODEON" = 1 ] && echo 'Copy selection ^ 0 ^ key Ctrl+Shift+c') + Paste ^ 0 ^ key Ctrl+Shift+v + Zoom + ^ 1 ^ key Ctrl+Shift+Prior + Zoom - ^ 1 ^ key Ctrl+Shift+Next + Scroll ↑ ^ 1 ^ key Ctrl+Shift+b + Scroll ↓ ^ 1 ^ key Ctrl+Shift+f + Invert ^ 1 ^ key Ctrl+Shift+x + Hotkeys ^ 0 ^ sxmo_appmenu.sh sthotkeys + " + WINNAME=St + fi elif echo "$WMCLASS" | grep -i "sthotkeys"; then # St hotkeys CHOICES=" Send Ctrl-C ^ 0 ^ key Ctrl+c + Send Ctrl-Z ^ 0 ^ key Ctrl+z Send Ctrl-L ^ 0 ^ key Ctrl+l Send Ctrl-D ^ 0 ^ key Ctrl+d + Send Ctrl-A ^ 0 ^ key Ctrl+a + Send Ctrl-B ^ 0 ^ key Ctrl+b " WINNAME=St elif echo "$WMCLASS" | grep -i netsurf; then @@ -269,7 +357,7 @@ getprogchoices() { key() { xdotool windowactivate "$WIN" - xdotool key --clearmodifiers "$1" + xdotool key --delay 50 --clearmodifiers $* # <-- unquoted, word splitting is deliberate! #--window $WIN }