Dotfiles/home/herbstluftwm/.config/herbstluftwm/scratchpad.sh

61 lines
1.6 KiB
Bash
Executable File

#!/usr/bin/env bash
# File: scratchpad.sh
# Description: Script to toggle or create scratchpad windows
# Author: RayZ0rr (https://github.com/RayZ0rr)
name="$1"
command="${@: 2}"
clientsArray=( $(herbstclient foreach C clients. echo C | awk 'BEGIN{ORS=" "} {print $1}') )
for client in "${clientsArray[@]}" ; do
id=$(echo $client | cut -d '.' -f 2)
instanceName="$(herbstclient get_attr ${client}.instance)"
# className=$(herbstclient get_attr "${client}.class")
# titleName="$(herbstclient get_attr ${client}.title)"
if [[ "${instanceName}" == "${name}" ]] ; then # If the scratchpad window exists
visible_wid="$(xdotool search --onlyvisible --classname "${name}" | tail -1 2> /dev/null)"
if [[ -z "$visible_wid" ]]; then # If the scratchpad window is not visible
echo "${name} found. Showing scratchpad."
herbstclient bring ${id} # Bring scratchpad to focus
exit $?
else # If the scratchpad window is visible
echo "Hiding instance of ${name}."
herbstclient set_attr "${client}.minimized" true # Hide scratchpad
exit 0
fi
fi
done
if [[ $# -ne 2 ]]; then # If a command to launch it was not provided
echo "${name} not found. A command was not provided to launch it."
exit 1
fi
echo "${name} not found. Executing: '${command}'."
$command
# if ! eval "${@: 2}" ; then
if ! [ $? -eq 0 ]; then
echo "Provided command '${command}' failed"
exit 1
fi
# Wait for application to be available
while [[ -z "$wid" ]]; do
sleep 0.05;
wid="$(xdotool search --classname "${name}" | tail -1 2> /dev/null)"
done
exit 0