How-to`s — xbindkeys а-ля vim
Многие знают об особенностях работы с клавиатурой в редакторе vim. И многим они нравятся. Мне также нравятся эти особенности, и после знакомства с дополнением vimperator для firefox iceweasel захотелось сделать нечто подобное для всей системы в целом. А точнее — запускать программы по нажатию на клавиатуре какой-то предопределенной буквы.
Для того чтобы это реализовать нужно было создать какой-нибудь дополнительный режим работы клавиатуры, при котором запуск программ не мешал бы обычному вводу текста. Что-нибудь, похожее на XCompose key.
Давным-давно у меня был xbindkeys, настроенный на работу с мультимедийными клавишами клавиатуры. Его-то я и решил поковырять в первую очередь, и... все получилось! Поковыряв примеры scm файлов настройки (до этого у меня был стандартный формат), я накидал такой скриптик:
Таким образом, при запуске xbindkeys цепляет клавишу XF86AudioMute, при нажатии на которую он цепляет заданные в функции add-keys клавиши поверх их первоначальных действий. После нажатия на одну из этих клавиш или клавишу Escape он их всех "отпускает" выполнять свои обычные действия, т.е. ввод символов.
Подробнее хотелось бы рассказать о клавишах g, f, m. Вдохновившись этой статьей на хабре, я написал вот такие скрипты:
Для g:
Для f:
Для m скрипт приведен в конфигурационном файле.
Для остальных браузеров/сервисов скрипты аналогичны, только с указанием других команд/url'ов.
Теперь я могу в любое время выделить имя функции (например, printf) в любом редакторе, нажать последовательно две клавиши и посмотреть документацию по ней или найти в гугле ошибку из лога какой-нибудь программы.
Может быть, кому-то, кто не любит сажать свои пальцы на шпагат нажатием комбинаций клавиш (зачастую, уже занятых чем-нибудь), такой подход к хоткеям покажется полезным.
Для того чтобы это реализовать нужно было создать какой-нибудь дополнительный режим работы клавиатуры, при котором запуск программ не мешал бы обычному вводу текста. Что-нибудь, похожее на XCompose key.
Давным-давно у меня был xbindkeys, настроенный на работу с мультимедийными клавишами клавиатуры. Его-то я и решил поковырять в первую очередь, и... все получилось! Поковыряв примеры scm файлов настройки (до этого у меня был стандартный формат), я накидал такой скриптик:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
;; Удаление "вторых" клавиш (define (remove-keys) (remove-xbindkey '("g")) (remove-xbindkey '("w")) (remove-xbindkey '("f")) (remove-xbindkey '("o")) (remove-xbindkey '("a")) (remove-xbindkey '("t")) (remove-xbindkey '("m")) (remove-xbindkey '("l")) (remove-xbindkey '("h")) (remove-xbindkey '("Escape")) (grab-all-keys) ) ;; Добавление одной "второй" клавиши (define (add-key key command) (xbindkey-function key (lambda () (run-command command) (remove-keys)))) ;; Список "вторых" клавиш для добавления (define (add-keys) (add-key "g" "google_search&") (add-key "w" "wikipedia_search&") (add-key "f" "firefox_url&") (add-key "o" "opera_url&") (add-key "a" "arora_url&") (add-key "t" "google_translate&") (add-key "m" "xclip -o | sed -n 1p | xargs xterm -e man") (add-key "l" "arora http://linux.org.ru/") (add-key "h" "arora http://habrahabr.ru/") (xbindkey-function '("Escape") (lambda () (remove-keys))) ) ;; цепляем "первую" клавишу (xbindkey-function '("XF86AudioMute") (lambda () (add-keys) (grab-all-keys))) |
Таким образом, при запуске xbindkeys цепляет клавишу XF86AudioMute, при нажатии на которую он цепляет заданные в функции add-keys клавиши поверх их первоначальных действий. После нажатия на одну из этих клавиш или клавишу Escape он их всех "отпускает" выполнять свои обычные действия, т.е. ввод символов.
Подробнее хотелось бы рассказать о клавишах g, f, m. Вдохновившись этой статьей на хабре, я написал вот такие скрипты:
Для g:
xclip -o | sed -r '2~1d;s/(^\s+|\s+$)//g;s/%/%25/g;s/#/%23/g;s/\$/%24/g;s/&/%26/g;s/\+/%2B/;s/,/%2C/g;s/:/%3A/g;s/;/%3B/g;s/=/%3D/g;s/\?/%3F/g;s/@/%40/g;s/\s/+/g' | awk '{print "http://www.google.ru/search?hl=ru&q=" $1}' | xargs arora
Для f:
xclip -o | sed -n 1p | xargs firefox -new-tab
Для m скрипт приведен в конфигурационном файле.
Для остальных браузеров/сервисов скрипты аналогичны, только с указанием других команд/url'ов.
Теперь я могу в любое время выделить имя функции (например, printf) в любом редакторе, нажать последовательно две клавиши и посмотреть документацию по ней или найти в гугле ошибку из лога какой-нибудь программы.
Может быть, кому-то, кто не любит сажать свои пальцы на шпагат нажатием комбинаций клавиш (зачастую, уже занятых чем-нибудь), такой подход к хоткеям покажется полезным.