proof of concept for stevia (phosh-osk-stub) auto-changing shortcuts application-specifically
Diffstat (limited to 'sxmo_hook_contextmenu.sh')
-rwxr-xr-xsxmo_hook_contextmenu.sh741
1 files changed, 741 insertions, 0 deletions
diff --git a/sxmo_hook_contextmenu.sh b/sxmo_hook_contextmenu.sh
new file mode 100755
index 0000000..d398d0d
--- /dev/null
+++ b/sxmo_hook_contextmenu.sh
@@ -0,0 +1,741 @@
+#!/bin/sh
+# SPDX-License-Identifier: AGPL-3.0-only
+# Copyright 2022 Sxmo Contributors
+# derived from sxmo_hook_contextmenu.sh
+# Copyright 2024 Zach DeCook
+activewmclass="$1"
+activetitle="$2"
+if ! test "$activewmclass"; then
+ json="$(hyprctl -j -i 0 activewindow)"
+ activewmclass="$(printf "%s" "$json" | jq -r .class)"
+ activetitle="$(printf "%s" "$json" | jq -r .title)"
+fi
+WMNAME="$activewmclass $activetitle"
+echo $WMNAME
+
+case "$activewmclass" in
+ *mpv*)
+ # MPV
+ CHOICES="
+ $icon_pau Pause ^ 0 ^ sxmo_type -k Space
+ $icon_fbw Seek ^ 1 ^ sxmo_type -k Left
+ $icon_ffw Seek ^ 1 ^ sxmo_type -k Right
+ $icon_aru App Volume Up ^ 1 ^ sxmo_type 0
+ $icon_ard App Volume Down ^ 1 ^ sxmo_type 9
+ $icon_aru Speed up ^ 1 ^ sxmo_type -k bracketRight
+ $icon_ard Speed down ^ 1 ^ sxmo_type -k bracketLeft
+ $icon_cam Screenshot ^ 1 ^ sxmo_type s
+ $icon_itm Loopmark ^ 1 ^ sxmo_type l
+ $icon_inf Info ^ 1 ^ sxmo_type i
+ $icon_inf Seek Info ^ 1 ^ sxmo_type o
+ "
+ WINNAME=Mpv
+ ;;
+ io.bassi.amberol)
+ CHOICES="
+ $icon_pau Play/Pause ^ 0 ^ playerctl play-pause
+ $icon_prv Previous Track ^ 1 ^ playerctl previous
+ $icon_nxt Next Track ^ 1 ^ playerctl next
+ "
+ WINNAME=Amberol
+ ;;
+ *feh*)
+ # Feh
+ CHOICES="
+ $icon_arr Next ^ 1 ^ sxmo_type -k Space
+ $icon_arl Previous ^ 1 ^ sxmo_type -k BackSpace
+ $icon_zmi Zoom in ^ 1 ^ sxmo_type -k up
+ $icon_zmo Zoom out ^ 1 ^ sxmo_type -k down
+ $icon_exp Zoom to fit ^ 1 ^ sxmo_type -k slash
+ $icon_shr Zoom to fill ^ 1 ^ sxmo_type '!'
+ $icon_rol Rotate ^ 1 ^ sxmo_type -k less
+ $icon_ror Rotate ^ 1 ^ sxmo_type -k greater
+ $icon_a2y Flip ^ 1 ^ sxmo_type -k underscore
+ $icon_a2x Mirror ^ 1 ^ sxmo_type -k bar
+ $icon_inf Toggle filename ^ 1 ^ sxmo_type d
+ "
+ WINNAME=Feh
+ ;;
+ *sxiv*)
+ # Sxiv
+ CHOICES="
+ $icon_arr Next ^ 1 ^ sxmo_type -k Space
+ $icon_arl Previous ^ 1 ^ sxmo_type -k BackSpace
+ $icon_zmi Zoom in ^ 1 ^ sxmo_type -k equal
+ $icon_zmo Zoom out ^ 1 ^ sxmo_type -k minus
+ $icon_rol Rotate ^ 1 ^ sxmo_type -k less
+ $icon_ror Rotate ^ 1 ^ sxmo_type -k greater
+ $icon_a2y Flip ^ 1 ^ sxmo_type -k question
+ $icon_a2x Mirror ^ 1 ^ sxmo_type -k bar
+ $icon_grd Thumbnail ^ 0 ^ sxmo_type -k Return
+ "
+ WINNAME=Sxiv
+ ;;
+ *imv*)
+ # imv
+ CHOICES="
+ $icon_arr Next ^ 1 ^ sxmo_type -k Right
+ $icon_arl Previous ^ 1 ^ sxmo_type -k Left
+ $icon_zmi Zoom in ^ 1 ^ sxmo_type -k i
+ $icon_zmo Zoom out ^ 1 ^ sxmo_type -k minus
+ $icon_exp Zoom to fit ^ 1 ^ sxmo_type -k r
+ $icon_ror Rotate ^ 1 ^ sxmo_type -M ctrl r
+ $icon_inf Toggle filename ^ 1 ^ sxmo_type -k d
+ "
+ WINNAME=Imv
+ ;;
+ *kasts*)
+ CHOICES="
+ $icon_mus Audio ^ 0 ^ sxmo_audio.sh
+ $icon_bth Bluetooth ^ 0 ^ sxmo_bluetoothmenu.sh
+ "
+ WINNAME="Kasts"
+ ;;
+ *sthotkeys*)
+ # St hotkeys
+ CHOICES="
+ Send Ctrl-C ^ 0 ^ sxmo_type -M Ctrl -k c
+ Send Ctrl-Z ^ 0 ^ sxmo_type -M Ctrl -k z
+ Send Ctrl-L ^ 0 ^ sxmo_type -M Ctrl -k l
+ Send Ctrl-D ^ 0 ^ sxmo_type -M Ctrl -k d
+ Send Ctrl-A ^ 0 ^ sxmo_type -M Ctrl -k a
+ Send Ctrl-B ^ 0 ^ sxmo_type -M Ctrl -k b
+ Send ESC:w ^ 0 ^ sxmo_type -k Escape -s 300 -M Shift -k semicolon -m Shift -k w -k Return
+ Send ESC:wq ^ 0 ^ sxmo_type -k Escape -s 300 -M Shift -k semicolon -m Shift -k w -k q -k Return
+ Send ESC:wq! ^ 0 ^ sxmo_type -k Escape -s 300 -M Shift -k semicolon -m Shift -k q -k exclam -k Return
+ "
+ WINNAME=St
+ ;;
+ *foot*|*st*|Terminal|*terminal*|org.gnome.vte.application|*alacritty*)
+ # These git commands only launch the editor.
+ case "$WMNAME" in
+ *"git add"*|*"git bugreport"*|*"git commit"*|*"git merge"*|*"git notes"*|*"git rebase"*|*"git replace"*|*"git send-email"*|*"git svn"*)
+ WMNAME="$WMCLASS $EDITOR"
+ ;;
+ esac
+
+ # First we try to handle the app running inside the terminal:
+ case " $WMNAME " in
+ *" vi "*|*" vim "*|*" vis "*|*" nvim "*|*neovim*|*kakoune*)
+ #Vim in foot
+ CHOICES="
+ $icon_cls Save and Quit ^ 0 ^ sxmo_type -k Escape -s 300 ':wq' -k Return
+ $icon_sav Save ^ 0 ^ sxmo_type -k Escape -s 300 ':w' -k Return
+ $icon_cls Quit without saving ^ 0 ^ sxmo_type -k Escape -s 300 ':q!' -k Return
+ $icon_aru Scroll up ^ 1 ^ sxmo_type -M Ctrl u
+ $icon_ard Scroll down ^ 1 ^ sxmo_type -M Ctrl d
+ $icon_trm Command prompt ^ 0 ^ sxmo_type -k Escape -s 300 ':'
+ $icon_pst Paste Selection ^ 0 ^ sxmo_type -k Escape -s 300 -k quotedbl -k asterisk -k p
+ $icon_pst Paste Clipboard ^ 0 ^ sxmo_type -k Escape -s 300 -k quotedbl -k plus -k p
+ $icon_fnd Search ^ 0 ^ sxmo_type -k Escape -s 300 /
+ $icon_arr Next buffer ^ 1 ^ sxmo_type -k Escape -s 300 ':bn' -k Return
+ $icon_arl Previous buffer ^ 1 ^ sxmo_type -k Escape -s 300 ':bp' -k Return
+ $icon_zmi Zoom in ^ 1 ^ sxmo_type -k Prior
+ $icon_zmo Zoom out ^ 1 ^ sxmo_type -k Next
+ $icon_mnu Terminal menu ^ 0 ^ sxmo_appmenu.sh $WMCLASS
+ "
+ WINNAME=Vim
+ ;;
+ *nano*)
+ #Nano in foot
+ CHOICES="
+ $icon_aru Scroll up ^ 1 ^ sxmo_type -k Prior
+ $icon_ard Scroll down ^ 1 ^ sxmo_type -k Next
+ $icon_sav Save ^ 0 ^ sxmo_type -M Ctrl o
+ $icon_cls Quit ^ 0 ^ sxmo_type -M Ctrl x
+ $icon_pst Paste ^ 0 ^ sxmo_type -M Ctrl u
+ $icon_itm Type complete ^ 0 ^ sxmo_type -M Shift -M Ctrl u
+ $icon_cpy Copy complete ^ 0 ^ sxmo_type -M Shift -M Ctrl i
+ $icon_zmi Zoom in ^ 1 ^ sxmo_type -k Prior
+ $icon_zmo Zoom out ^ 1 ^ sxmo_type -k Next
+ $icon_mnu Terminal menu ^ 0 ^ sxmo_appmenu.sh $WMCLASS
+ "
+ WINNAME=Nano
+ ;;
+ *micro*)
+ #Micro
+ CHOICES="
+ $icon_aru Scroll up ^ 1 ^ sxmo_type -k Prior
+ $icon_ard Scroll down ^ 1 ^ sxmo_type -k Next
+ $icon_prv Previous Tab ^ 1 ^ sxmo_type -M Alt , -m Alt
+ $icon_nxt Next Tab ^ 1 ^ sxmo_type -M Alt . -m Alt
+ $icon_sav Save ^ 1 ^ sxmo_type -M Ctrl s -m Ctrl
+ $icon_cls Quit ^ 0 ^ sxmo_type -M Ctrl q -m Ctrl
+ $icon_fnd Find ^ 0 ^ sxmo_type -M Ctrl f -m Ctrl
+ $icon_fnd Find Previous ^ 1 ^ sxmo_type -M Ctrl p -m Ctrl
+ $icon_fnd Find Next ^ 1 ^ sxmo_type -M Ctrl n -m Ctrl
+ $icon_trm Command Bar ^ 0 ^ sxmo_type -M Ctrl e -m Ctrl
+ $icon_cpy Copy ^ 0 ^ sxmo_type -M Ctrl c -m Ctrl
+ $icon_pst Paste ^ 0 ^ sxmo_type -M Ctrl v -m Ctrl
+ $icon_mnu Terminal menu ^ 0 ^ sxmo_appmenu.sh $WMCLASS
+ "
+ WINNAME=Micro
+ ;;
+ *tuir*)
+ #tuir (reddit client) in foot
+ CHOICES="
+ $icon_aru Previous ^ 1 ^ sxmo_type k
+ $icon_ard Next ^ 1 ^ sxmo_type j
+ $icon_aru Scroll up ^ 1 ^ sxmo_type -k Prior
+ $icon_ard Scroll down ^ 1 ^ sxmo_type -k Next
+ $icon_ret Open ^ 0 ^ sxmo_type o
+ $icon_arl Back ^ 0 ^ sxmo_type h
+ $icon_arr Comments ^ 0 ^ sxmo_type l
+ $icon_edt Post ^ 0 ^ sxmo_type c
+ $icon_rld Refresh ^ 0 ^ sxmo_type r
+ $icon_cls Quit ^ 0 ^ sxmo_type q
+ $icon_zmi Zoom in ^ 1 ^ sxmo_type -k Prior
+ $icon_zmo Zoom out ^ 1 ^ sxmo_type -k Next
+ $icon_mnu Terminal menu ^ 0 ^ sxmo_appmenu.sh $WMCLASS
+ "
+ WINNAME=tuir
+ ;;
+ *w3m*)
+ #w3m
+ CHOICES="
+ $icon_arl Back ^ 1 ^ sxmo_type b
+ $icon_glb Goto URL ^ 1 ^ sxmo_type u
+ $icon_arr Next Link ^ 1 ^ sxmo_type -k Tab
+ $icon_arl Previous Link ^ 1 ^ sxmo_type -M Shift -k Tab
+ $icon_tab Open tab ^ 0 ^ sxmo_type t
+ $icon_cls Close tab ^ 0 ^ sxmo_type -M Ctrl q
+ $icon_itm Next tab ^ 1 ^ sxmo_type -k braceRight
+ $icon_itm Previous tab ^ 1 ^ sxmo_type -k braceLeft
+ $icon_zmi Zoom in ^ 1 ^ sxmo_type -k Prior
+ $icon_zmo Zoom out ^ 1 ^ sxmo_type -k Next
+ $icon_mnu Terminal menu ^ 0 ^ sxmo_appmenu.sh $WMCLASS
+ "
+ WINNAME=w3m
+ ;;
+ *ncmpcpp*)
+ #ncmpcpp
+ CHOICES="
+ $icon_lst Playlist ^ 0 ^ sxmo_type 1
+ $icon_fnd Browser ^ 0 ^ sxmo_type 2
+ $icon_fnd Search ^ 0 ^ sxmo_type 3
+ $icon_nxt Next track ^ 0 ^ sxmo_type -k greater
+ $icon_prv Previous track ^ 0 ^ sxmo_type -k less
+ $icon_pau Pause ^ 0 ^ sxmo_type p
+ $icon_stp Stop ^ 0 ^ sxmo_type s
+ $icon_rld Toggle repeat ^ 0 ^ sxmo_type r
+ $icon_sfl Toggle random ^ 0 ^ sxmo_type z
+ $icon_itm Toggle consume ^ 0 ^ sxmo_type R
+ $icon_mnu Terminal menu ^ 0 ^ sxmo_appmenu.sh $WMCLASS
+ "
+ WINNAME=ncmpcpp
+ ;;
+ *aerc*)
+ #aerc
+ CHOICES="
+ $icon_pau Archive ^ 1 ^ sxmo_type ':archive flat' -k Return
+ $icon_nxt Next Tab ^ 0 ^ sxmo_type ':next-tab' -k Return
+ $icon_prv Previous Tab ^ 0 ^ sxmo_type ':prev-tab' -k Return
+ $icon_cls Close Tab ^ 0 ^ sxmo_type ':close' -k Return
+ $icon_itm Next Part ^ 1 ^ sxmo_type ':next-part' -k Return
+ $icon_trm xdg-open Part ^ 0 ^ sxmo_type ':open' -k Return
+ "
+ WINNAME=aerc
+ ;;
+ *less*|*"git blame"*|*"git diff"*|*"git grep"*|*"git help"*|*"git log"*|*"git stash"*|*"git tag"*|*"git var"*)
+ #less
+ CHOICES="
+ $icon_arr Page next ^ 1 ^ sxmo_type ':n' -k Return
+ $icon_arl Page previous ^ 1 ^ sxmo_type ':p' -k Return
+ $icon_cls Quit ^ 0 ^ sxmo_type q
+ $icon_zmi Zoom in ^ 1 ^ sxmo_type -M Ctrl +
+ $icon_zmo Zoom out ^ 1 ^ sxmo_type -M Ctrl -k Minus
+ $icon_aru Scroll up ^ 1 ^ sxmo_type -k Prior
+ $icon_ard Scroll down ^ 1 ^ sxmo_type -k Next
+ $icon_mnu Terminal menu ^ 0 ^ sxmo_appmenu.sh $WMCLASS
+ "
+ WINNAME=less
+ ;;
+ *git*)
+ # git am, branch, config, tag (and other commands which launch both).
+ CHOICES="
+ $icon_fil ${PAGER:-less} menu ^ 0 ^ sxmo_appmenu.sh '$WMCLASS ${PAGER:-less}'
+ $icon_edt $EDITOR menu ^ 0 ^ sxmo_appmenu.sh '$WMCLASS $EDITOR'
+ $icon_mnu Terminal menu ^ 0 ^ sxmo_appmenu.sh $WMCLASS
+ "
+ WINNAME=git
+ ;;
+ *senpai*)
+ CHOICES="
+ $icon_aru Scroll up ^ 1 ^ sxmo_type -k Prior
+ $icon_ard Scroll down ^ 1 ^ sxmo_type -k Next
+ $icon_ac1 Previous Buffer ^ 1 ^ sxmo_type -M Alt -k Left
+ $icon_ac4 Next Buffer ^ 1 ^ sxmo_type -M Alt -k Right
+ $icon_lst Toggle Channels ^ 0 ^ sxmo_type -k F7
+ $icon_usr Toggle Members ^ 0 ^ sxmo_type -k F8
+ "
+ WINNAME=senpai
+ ;;
+ *weechat*)
+ #weechat
+ CHOICES="
+ $icon_msg Hotlist Next ^ 1 ^ sxmo_type -M Alt a
+ $icon_arl History Previous ^ 1 ^ sxmo_type -M Alt -k Less
+ $icon_arr History Next ^ 1 ^ sxmo_type -M Alt -k Greater
+ $icon_trm Buffer ^ 0 ^ sxmo_type '/buffer '
+ $icon_aru Scroll up ^ 1 ^ sxmo_type -k Prior
+ $icon_ard Scroll down ^ 1 ^ sxmo_type -k Next
+ $icon_mnu Terminal menu ^ 0 ^ sxmo_appmenu.sh $WMCLASS
+ "
+ WINNAME=weechat
+ ;;
+ *" sms "*|*"missed call"*)
+ number="$(printf "%s\n" "$WMNAME" | xargs -0 pnc find | tr -d '\n')"
+ #sms
+ CHOICES="
+ $icon_msg Conversation ^ 0 ^ sxmo_terminal.sh sxmo_modemtext.sh conversationloop $number
+ $icon_msg Reply ^ 0 ^ sxmo_modemtext.sh sendtextmenu $number
+ $icon_phn Call ^ 0 ^ sxmo_modemdial.sh $number
+ $([ -d "$SXMO_LOGDIR/$number/attachments" ] && echo "$icon_att View Attachments ^ 1 ^ sxmo_files.sh $SXMO_LOGDIR/$number/attachments --date-sort")
+ $(
+
+ found_numbers="$(printf %s "$number" | xargs -I{} pnc find "{}")"
+ printf "%s\n" "$found_numbers" | while read -r line; do
+ sxmo_contacts.sh --name "$line" | grep -q '???' && echo "$icon_usr Add $line ^ 1 ^ sxmo_contactmenu.sh newcontact $line"
+ done
+ # if this is a group chain, then allow to add entire chain as a contact too
+ if [ "$(printf "%s\n" "$found_numbers" | wc -l)" -gt 1 ]; then
+ sxmo_contacts.sh --name "$number" | grep -q '???' && echo "$icon_usr Add $number ^ 1 ^ sxmo_contactmenu.sh newcontact $number"
+ fi
+
+ )
+ $icon_aru Scroll up ^ 1 ^ sxmo_type -M Shift -M Ctrl b
+ $icon_ard Scroll down ^ 1 ^ sxmo_type -M Shift -M Ctrl f
+ $icon_mnu Terminal menu ^ 0 ^ sxmo_appmenu.sh $WMCLASS
+ "
+ WINNAME=phone
+ ;;
+ *cmus*)
+ # cmus
+ # requires `:set set_term_title=false` in cmus to match the application
+ CHOICES="
+ $icon_itm Play ^ 0 ^ cmus-remote -p
+ $icon_pau Pause ^ 0 ^ cmus-remote -u
+ $icon_stp Stop ^ 0 ^ cmus-remote -s
+ $icon_nxt Next track ^ 0 ^ cmus-remote -n
+ $icon_prv Previous track ^ 0 ^ cmus-remote -r
+ $icon_rld Toggle repeat ^ 0 ^ cmus-remote -R
+ $icon_sfl Toggle random ^ 0 ^ cmus-remote -S
+ $icon_mnu Terminal menu ^ 0 ^ sxmo_appmenu.sh $WMCLASS
+ "
+ WINNAME=cmus
+ ;;
+ *iamb*)
+ CHOICES="
+ $icon_aru Page Up ^ 1 ^ sxmo_type.sh -k Escape -M Ctrl -k b
+ $icon_tab Toggle Selection ^ 0 ^ sxmo_type.sh -k Escape -M Ctrl -k W m
+ $icon_ard Page Down ^ 1 ^ sxmo_type.sh -k Escape -M Ctrl -k f
+ $icon_ret Reply To Message ^ 0 ^ sxmo_type.sh -k Escape :reply -k Return
+ $icon_tab New Tab ^ 0 ^ sxmo_type.sh -k Escape :tab rooms -k Return
+ $icon_arl Previous Tab ^ 0 ^ sxmo_type.sh -k Escape :tabp -k Return
+ $icon_arr Next Tab ^ 0 ^ sxmo_type.sh -k Escape :tabn -k Return
+ $icon_cls Close Tab ^ 0 ^ sxmo_type.sh -k Escape :tabclose -k Return
+ $icon_win Split View ^ 0 ^ sxmo_type.sh -k Escape :split -k Return
+ $icon_win Split View Vertical ^ 0 ^ sxmo_type.sh -k Escape :vsplit -k Return
+ $icon_msg Direct Messages ^ 0 ^ sxmo_type.sh -k Escape :dms -k Return
+ $icon_grp Rooms ^ 0 ^ sxmo_type.sh -k Escape :rooms -k Return
+ $icon_glb Spaces ^ 0 ^ sxmo_type.sh -k Escape :spaces -k Return
+ $icon_sav Download ^ 0 ^ sxmo_type.sh -k Escape :download -k Return
+ $icon_cls Close View/Quit ^ 0 ^ sxmo_type.sh -k Escape :quit -k Return
+ "
+ WINNAME=iamb
+ ;;
+ *)
+ # Now we fallback to the default terminal menu
+ case "$WMCLASS" in
+ *st*)
+ STSELMODEON="$(
+ printf %s "$XPROPOUT" | grep -E '^_ST_SELMODE.+=' | cut -d= -f2 | tr -d ' '
+ )"
+ CHOICES="
+ $icon_itm Type complete ^ 0 ^ sxmo_type -M Ctrl -M Shift -k u
+ $icon_cpy Copy complete ^ 0 ^ sxmo_type -M Ctrl -M Shift -k i
+ $icon_itm Selmode $(
+ [ "$STSELMODEON" = 1 ] &&
+ printf %b "$icon_ton" ||
+ printf %b "$icon_tof"
+ printf %b '^ 0 ^ sxmo_type -M Ctrl -M Shift -k s'
+ )
+ $([ "$STSELMODEON" = 1 ] && echo 'Copy selection ^ 0 ^ sxmo_type -M Ctrl -M Shift -k c')
+ $icon_pst Paste ^ 0 ^ sxmo_type -M Ctrl -M Shift -k v
+ $icon_zmi Zoom in ^ 1 ^ sxmo_type -M Ctrl -M Shift -k Prior
+ $icon_zmo Zoom out ^ 1 ^ sxmo_type -M Ctrl -M Shift -k Next
+ $icon_aru Scroll up ^ 1 ^ sxmo_type -M Ctrl -M Shift -k b
+ $icon_ard Scroll down ^ 1 ^ sxmo_type -M Ctrl -M Shift -k f
+ $icon_a2x Invert ^ 1 ^ sxmo_type -M Ctrl -M Shift -k x
+ $icon_kbd Hotkeys ^ 0 ^ sxmo_appmenu.sh sthotkeys
+ "
+ WINNAME=St
+ ;;
+ *foot*)
+ CHOICES="
+ $icon_cpy Copy ^ 0 ^ sxmo_type -M Shift -M Ctrl c
+ $icon_pst Paste ^ 0 ^ sxmo_type -M Shift -M Ctrl v
+ $icon_zmi Zoom in ^ 1 ^ sxmo_type -M Ctrl +
+ $icon_zmo Zoom out ^ 1 ^ sxmo_type -M Ctrl -k Minus
+ $icon_aru Scroll up ^ 1 ^ sxmo_type -M Shift -k Prior
+ $icon_ard Scroll down ^ 1 ^ sxmo_type -M Shift -k Next
+ $icon_lnk URL Mode ^ 0 ^ sxmo_type -M Shift -M Ctrl -k u
+ $icon_kbd Hotkeys ^ 0 ^ sxmo_appmenu.sh sthotkeys
+ $icon_fnd Search Field ^ 0 ^ sxmo_type -M Ctrl -M Shift -k r
+ $icon_aru Search Back ^ 0 ^ sxmo_type -M Ctrl -k r
+ $icon_ard Search Forward ^ 0 ^ sxmo_type -M Ctrl -k s
+ $icon_itm Search Extend ^ 0 ^ sxmo_type -M Ctrl -k w
+ "
+ WINNAME=Foot
+ ;;
+ *terminal*|org.gnome.vte.application)
+ CHOICES="$icon_kbd Hotkeys ^ 0 ^ sxmo_appmenu.sh sthotkeys"
+ WINNAME=Terminal
+ ;;
+ *alacritty*)
+ CHOICES="
+ $icon_cpy Copy ^ 0 ^ sxmo_type -M Shift -M Ctrl c
+ $icon_pst Paste ^ 0 ^ sxmo_type -M Shift -M Ctrl v
+ $icon_vim VI Mode ^ 0 ^ sxmo_type -M Ctrl -M Shift -k Space
+ $icon_fnd Search Forward ^ 0 ^ sxmo_type -M Ctrl -M Shift -k f
+ $icon_fnd Search Backward ^ 0 ^ sxmo_type -M Ctrl -M Shift -k b
+ $icon_aru Search Previous ^ 0 ^ sxmo_type -k Enter
+ $icon_ard Search Next ^ 0 ^ sxmo_type -M Shift -k Enter
+ $icon_kbd Hotkeys ^ 0 ^ sxmo_appmenu.sh sthotkeys
+ "
+ WINNAME=Alacritty
+ ;;
+ esac
+ esac
+ ;;
+ *okular*)
+ # Okular
+ CHOICES="
+ $icon_cfg Touch $(
+ sxmo_wm.sh inputevent touchscreen | grep -q on && \
+ printf %b "$icon_ton ^ 0 ^ sxmo_wm.sh inputevent touchscreen off" || \
+ printf %b "$icon_tof ^ 0 ^ sxmo_wm.sh inputevent touchscreen on"
+ )
+ $icon_cfg Fullscreen ^ 0 ^ sxmo_type -k Ctrl -k Shift -k F
+ $icon_cfg Menubar ^ 0 ^ sxmo_type -k Ctrl -k M
+ $icon_cfg Toolbars ^ 0 ^ sxmo_type -k F7
+ $icon_cfg SXMO Bar ^ 0 ^ sxmo_wm.sh togglebar
+ "
+ WINNAME=Xournal
+ ;;
+ *xournal*)
+ # Xournalpp
+ CHOICES="
+ $icon_cfg Touch $(
+ sxmo_wm.sh inputevent touchscreen | grep -q on && \
+ printf %b "$icon_ton ^ 0 ^ sxmo_wm.sh inputevent touchscreen off" || \
+ printf %b "$icon_tof ^ 0 ^ sxmo_wm.sh inputevent touchscreen on"
+ )
+ $icon_flt Open ^ 0 ^ sxmo_type -k Ctrl -k o
+ $icon_zmi Zoom ^ 1 ^ sxmo_type -k Ctrl -k plus
+ $icon_zmo Zoom ^ 1 ^ sxmo_type -k Ctrl -k minus
+ $icon_zmi Next Page ^ 1 ^ sxmo_type -k Next
+ $icon_zmo Prev Page ^ 1 ^ sxmo_type -k Prior
+ $icon_cfg Menubar ^ 0 ^ sxmo_type -k F10
+ $icon_cfg Toolbars ^ 0 ^ sxmo_type -k F9
+ $icon_cfg SXMO Bar ^ 0 ^ sxmo_wm.sh togglebar
+ "
+ WINNAME=Xournal
+ ;;
+ *zathura*)
+ # Zathura
+ CHOICES="
+ $icon_flt Open ^ 0 ^ sxmo_type -k o
+ $icon_zmi Zoom ^ 1 ^ sxmo_type -k plus
+ $icon_zmo Zoom ^ 1 ^ sxmo_type -k minus
+ $icon_arl History ^ 1 ^ sxmo_type -M Ctrl -k o
+ $icon_arr History ^ 1 ^ sxmo_type -M Ctrl -k i
+ $icon_cfg Invert ^ 0 ^ sxmo_type -M Ctrl -k r
+ $icon_flt Index ^ 0 ^ sxmo_type -k Tab
+ $icon_cfg Fit ^ 0 ^ sxmo_type -k a
+ $icon_cfg Width mode ^ 0 ^ sxmo_type -k s
+ "
+ WINNAME=Zathura
+ ;;
+ *netsurf*)
+ # Netsurf
+ CHOICES="
+ $icon_flt Pipe URL ^ 0 ^ sxmo_urlhandler.sh
+ $icon_zmi Zoom ^ 1 ^ sxmo_type -M Ctrl -k plus
+ $icon_zmo Zoom ^ 1 ^ sxmo_type -M Ctrl -k minus
+ $icon_arl History ^ 1 ^ sxmo_type -M Alt -k Left
+ $icon_arr History ^ 1 ^ sxmo_type -M Alt -k Right
+ "
+ WINNAME=Netsurf
+ ;;
+ *surf*)
+ # Surf
+ CHOICES="
+ $icon_glb Navigate ^ 0 ^ sxmo_type -M Ctrl g
+ $icon_lnk Link Menu ^ 0 ^ sxmo_type -M Ctrl d
+ $icon_flt Pipe URL ^ 0 ^ sxmo_urlhandler.sh
+ $icon_fnd Search Page ^ 0 ^ sxmo_type -M Ctrl f
+ $icon_fnd Find Next ^ 0 ^ sxmo_type -M Ctrl n
+ $icon_zmi Zoom ^ 1 ^ sxmo_type -M Shift -M Ctrl k
+ $icon_zmo Zoom ^ 1 ^ sxmo_type -M Shift -M Ctrl j
+ $icon_aru Scroll ^ 1 ^ sxmo_type -M Shift -k Space
+ $icon_ard Scroll ^ 1 ^ sxmo_type -k Space
+ $icon_itm JS Toggle ^ 1 ^ sxmo_type -M Shift -M Ctrl s
+ $icon_arl History ^ 1 ^ sxmo_type -M Ctrl h
+ $icon_arr History ^ 1 ^ sxmo_type -M Ctrl l
+ $icon_rld Refresh ^ 0 ^ sxmo_type -M Shift -M Ctrl r
+ "
+ WINNAME=Surf
+ ;;
+ *falkon*)
+ # Falkon
+ CHOICES="
+ $icon_flt Pipe URL ^ 0 ^ sxmo_urlhandler.sh
+ $icon_tab New Tab ^ 0 ^ sxmo_type -M Ctrl t
+ $icon_win New Window ^ 0 ^ sxmo_type -M Ctrl n
+ $icon_cls Close Tab ^ 0 ^ sxmo_type -M Ctrl w
+ $icon_zmi Zoom ^ 1 ^ sxmo_type -M Ctrl -k plus
+ $icon_zmo Zoom ^ 1 ^ sxmo_type -M Ctrl -k minus
+ $icon_arl History ^ 1 ^ sxmo_type -M Alt -k Left
+ $icon_arr History ^ 1 ^ sxmo_type -M Alt -k Right
+ $icon_win Home ^ 0 ^ sxmo_type -M Alt -k Home
+ $icon_zmo Full Screen ^ 0 ^ sxmo_type -k F11
+ $icon_rld Refresh ^ 0 ^ sxmo_type -M Shift -M Ctrl r
+ "
+ WINNAME=Falkon
+ ;;
+ *firefox*|*navigator*)
+ # Firefox
+ CHOICES="
+ $icon_flt Pipe URL ^ 0 ^ sxmo_urlhandler.sh
+ $icon_tab New Tab ^ 0 ^ sxmo_type -M Ctrl t
+ $icon_win New Window ^ 0 ^ sxmo_type -M Ctrl n
+ $icon_cls Close Tab ^ 0 ^ sxmo_type -M Ctrl w
+ $icon_zmi Zoom ^ 1 ^ sxmo_type -M Ctrl -k plus
+ $icon_zmo Zoom ^ 1 ^ sxmo_type -M Ctrl -k minus
+ $icon_arl History ^ 1 ^ sxmo_type -M Alt -k Left
+ $icon_arr History ^ 1 ^ sxmo_type -M Alt -k Right
+ $icon_win Home ^ 0 ^ sxmo_type -M Alt -k Home
+ $icon_zmo Full Screen ^ 0 ^ sxmo_type -k F11
+ $icon_rld Refresh ^ 0 ^ sxmo_type -M Shift -M Ctrl r
+ "
+ WINNAME=Firefox
+ ;;
+ *krita*)
+ # Krita
+ CHOICES="
+ $icon_fnd Open ^ 0 ^ sxmo_type -M Ctrl o
+ $icon_sav Save ^ 0 ^ sxmo_type -M Ctrl s
+ $icon_pst Paste ^ 0 ^ sxmo_type -M Ctrl v
+ $icon_del Delete ^ 0 ^ sxmo_type -k Delete
+ $icon_win Select ^ 0 ^ sxmo_type -M Ctrl r
+ $icon_modem_disabled Deselect ^ 0 ^ sxmo_type -M Ctrl -M Shift a
+ $icon_wn2 Crop ^ 0 ^ sxmo_type c
+ $icon_flt Fill ^ 0 ^ sxmo_type f
+ $icon_modem_connected Gradient ^ 0 ^ sxmo_type g
+ $icon_dof HSV Adjust ^ 0 ^ sxmo_type -M Ctrl u
+ $icon_cls Close Image ^ 0 ^ sxmo_type -M Ctrl w
+ "
+ WINNAME=Krita
+ ;;
+ *vimb*)
+ CHOICES="
+ $icon_glb Navigate ^ 0 ^ sxmo_type -k Escape o
+ $icon_zmi Zoom ^ 1 ^ sxmo_type -k Escape zi
+ $icon_zmo Zoom ^ 1 ^ sxmo_type -k Escape zo
+ $icon_arl History ^ 1 ^ sxmo_type -M Ctrl o
+ $icon_arr History ^ 1 ^ sxmo_type -M Ctrl i
+ $icon_rld Refresh ^ 0 ^ sxmo_type -k Escape r
+ "
+ WINNAME=Vimb
+ ;;
+ *geopard*)
+ # Geopard
+ CHOICES="
+ $icon_flt Pipe URL ^ 0 ^ sxmo_urlhandler.sh
+ $icon_pls New Tab ^ 0 ^ sxmo_type -M Ctrl t
+ $icon_cls Close Tab ^ 0 ^ sxmo_type -M Ctrl w
+ $icon_bok Open Bookmarks ^ 0 ^ sxmo_type -M Ctrl b
+ $icon_pls Add Bookmark ^ 0 ^ sxmo_type -M Ctrl d
+ $icon_edt Edit Bookmarks ^ 0 ^ sxmo_terminal.sh $EDITOR ~/.local/share/geopard/bookmarks.gemini
+ $icon_zmi Increase Font Size ^ 1 ^ sxmo_type -M Ctrl -k plus
+ $icon_zmo Decrease Font Size ^ 1 ^ sxmo_type -M Ctrl -k minus
+ $icon_arl History Back ^ 1 ^ sxmo_type -M Alt -k Left
+ $icon_arr History Forward ^ 1 ^ sxmo_type -M Alt -k Right
+ $icon_fnd URL Bar ^ 0 ^ sxmo_type -k F6
+ $icon_rld Refresh ^ 0 ^ sxmo_type -k F6 -k Return
+ "
+ WINNAME=Geopard
+ ;;
+ *lagrange*)
+ # Lagrange
+ CHOICES="
+ $icon_mnu Toggle sidebar ^ 0 ^ sxmo_type -M Shift -M Ctrl p
+ $icon_bok Open bookmarks ^ 0 ^ sxmo_type -M Ctrl l && sxmo_type 'about:bookmarks' -k Return
+ $icon_pls Add bookmark ^ 0 ^ sxmo_type -M Ctrl d
+ $icon_zmi Zoom ^ 1 ^ sxmo_type -M Ctrl -k equal
+ $icon_zmo Zoom ^ 1 ^ sxmo_type -M Ctrl -k minus
+ $icon_aru Parent dir ^ 1 ^ sxmo_type -M Alt -k Up
+ $icon_arl History ^ 1 ^ sxmo_type -M Alt -k Left
+ $icon_arr History ^ 1 ^ sxmo_type -M Alt -k Right
+ $icon_rld Refresh ^ 0 ^ sxmo_type -M Ctrl r
+ "
+ WINNAME=Lagrange
+ ;;
+ org.gnome.maps)
+ CHOICES="
+ $icon_gps Toggle Geoclue ^ 0 ^ superctl status geoclue-agent |grep started >/dev/null && superctl stop geoclue-agent || superctl start geoclue-agent
+ $icon_zmi Zoom in ^ 1 ^ sxmo_type -M ctrl =
+ $icon_zmo Zoom out ^ 1 ^ sxmo_type -M ctrl -k minus
+ $icon_fnd Explore POI ^ 0 ^ sxmo_type -M ctrl -M Shift F
+ $icon_fnd Search ^ 0 ^ sxmo_type -M ctrl f
+ $icon_lst Show last results ^ 0 ^ sxmo_type -M ctrl r
+ $icon_map Toggle route planner ^ 0 ^ sxmo_type -M ctrl d
+ $icon_gps Show current location ^ 0 ^ sxmo_type -M ctrl l
+ "
+ WINNAME=Maps
+ ;;
+ *mepo*)
+ # Mepo
+ # The choices / hotkeys for the contextmenu are generated through mepo's
+ # own scripting to be in congruence since the same menu can be launched
+ # via mepo's UI as well, this compatibility is available as of mepo 0.4
+ CHOICES="$(mepo_ui_central_menu.sh menuoptions | awk -F^ '{ print $1 "^ 0 ^ sxmo_type" $3 }')"
+ WINNAME=Mepo
+ ;;
+ *foxtrot*)
+ # Foxtrot GPS
+ CHOICES="
+ $icon_zmi Zoom ^ 1 ^ sxmo_type i
+ $icon_zmo Zoom ^ 1 ^ sxmo_type o
+ $icon_itm Panel Toggle ^ 1 ^ sxmo_type m
+ $icon_itm GPSD Toggle ^ 1 ^ sxmo_type a
+ "
+ WINNAME=Maps
+ ;;
+ *badwolf*)
+ # Badwolf Browser
+ CHOICES="
+ $icon_tab New Tab ^ 0 ^ sxmo_type -M Ctrl -k t
+ $icon_cls Close Tab ^ 0 ^ sxmo_type -M Alt -k d
+ $icon_fnd Reset Zoom ^ 0 ^ sxmo_type -M Ctrl -k 0
+ $icon_arr History ^ 1 ^ sxmo_type -M Ctrl ]
+ $icon_arl History ^ 1 ^ sxmo_type -M Ctrl [
+ $icon_arr Next Tab ^ 1 ^ sxmo_type -M Alt -k Right
+ $icon_arl Previous Tab ^ 1 ^ sxmo_type -M Alt -k Left
+ $icon_rld Refresh ^ 0 ^ sxmo_type -M Shift -M Ctrl -k r
+ $icon_fnd Search ^ 0 ^ sxmo_type -M Shift -M Ctrl -k f
+ $icon_arr Next (Search) ^ 0 ^ sxmo_type -M Shift -M Ctrl -k g
+ $icon_arl Previous (Search) ^ 0 ^ sxmo_type -M Shift -M Ctrl -M Shift -k g
+ $icon_flt URL Bar ^ 0 ^ sxmo_type -M Shift -M Ctrl l
+ $icon_fnd Open Web Inspector ^ 0 ^ sxmo_type -k F12
+ "
+ WINNAME=Badwolf
+ ;;
+ *acme*)
+ # Acme
+ CHOICES="
+ $icon_mse 2 (Right) [2s delay] ^ 0 ^ sleep 2 && xdotool click 3
+ $icon_mse 3 (Middle) [2s delay] ^ 0 ^ sleep 2 && xdotool click 2
+ $icon_itm Autocomplete ^ 0 ^ sxmo_type.sh -M Ctrl -k f
+ $icon_exp Select Last Typed Text ^ 0 ^ sxmo_type.sh -M Escape
+ $icon_del Delete To Start Of Line ^ 0 ^ sxmo_type.sh -M Ctrl -k U
+ $icon_arl Move To Start Of Line ^ 0 ^ sxmo_type.sh -M Ctrl -k A
+ $icon_arr Move To End Of Line ^ 0 ^ sxmo_type.sh -M Ctrl -k E
+ "
+ WINNAME=Acme
+ ;;
+ *mupdf*)
+ # Mupdf
+ CHOICES="
+ $icon_nxt Next Page ^ 0 ^ sxmo_type -k Space
+ $icon_prv Previous Page ^ 0 ^ sxmo_type -k b
+ $icon_chk Mark Page ^ 0 ^ sxmo_type -k m
+ $icon_ret Pop To Last Mark ^ 0 ^ sxmo_type -k t
+ $icon_zmi Zoom In ^ 1 ^ sxmo_type -k +
+ $icon_zmo Zoom Out ^ 1 ^ sxmo_type -k -
+ $icon_fnd Fit Width ^ 0 ^ sxmo_type -k W
+ $icon_fnd Fit Height ^ 0 ^ sxmo_type -k H
+ $icon_fnd Zoom To Fit ^ 0 ^ sxmo_type -k Z
+ $icon_fnd Reset Zoom ^ 0 ^ sxmo_type -k z
+ $icon_rol Rotate Counterclockwise ^ 0 ^ sxmo_type -k [
+ $icon_ror Rotate Clockwise ^ 0 ^ sxmo_type -k ]
+ $icon_fnd Search ^ 0 ^ sxmo_type -k /
+ "
+ WINNAME=Mupdf
+ ;;
+ *tabbed*)
+ # Tabbed
+ CHOICES="
+ $icon_tab New Tab ^ 0 ^ sxmo_type.sh -M Ctrl -M Shift -M Enter
+ $icon_arl Previous Tab ^ 1 ^ sxmo_type.sh -M Ctrl -M Shift -k h
+ $icon_arr Next Tab ^ 1 ^ sxmo_type.sh -M Ctrl -M Shift -k l
+ $icon_arl Move Tab Left ^ 1 ^ sxmo_type.sh -M Ctrl -M Shift -k j
+ $icon_arr Move Tab Right ^ 1 ^ sxmo_type.sh -M Ctrl -M Shift -k k
+ $icon_mnu Menu Prompt ^ 0 ^ sxmo_type.sh -M Ctrl -k U0060
+ $icon_cls Close Tab ^ 0 ^ sxmo_type.sh -M Ctrl -k q
+ "
+ WINNAME=Tabbed
+ ;;
+ *)
+ # Default system menu (no matches)
+ CHOICES="
+ $icon_grd Scripts ^ 0 ^ sxmo_appmenu.sh scripts
+ $icon_grd Apps ^ 0 ^ sxmo_appmenu.sh applications
+ $icon_grd Binaries ^ 0 ^ sxmo_brun.sh
+ $icon_dir Files ^ 0 ^ sxmo_files.sh
+ $icon_phn Dialer ^ 0 ^ sxmo_modemdial.sh
+ $icon_msg Texts ^ 0 ^ sxmo_modemtext.sh
+ $icon_usr Contacts ^ 0 ^ sxmo_contactmenu.sh
+ $(
+ rfkill list bluetooth -no ID,SOFT,HARD | grep -vq " blocked" &&
+ printf %b "$icon_bth Bluetooth ^ 1 ^ sxmo_bluetoothmenu.sh"
+ )
+ $(command -v megapixels >/dev/null && echo "$icon_cam Camera ^ 0 ^ GDK_SCALE=2 megapixels")
+ $(
+ if brightness="$(brightnessctl -d "white:flash" get)"; then
+ printf "%s Flashlight " "$icon_fll"
+ [ "$brightness" -gt 0 ] &&
+ printf %b "$icon_ton" || printf %b "$icon_tof";
+ printf %b "^ 1 ^ sxmo_flashtoggle.sh"
+ fi
+ )
+ $icon_net Networks ^ 0 ^ sxmo_networks.sh
+ $icon_mus Audio ^ 0 ^ sxmo_audio.sh
+ $icon_phn Modem ^ 0 ^ sxmo_appmenu.sh modem
+ $icon_win Windows ^ 0 ^ sxmo_wmmenu.sh
+ $icon_cfg Config ^ 0 ^ sxmo_appmenu.sh config
+ $icon_pwr Power ^ 0 ^ sxmo_appmenu.sh power
+ "
+ WINNAME=Sys
+ ;;
+esac
+
+if ! test "$c"; then
+#printf "%b\n" "$WINNAME"
+c="$(printf "%b\n" "$CHOICES" |grep sxmo_type|sed "s/sxmo_type[^ ]* \(\S\)$/'\1'/g"|
+sed "s/sxmo_type[^ ]* -k \(\S\+\)$/'\1'/g"|
+sed "s/sxmo_type[^ ]* -M Ctrl \(\S\)$/'<ctrl>\1'/ig"|
+sed "s/sxmo_type[^ ]* -M Ctrl -k \(\S\+\)$/'<ctrl>\1'/ig"|
+sed "s/sxmo_type[^ ]* -k Ctrl -k \(\S\+\)$/'<ctrl>\1'/ig"|
+sed "s/sxmo_type[^ ]* -M Ctrl \(\S\) -m Ctrl$/'<ctrl>\1'/ig"|
+sed "s/sxmo_type[^ ]* -M Ctrl -k \(\S\+\) -m Ctrl$/'<ctrl>\1'/ig"|
+sed "s/sxmo_type[^ ]* -M Shift \(\S\)$/'<shift>\1'/g"|
+sed "s/sxmo_type[^ ]* -M Shift -k \(\S\+\)$/'<shift>\1'/g"|
+sed "s/sxmo_type[^ ]* -M Shift -M Ctrl \(\S\)$/'<ctrl><shift>\1'/ig"|
+sed "s/sxmo_type[^ ]* -M Shift -M Ctrl -k \(\S\+\)$/'<ctrl><shift>\1'/ig"|
+sed "s/sxmo_type[^ ]* -M Ctrl -M Shift \(\S\)$/'<ctrl><shift>\1'/ig"|
+sed "s/sxmo_type[^ ]* -M Ctrl -M Shift -k \(\S\+\)$/'<ctrl><shift>\1'/ig"|
+sed "s/sxmo_type[^ ]* -k Ctrl -k Shift -k \(\S\+\)$/'<ctrl><shift>\1'/ig"|
+sed "s/sxmo_type[^ ]* -M Shift -M Ctrl -M Shift -k g/<ctrl><shift>g/g"|
+sed "s/sxmo_type[^ ]* -M Ctrl -M Shift -M \(Enter\)$/'<ctrl><shift>\1'/ig"|
+sed "s/sxmo_type[^ ]* -M Alt \(\S\)$/'<alt>\1'/g"|
+sed "s/sxmo_type[^ ]* -M Alt -k \(\S\+\)$/'<alt>\1'/g"|
+sed "s/sxmo_type[^ ]* -M Alt \(\S\) -m Alt$/'<alt>\1'/g"|
+sed "s/sxmo_type[^ ]* -M Alt -k \(\S\+\) -m Alt$/'<alt>\1'/g" |grep -v sxmo_type | grep -o "'[^']\+'$"|tr "\n" ,)"
+fi
+echo "$c"
+
+test "$c" &&
+gsettings set sm.puri.phosh.osk.Terminal shortcuts "[$c]"
+