From b1403f983e0d767694d5f86b07ddb68c8ead6ef2 Mon Sep 17 00:00:00 2001 From: Stacy Harper Date: Sun, 22 Aug 2021 12:49:50 +0200 Subject: [PATCH] Allow the inputhandler hook to override locked state inputs actions The user may want to change completly the buttons actions in normal and locked mode. This allow this ! Btw, we also provide default inputhandler actions (as example) to help the user to build their own. Signed-off-by: Stacy Harper Signed-off-by: Maarten van Gompel --- configs/default_hooks/inputhandler | 82 ++++++++++++++++++++++++++++++ scripts/core/sxmo_inputhandler.sh | 18 +++---- 2 files changed, 91 insertions(+), 9 deletions(-) create mode 100644 configs/default_hooks/inputhandler diff --git a/configs/default_hooks/inputhandler b/configs/default_hooks/inputhandler new file mode 100644 index 0000000..e893f3c --- /dev/null +++ b/configs/default_hooks/inputhandler @@ -0,0 +1,82 @@ +#!/bin/sh + +WMCLASS="$1" +WMNAME="$2" +ACTION="$3" + +key() { + xdotool windowactivate "$WIN" + xdotool key --delay 50 --clearmodifiers "$@" +} + +type() { + xdotool windowactivate "$WIN" + xdotool type --delay 50 --clearmodifiers "$@" +} + +typeenter() { + type "$@" + xdotool key Return +} + +# You must exit 0 if you handled the input to not trigger default behaviors + +if [ "$(sxmo_screenlock.sh getCurState)" != "unlock" ]; then + # Here you could override locked input handlers + exit 1 +fi + +# Here you can handle normal input handler + +exit 1 # Remove this in your user hook + +# Here is an example of possible custom actions +# We already exited but you may adapt it for you own use cases +# Please share your recipes to the community :D + +case "$WMCLASS" in + *"st-256color"*) + case "$WMNAME" in + *"weechat"*) + case "$ACTION" in + *"oneleft") + key Alt+a + exit 0 + ;; + *"oneright") + key Alt+Shift+comma + exit 0 + ;; + *"oneup") + key Page_Down + exit 0 + ;; + *"onedown") + key Page_Up + exit 0 + ;; + esac + ;; + esac + ;; + *"mpv"*) + case "$ACTION" in + "oneright") + key Left + exit 0 + ;; + "oneleft") + key Right + exit 0 + ;; + "upone") + key m + exit 0 + ;; + "onedown") + key p + exit 0 + ;; + esac + ;; +esac diff --git a/scripts/core/sxmo_inputhandler.sh b/scripts/core/sxmo_inputhandler.sh index 3b370c9..304568e 100755 --- a/scripts/core/sxmo_inputhandler.sh +++ b/scripts/core/sxmo_inputhandler.sh @@ -35,6 +35,15 @@ typeenter() { xdotool key Return } +XPROPOUT="$(xprop -id "$(xdotool getactivewindow)")" +WMCLASS="$(echo "$XPROPOUT" | grep WM_CLASS | cut -d ' ' -f3-)" +WMNAME=$(echo "$XPROPOUT" | grep -E "^WM_NAME" | cut -d ' ' -f3-) + +if [ -x "$XDG_CONFIG_HOME"/sxmo/hooks/inputhandler ]; then + #hook script must exit with a zero exit code ONLY if it has handled the gesture! + "$XDG_CONFIG_HOME"/sxmo/hooks/inputhandler "$WMCLASS" "$WMNAME" "$@" && exit +fi + if [ "$(sxmo_screenlock.sh getCurState)" != "unlock" ]; then case "$ACTION" in "volup_three") @@ -54,15 +63,6 @@ if [ "$(sxmo_screenlock.sh getCurState)" != "unlock" ]; then exit fi -XPROPOUT="$(xprop -id "$(xdotool getactivewindow)")" -WMCLASS="$(echo "$XPROPOUT" | grep WM_CLASS | cut -d ' ' -f3-)" -WMNAME=$(echo "$XPROPOUT" | grep -E "^WM_NAME" | cut -d ' ' -f3-) - -if [ -x "$XDG_CONFIG_HOME"/sxmo/hooks/inputhandler ]; then - #hook script must exit with a zero exit code ONLY if it has handled the gesture! - "$XDG_CONFIG_HOME"/sxmo/hooks/inputhandler "$WMCLASS" "$WMNAME" "$@" && exit -fi - #special context-sensitive handling case "$WMCLASS" in *"st-256color"*)