Делаем любой терминал (и не только) выпадающим в системах на базе X11
Привет, ЛОР.
Многим знакома концепция выпадающего терминала, например yaquake или tilda.
Однако, простым скриптом можно сделать любой терминал (например, xfce4-terminal) выпадающим.
Ограничения именно на терминалы нету – можно запускать таким образом почти* любое приложение.
Работает только на Xorg.
Зависимости: x11-utils xdotool
Скрипт:
#!/bin/bash
# deps: x11-utils xdotool
# usage: raise.sh application-binary x-window-class
app=$1
[ -n "$2" ] && win=$2 || win=$app
# get window id
winids=( $(xwininfo -tree -root|grep "(\"$win"|grep -E " "|awk '{ print $1 }') )
echo "WIN IDS: ${winids[@]}"
# app does not running #
if ! pidof $app; then
$app &
exit
fi
for winid in ${winids[@]}; do
# app exists; get state
state=$(xwininfo -id $winid | grep Map\ State | awk '{ print $3 }')
active=$(printf '%x' `xdotool getwindowfocus`)
# is window on current desktop?
curdesktop=$(xdotool get_desktop)
windesktop=$(xdotool get_desktop_for_window $winid)
[ "x$curdesktop" != "x$windesktop" ] && continue
# is window active?
[ "0x$active" == "$winid" ] && active=yes || active=no
case $state/$active in
IsViewable/yes)
xdotool windowminimize $winid ;;
IsViewable/no)
xdotool windowraise $winid; xdotool windowactivate $winid ;;
IsUnMapped/no)
xdotool windowactivate $winid ;;
esac
done
Использование:
- Смотрим
X window classнужного нам приложения:
~ ➤ xwininfo -tree -root|grep xfce4-terminal
0x4a00001 "Xfce Terminal": ("xfce4-terminal" "Xfce4-terminal") 10x10+10+10 +10+10
0x4a00003 "Terminal - ann@silvermoon: ~": ("xfce4-terminal" "Xfce4-terminal")
- Нам нужно первое название после скобочки –
xfce4-terminal - Это совпадает с названием бинарника –
xfce4-terminal - Вешаем на хоткей:
raise.sh xfce4-terminal xfce4-terminal - В случае, если приложение не запущено – оно будет запущено.
- В случае, если приложение скрыто (свёрнуто) – оно будет развёрнуто.
- В случае, если приложение развернуто – оно будет свёрнуто.
Поведение практически идентично tilda.
Зачем? Просто. Захотелось выезжающий терминал в XFCE, сделал. А что?
Что это даёт? Всегда запущен один эмулятор терминала, который в любой момент можно вызвать/скрыть хоткеем, и не нужно открывать 100500 окон терминала и переключаться между ними.