mirror of
https://github.com/dcarrillo/dotfiles.git
synced 2024-11-14 21:41:13 +00:00
110 lines
2.2 KiB
Bash
Executable File
110 lines
2.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
STATUS_FILE=/dev/shm/polybar_task_manager
|
|
REFRESH=2
|
|
MAX_TASKS=10
|
|
|
|
get_icon_by_name()
|
|
{
|
|
name=$(echo "$1" | tr '[:upper:]' '[:lower:]')
|
|
declare -A ICON_MAP=(
|
|
[tilix]=
|
|
[code]=
|
|
[firefox]=
|
|
[chromium]=
|
|
[nautilus]=
|
|
[gnome-calculator]=
|
|
[gnome-calendar]=
|
|
[eog]=
|
|
[keepassxc]=
|
|
)
|
|
|
|
if [ ${ICON_MAP[$name]+_} ]; then
|
|
echo "${ICON_MAP[$name]}"
|
|
fi
|
|
}
|
|
|
|
show_tasks()
|
|
{
|
|
wmctrl -lx | awk '{if ($2 > -1) print $3,$1}' \
|
|
| awk -F'.' '{ print $NF }' \
|
|
| tail -$MAX_TASKS | sort > $STATUS_FILE.current
|
|
|
|
diff -q $STATUS_FILE $STATUS_FILE.current > /dev/null 2>&1
|
|
if [ $? -ne 1 ]; then
|
|
rm -rf $STATUS_FILE.current
|
|
return 0
|
|
fi
|
|
|
|
mv $STATUS_FILE.current $STATUS_FILE
|
|
|
|
counter=1
|
|
num_windows=$(wc -l $STATUS_FILE | cut -f 1 -d " ")
|
|
while [ $counter -le "$MAX_TASKS" ]; do
|
|
if [ $counter -le "$num_windows" ]; then
|
|
polybar-msg hook taskbar$counter 2 > /dev/null
|
|
else
|
|
polybar-msg hook taskbar"$counter" 1 > /dev/null
|
|
fi
|
|
|
|
sleep 0.1
|
|
counter=$((counter+1))
|
|
done
|
|
}
|
|
|
|
print_task_name()
|
|
{
|
|
name=$(sed "${1}q;d" $STATUS_FILE | cut -f 1 -d " " | tr '[:upper:]' '[:lower:]')
|
|
icon=$(get_icon_by_name "$name")
|
|
|
|
if [ -n "$icon" ]; then
|
|
name="$name "
|
|
fi
|
|
|
|
printf "%s%s" "${name^}" "$icon"
|
|
}
|
|
|
|
get_active_window()
|
|
{
|
|
echo 0x0"$(xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW | cut -f 2 | cut -f 2 -d 'x')"
|
|
}
|
|
|
|
get_task_id()
|
|
{
|
|
sed "${1}q;d" $STATUS_FILE | cut -f 2 -d " "
|
|
}
|
|
|
|
daemon()
|
|
{
|
|
while true; do
|
|
show_tasks
|
|
sleep $REFRESH
|
|
done
|
|
}
|
|
|
|
case "$1" in
|
|
--daemon)
|
|
> /dev/shm/polybar_task_manager
|
|
daemon
|
|
;;
|
|
--set-task)
|
|
print_task_name "$2"
|
|
;;
|
|
--show-window)
|
|
id=$(get_task_id "$2")
|
|
|
|
if [ "$id" = "$(get_active_window)" ]; then
|
|
xdotool getactivewindow windowminimize
|
|
else
|
|
wmctrl -ia "$id"
|
|
fi
|
|
print_task_name "$2"
|
|
;;
|
|
--close-window)
|
|
id=$(get_task_id "$2")
|
|
wmctrl -ic "$id"
|
|
;;
|
|
esac
|
|
|
|
exit 0
|