Описанная в предыдущей статье реализация Vim-like управления имеет пару существенных недостатков: подходит только к GTK-окружению и для перемещения курсора по редактируемым элементам требуется клавиша модификатор. Получается, в общем-то, не совсем и Vim-like, как было верно подмечено в комментариях. Поэтому, было принято решение описать свой опыт построения вимообразной клавиатурной среды с использованием xmodmap и командной оболочки.
Первое, что стоит сделать — это создать каталог для ресурсных файлов xmodmap’a, например ~/.keytoggle.
Второе — снять текущую раскладку клавиатуры:
$xmodmap -pke >~/.keytoggle/input-keymap.rc
Далее создаем файл
!{{{ override latin keycode 24 = q Q keycode 25 = w W keycode 26 = e E keycode 27 = r R keycode 28 = t T keycode 29 = y Y keycode 30 = u U keycode 31 = i I keycode 32 = o O keycode 33 = p P keycode 34 = bracketleft keycode 35 = bracketright keycode 38 = a A keycode 39 = s S keycode 40 = d D keycode 41 = f F keycode 42 = g G keycode 43 = h H keycode 44 = j J keycode 45 = k K keycode 46 = l L keycode 47 = semicolon colon keycode 48 = apostrophe quotedbl keycode 49 = Escape Escape Escape Escape !keycode 49 = grave asciitilde keycode 52 = z Z keycode 53 = x X keycode 54 = c C keycode 55 = v V keycode 56 = b B keycode 57 = n N keycode 58 = m M keycode 59 = comma less keycode 60 = period greater !}}} !{{{ override numbers ! keycode 10 = 1 exclam 1 1 exclam ! keycode 11 = 2 at 2 2 quotedbl ! keycode 12 = 3 numbersign 3 3 numerosign ! keycode 13 = 4 dollar 4 4 semicolon ! keycode 14 = 5 percent 5 5 percent ! keycode 15 = 6 asciicircum 6 6 colon ! keycode 16 = 7 ampersand 7 7 question ! keycode 17 = 8 asterisk 8 8 asterisk ! keycode 18 = 9 parenleft 9 9 parenleft ! keycode 19 = 0 parenright 0 0 parenright !}}} !{{{ bindings !esc keycode 9 = grave asciitilde !h keycode 43 = Left Left !j keycode 44 = Down Down !k keycode 45 = Up Up !l keycode 46 = Right Right !p keycode 33 = Prior Prior !n keycode 57 = Next Next !d !keycode 40 = Delete Delete ![ keycode 34 = Home Home !] keycode 35 = End End !m keycode 58 = F7 !}}}
Все биндинги описаны в комментариях, замечу лишь, что в моем случае используются ремапы Ctrl-CapsLock, Esc-~ и еще несколько персональных переназначений.
Собственно, переключение режимов ввод-редактирование осуществляется попросту выполнением xmodmap с нужным нам ресурсом. Можно повесить на пару хоткеев, а можно написать скрипт вроде этого:
#!/bin/bash DIR="$HOME/.keytoggle" function toggle(){ if [ -e $DIR/lock ] then xmodmap $DIR/input-keymap.rc rm $DIR/lock else xmodmap $DIR/control-keymap.rc touch $DIR/lock fi } function show(){ if [ -e $DIR/lock ] then echo -- else echo -- INSERT -- fi } case $1 in t) toggle;; *) show;; esac
Вызов «kt t» меняет режим, без аргументов — отдает на стандартный вывод состояние, которое можно выводить в статусной строке оконного менеджера, через osd_cat или любой другой нотификатор по вкусу. Например вот так:
mod_statusbar.create{ screen=0, pos='bl', fullsize=true, systray=true, template="%date".. "[ %>workspace_name ]".. "[ %exec_xkb ]".. "[ M: %exec_mounted ]".. "%filler".. "%>exec_lt" } mod_statusbar.launch_statusd{ load={ update_interval=10*1000, }, date={ date_format='[ %H:%M ]', }, exec = { lt={ program = "mps s", retry_delay = 3 * 1000, }, xkb={ program = "kt", retry_delay = 1 * 1000, }, mounted={ program ="fmounted", retry_delay=2 * 1000, }, } }
И финальный аккорд — повесить переключение режимов на хоткей. Например, у меня переключение было назначено на <Super_R>:
$grep 'kt t' ~/.ion3/main/cfg_ion.lua kpress("Super_R", "ioncore.exec_on(_, 'kt t')"),
Такая реализация не зависит от используемого тулкита, а еще очень порадует любителей Vim, которым приходится много работать с Windows по rdp, я думаю.
Почему я от всего этого отказался? Практически все программное обеспечение, что нужно мне каждый день, имеет управление в стиле Vim «из коробки». В результате, потребность в дополнительном режиме клавиатуры попросту отпала. На смену ему пришли описанные в предыдущей статье сочетания mod1+[hjklqw] в некоторых полях ввода (webkit, командная строка dwb). К слову, такие горячие клавиши я использую и при редактировании в Vim’е — порой это быстрее, чем менять режимы.
ссылка на оригинал статьи http://habrahabr.ru/post/266745/
Добавить комментарий