mirror of
https://github.com/LukeSmithxyz/voidrice.git
synced 2026-03-20 01:37:45 +01:00
Added lazy exec script
This commit is contained in:
parent
0caade59d1
commit
c77214234d
73
.scripts/i3cmds/lazy
Executable file
73
.scripts/i3cmds/lazy
Executable file
@ -0,0 +1,73 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# The lazy executer - Only starts an external X client once if the search criteria
|
||||||
|
# is correct.
|
||||||
|
|
||||||
|
# Usage:
|
||||||
|
#
|
||||||
|
# lazy {xdotool search args} -- {other command to execute with 'i3-msg exec'}
|
||||||
|
#
|
||||||
|
|
||||||
|
# Example (i3 window manager):
|
||||||
|
#
|
||||||
|
# bindkey $mod+Control+k exec --no-startup-id \
|
||||||
|
# lazy --name "Google Calendar" \
|
||||||
|
# -- gnome-www-browser --app=https://calendar.google.com
|
||||||
|
#
|
||||||
|
|
||||||
|
# We are going through all the arg wrangling due to needing to split the arguments
|
||||||
|
# between xdotool and i3-msg exec. The argument quoting here is hell, touch it at your
|
||||||
|
# own peril.
|
||||||
|
|
||||||
|
# The following commands are intercepted for xdotool. Refer to the man page under search
|
||||||
|
# options.
|
||||||
|
#
|
||||||
|
# --all
|
||||||
|
# --any
|
||||||
|
# --class {class}
|
||||||
|
# --classname {classname}
|
||||||
|
# --name {window title}
|
||||||
|
# --title {window title} [deprecated]
|
||||||
|
#
|
||||||
|
# All passed search criteria with arguments appear to be partial and regex enabled.
|
||||||
|
#
|
||||||
|
# Any other arguments before the '--' will be flagged as an error. Anything after will
|
||||||
|
# be passed to 'i3-msg exec'.
|
||||||
|
#
|
||||||
|
eval set -- $(getopt -l all,any,class:,classname:,name:,title: -n $0 -- "eatme" "$@")
|
||||||
|
|
||||||
|
declare -A SEARCH_ARGS
|
||||||
|
while true; do
|
||||||
|
case "$1" in
|
||||||
|
--) shift;
|
||||||
|
break;;
|
||||||
|
|
||||||
|
--all|--any)
|
||||||
|
eval SEARCH_ARGS[${1}]+='${1}';
|
||||||
|
shift;
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
--class|--classname|--name|--title)
|
||||||
|
eval SEARCH_ARGS[${1}]+='${2}'
|
||||||
|
shift 2;
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
*) echo "ERROR - Existing bad argment, ${1@Q}!";
|
||||||
|
exit -1;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# The eval is needed to handling argument quoting correctly
|
||||||
|
|
||||||
|
# xdotool searches for existing X clients using the passed search criteria. If _NOT_
|
||||||
|
# found, the 'i3-msg exec' is executed.
|
||||||
|
|
||||||
|
eval xdotool search \
|
||||||
|
${SEARCH_ARGS[--all]} \
|
||||||
|
${SEARCH_ARGS[--any]} \
|
||||||
|
${SEARCH_ARGS[--class]:+--class "\"${SEARCH_ARGS[--class]}\""} \
|
||||||
|
${SEARCH_ARGS[--classname]:+--classname "\"${SEARCH_ARGS[--classname]}\""} \
|
||||||
|
${SEARCH_ARGS[--name]:+--name "\"${SEARCH_ARGS[--name]}\""} \
|
||||||
|
${SEARCH_ARGS[--title]:+--title "\"${SEARCH_ARGS[--title]}\""} \
|
||||||
|
|| i3-msg exec -- $@
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user