LE Blog

Инженер с поэтической душой

01.12.2009 firtree_right Делаем quake-like консоль в любом DE на базе XServer (KDE, GNOME, XFCE, ...)

Недавно написал гайд по производству самопальной quake-like консоли под Openbox. А перед этим вышла новая версия Kubuntu 9.10, в которой моя любимая quake-like консоль yakuake стала притормаживать при открытии. Несильно, но заметно, чтобы надоесть к концу дня. А вновь испробованная quake-like консоль tilda очень некрасиво скроллит текст. Возможно, обе эти проблемы связаны со слабенькой видеокартой на работе, но не менять же её из-за консоли?

Почесав репу, я написал свой способ организовать вывод консоли по F12, который подходит для любого Desktop Environment, работающего на «иксах», а значит почти любого.

  1. Устанавливаем три пакета: xdotool, xbindkeys, xbindkeys-config. На убунте это так:
sudo apt-get install xdotool xbindkeys xbindkeys-config
  1. Выбираем свою консоль, которой мы хотим управлять по горячей клавише. И настраиваем для неё уникальное слово, которое будет выводиться в заголовке окна. Я выбрал konsole. И настроил так, чтобы в заголовке окна всегда было «qk : ». Этот пункт будет разным для всех :)

  2. Сердце гайда — скрипт, использующий xdotool для управления нашим окном. Я как фанат руби, все скрипты на нём и пишу. Вот это лежит у меня в $HOME/.quake-console/quake-console:

#!/usr/bin/ruby

PROG_NAME = "konsole"
WIN_NAME = "qk : "

win_id = `xdotool search "#{WIN_NAME}" 2> /dev/null`.split("\n").select{ |l| l =~ /^\d+$/ }.first

if win_id.nil?
system "#{PROG_NAME} &"
else
if `xdotool search --onlyvisible "#{WIN_NAME}"`.include? win_id
if `xdotool getactivewindow`.chomp.strip == win_id
system "xdotool windowunmap #{win_id}"
else
system "xdotool windowraise #{win_id} && xdotool windowfocus #{win_id} && xdotool windowmove #{win_id} 0 0"
end
else
system "xdotool windowmap #{win_id} && xdotool windowfocus #{win_id} && xdotool windowmove #{win_id} 0 0"
end
end

Как видно, если окна с «qk : » в заголовке нет, то запускается моя выбранная консоль. Если оно есть, но не сверху и не в фокусе, то выводим его на верх и в фокус, если оно в фокусе, то прячем, а если спрятано, то показываем и выводим в фокус.

  1. Теперь запускаем xbindkeys, который как раз нужен для привязки горячих клавиш, и конфигурируем его:
xbindkeys --defaults > $HOME/.xbindkeysrc
xbindkeys
xbindkeys-conifg

Используя интуитивно-понятный графический интерфейс, настраиваем нужную нам клавишу F12 на запуск нашего скрипта, который мы предварительно сделали запускаемым.

  1. Наслаждение