LINUX.ORG.RU

Xfce4-terminal


3

2

Всего сообщений: 1

Делаем любой терминал (и не только) выпадающим в системах на базе X11

Делаем любой терминал (и не только) выпадающим в системах на базе 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 окон терминала и переключаться между ними.

 , ,

ann_lortemp2
()