пʼятницю, 20 січня 2012 р.

Квейковий термінал на всі випадки життя

Нотатка про те, як згори екрану вигулькує чорне напівпрозоре вікно з білими літерками, в ньому ти можеш бути Master of the Universe (звісно, у міру володіння bash-fu чи іншими тантричними мистецтвами). Ага, як у Quake (і, напевно, багатьох інших цяцьках) — така штука, тиснеш тильду (~), і тобі вигулькує віконце, де можна написати /quit (ну чи щось інше, якщо є час і настрій).

Власне, сама тема особливої нотатки не потребує, бо подібного барахла купа: tilda, yakuake, yeahconsole тощо. Нотатка про те, як у те чорне віконце запхнути усі інші термінали, що грішним ділом запускаються по ходу роботи.

Проблема

Ну бо сидиш працюєш, твоє приховане термінальне віконце гріє своєю невидимою присутністю душу, місця у таскбарі (смужці запущених задач) не займає, при Alt+Tab не показується, — одним словом, веде себе чемно, на очі без потреби не вилазить. Аж тут раптом вкрай щось треба запустити у терміналі, і на тобі! — нове вікно, шмат таскбару захоплено, якийсь непотрібний неспокій на душі, все тобі муляє. І найгірше, що є звичка забирати термінальне вікно з очей зручною комбінацією клавіш. От тільки комбінація пов’язана не з усіма вікнами, а з твоїм чемненьким, і тому її натискання робить усе очікуване („зникни з очей, непрошена чорна гидото!“), а рівно навпаки (поряд з чорною гидотою з’являється чорне і слухняне „квейкове“ віконечко).

Єдиною програмою з розряду емуляторів терміналу, що вміє замість нового вікна відкривати закладки у вже запущеному (подібно до сучасних браузерів), виявився roxterm. Як зробити будь-який термінал «квейковим“, підгледів тут. Трішки роботи напилком, і маю елегантне рішення — усе, що запускається у терміналі, запускається у новій вкладці чемного схованого віконця.

Ось скромне намагання показати, як працює:

Рецепт

Частина перша — усі термінали запускаються у нових вкладках у одному вікні:

  1. Встановити roxterm
    apt-get install roxterm
  2. Зробити скриптик, який би запускав roxterm у новій закладці з усіма переданими йому параметрами. Текст такий:
    [sourcecode language="bash"]
    #!/bin/bash
    ARGS="$@"
    EXEC="/usr/bin/roxterm"
    $EXEC --tab $ARGS
    [/sourcecode]
  3. Зберегти скриптик під зручною назвою у зручному місці, дати право на виконання (якщо зручне місце десь поза домашньою текою, то треба su/sudo). У мене він /usr/local/bin/roxtab.
  4. Додати /usr/local/bin/roxtab у перелік альтернатив для x-terminal-emulator і вибрати його, як альтернативу:
    # update-alternatives --install /usr/bin/x-terminal-emulator x-terminal-emulator /usr/local/bin/roxtab 25
    (переостанній параметр — це повний шлях до того скрипта, який додаємо, останній — пріоритет)
    # update-alternatives --config x-terminal-emulator
    (і далі вибрати /usr/local/bin/roxtab зі списку)
  5. У своєму стільничному середовищі вказати, що у якості емулятора термінала має бути x-terminal-emulator (у різних DE робиться по-різному, проте зазвичай знаходиться серед налаштувань DE, у мене в xfce4-settings-manager)

Частина друга — зробити підготований у першій частині термінал „квейковим“.

Задля „квейкості“ можна використати вищевказане рішення, або трохи підправлене, як подано нижче:

  1. Встановити xdotool
    # apt-get install xdotool
  2. Створити скрипт з таким вмістом:
    [sourcecode language="bash"]
    #!/bin/sh
    PID=`pidof roxterm`
    if [ `pidof roxterm` ] ; then
    export TermWID=`xdotool search --all -pid $PID -name "@"`
    export ActiveWindow=`xdotool getwindowfocus`
    if [ "$ActiveWindow" = "$TermWID" ] ; then
    xdotool windowminimize $TermWID
    else
    xdotool windowactivate $TermWID
    fi
    else
    roxtab
    fi
    [/sourcecode]

    Зберегти його десь у $PATH. У мене він ~/bin/quaketerm.
    Власне, скрипт перевіряє, чи уже запущено термінал, і коли так, то чи є його вікно активним, а відтак або запускає, або активує чи ховає.

  3. Назначити клавіші для виклику скрипта. Це можна зробити або засобами стільничного середовища (у мене на XFCE xfce4-keyboard-settings, вкладка Application Shortcuts), або незалежно від середовища за допомогою xbindkeys.
  4. Забрати декорації вікна та кнопку/іконку на таскбарі. Для цього поставити devilspie (і за бажанням GUI до нього — gdevilspie)
    # apt-get install devilspie gdevilspie
    Створити файл ~/.devilspie/terminal.ds з таким вмістом:
    [sourcecode language="bash"]
    ( if
    ( begin
    ( is ( window_class ) "ROXTerm" )
    ( is ( application_name ) "ROXTerm" )
    )
    ( begin
    ( undecorate )
    ( focus )
    ( skip_pager )
    ( skip_tasklist )
    ( stick )
    ( geometry "1000x500+140+0" )
    ( println "match" )
    )
    )
    [/sourcecode]

    Запустити devilspie (або перезавантажитись/перелогінитись)

  5. (Необов’язково) налаштувати зовнішній вигляд терміналу на свій смак.

Немає коментарів:

Перекорьожити на нужний єзиг