import mcorners
This commit is contained in:
parent
a7d3e0a739
commit
21437bbd60
106
bin/mcorners
Executable file
106
bin/mcorners
Executable file
@ -0,0 +1,106 @@
|
||||
#!/usr/bin/env bash
|
||||
#:Usage: mcorners [-tl cmd] [-t cmd] [-tr cmd] [-l cmd] [-r cmd] [-bl cmd] [-b cmd] [-br cmd] [-iof] [-v]
|
||||
#:
|
||||
#: cmd: run the command when mouse reach to the edge of screen:
|
||||
#:
|
||||
#: -tl cmd top-left
|
||||
#: -t cmd top
|
||||
#: -tr cmd top-right
|
||||
#: -l cmd left
|
||||
#: -r cmd right
|
||||
#: -bl cmd bottom-left
|
||||
#: -b cmd bottom
|
||||
#: -br cmd bottom-right
|
||||
#: -iof, --ignore-on-fullscreen disable command when active window
|
||||
#: is fullscreen.
|
||||
#: --stop force stop mcorners if it's running
|
||||
#: -v verbose output
|
||||
#: -h show the help
|
||||
#:
|
||||
# same as py version before, but faster
|
||||
|
||||
eval $(xdotool getdisplaygeometry --shell)
|
||||
G=2;MR=8 W=$((WIDTH-G)); H=$((HEIGHT-G)); DB=/tmp/mcorners.lck;
|
||||
|
||||
#my
|
||||
E=200;
|
||||
X1=$((WIDTH/2-E/2));X2=$((X1+E));Y1=$((HEIGHT/2-E/2));Y2=$((Y1+E));
|
||||
#my
|
||||
|
||||
usage() {
|
||||
grep "^#:" $0 | while read DOC; do printf '%s\n' "${DOC###:}"; done
|
||||
exit
|
||||
}
|
||||
|
||||
options() {
|
||||
while [[ "$1" ]]; do
|
||||
case "$1" in
|
||||
"-tl") tl="$2" ;;
|
||||
"-t") t="$2" ;;
|
||||
"-tr") tr="$2" ;;
|
||||
"-l") l="$2" ;;
|
||||
"-r") r="$2" ;;
|
||||
"-bl") bl="$2" ;;
|
||||
"-b") b="$2" ;;
|
||||
"-br") br="$2" ;;
|
||||
"-iof"|"--ignore-on-fullscreen") iof=1 ;;
|
||||
"--stop") kill -9 $(cat $DB) && exit ;;
|
||||
"-v") verbose=1 ;;
|
||||
""|"-h"|"--help") usage ;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
}
|
||||
|
||||
delay() {
|
||||
local IFS
|
||||
[[ -n "${_de:-}" ]] || exec {_de}<> <(:)
|
||||
read ${1:+-t "$1"} -u $_de || :
|
||||
}
|
||||
|
||||
invoke() {
|
||||
pkill -f jgmenu
|
||||
proc=$(IFS=" "; set -- $1; echo $1)
|
||||
id="$(pidof -x "$proc")"
|
||||
if [[ -n "$verbose" ]]; then
|
||||
[[ -z "$id" ]] && (eval "$1" &) || (kill -9 $id &)
|
||||
else
|
||||
[[ -z "$id" ]] && (eval "$1" 2&>/dev/null &) || (kill -9 $id 2&>/dev/null &)
|
||||
fi
|
||||
xdotool mousemove $2 $3
|
||||
delay 1.2
|
||||
}
|
||||
|
||||
quithandler() {
|
||||
rm -f $DB
|
||||
exit $?
|
||||
}
|
||||
|
||||
trap quithandler SIGINT SIGTERM EXIT
|
||||
|
||||
[[ -f "$DB" && -z "$(cat $DB | xargs ps -p)" ]] && rm -rf $DB
|
||||
[[ -z "$@" ]] && usage || options "$@"
|
||||
|
||||
if [[ ! -f "$DB" ]]; then
|
||||
while :;do
|
||||
[[ ! -f "$DB" ]] && printf "%s\n" $$ >$DB
|
||||
eval $(xdotool getmouselocation --shell)
|
||||
if [[ -n "$iof" && -n "$(xdotool getactivewindow 2>/dev/null | xargs xprop -id 2>/dev/null | grep E_FULLS)" ]]; then
|
||||
delay 0.8
|
||||
else
|
||||
[[ -n "$tl" && "$X" -lt "$G" && "$Y" -lt "$G" ]] && invoke "$tl" $((X+MR)) $((Y+MR))
|
||||
[[ -n "$t" && "$X" -gt "$X1" && "$X" -lt "$X2" && "$Y" -lt "$G" ]] && invoke "$t" $((X-0)) $((Y+MR))
|
||||
[[ -n "$tr" && "$X" -gt "$W" && "$X" -le "$WIDTH" && "$Y" -lt "$G" ]] && invoke "$tr" $((X-MR)) $((Y+MR))
|
||||
[[ -n "$l" && "$X" -lt "$G" && "$Y" -gt "$Y1" && "$Y" -lt "$Y2" ]] && invoke "$l" $((X+MR)) $((Y+0))
|
||||
[[ -n "$r" && "$X" -gt "$W" && "$X" -le "$WIDTH" && "$Y" -gt "$Y1" && "$Y" -lt "$Y2" ]] && invoke "$r" $((X-MR)) $((Y+0))
|
||||
[[ -n "$bl" && "$X" -lt "$G" && "$Y" -gt "$H" ]] && invoke "$bl" $((X+MR)) $((Y-MR))
|
||||
[[ -n "$b" && "$X" -gt "$X1" && "$X" -lt "$X2" && "$Y" -gt "$H" ]] && invoke "$b" $((X+0)) $((Y-MR))
|
||||
[[ -n "$br" && "$X" -gt "$W" && "$X" -le "$WIDTH" && "$Y" -gt "$H" ]] && invoke "$br" $((X-MR)) $((Y-MR))
|
||||
fi
|
||||
delay 0.2
|
||||
done
|
||||
exit 0
|
||||
else
|
||||
printf "Lock Exists: Mcorners is running at PID $(cat $DB). run \"mcorners --stop\" to close it.\n"
|
||||
exit 1
|
||||
fi
|
Loading…
Reference in New Issue
Block a user