Add dk scratchpads script
This commit is contained in:
parent
868fbb687b
commit
da2f609803
37
dk-scratch
Executable file
37
dk-scratch
Executable file
@ -0,0 +1,37 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# basic scratchpad functionality for dk
|
||||||
|
# spawns a set command with a known title if not already open
|
||||||
|
# if open toggle between the current workspace and the last
|
||||||
|
# written by Nathaniel Maia - 2021
|
||||||
|
|
||||||
|
# example rule for the below script to be placed in your dkrc
|
||||||
|
# dkcmd rule class="^scratchpad$" float=true
|
||||||
|
|
||||||
|
# Dinamically get both class and command of the needed scratchpad
|
||||||
|
title="$1"
|
||||||
|
shift
|
||||||
|
cmd="$@"
|
||||||
|
|
||||||
|
# window ID, we need to printf it as 8 hex digits to later match with dk status
|
||||||
|
win=$(printf '0x%08x' "$(xwininfo -root -children | awk '/'"$title"'/ {print $1}')")
|
||||||
|
stat=$(dkcmd status num=1 type=full)
|
||||||
|
|
||||||
|
if (( win != 0 )); then
|
||||||
|
# window is already open so toggle it
|
||||||
|
ws=$(awk '/^workspaces:/ { for (i = 1; i <= NF; i++) { if ($i ~ "*") print i - 1 } }' <<< "$stat")
|
||||||
|
wins=$(sed -n '/^windows:/,/^$/p' <<< "$stat")
|
||||||
|
win_ws=$(grep "^\s*${win}" <<< "$wins" | awk -F'" ' '{print $4}' | cut -d' ' -f1)
|
||||||
|
|
||||||
|
if (( win_ws == ws )); then
|
||||||
|
# hide it
|
||||||
|
# we could create a new workspace and place it there instead to not mess with the users existing workspaces
|
||||||
|
dkcmd ws send "$win" "$(awk '/numws/{print $2}' <<< "$stat")"
|
||||||
|
else
|
||||||
|
# show it
|
||||||
|
dkcmd ws send "$win" "$ws"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# the window is not yet spawned so do so
|
||||||
|
${cmd} &>/dev/null & disown
|
||||||
|
fi
|
Loading…
Reference in New Issue
Block a user