Нецикличное переключение клавиатурной раскладки
15.08.2010 изучение Линукса
Продолжаю устранять всякие глупые привычки. Теперь у меня английская раскладка включается клавишей Caps Lock, а русская правым Ctrl, причём в обоих раскладках при нажатии и удерживании правого Alt можно вводить символы из другой раскладки. Например названия клавиш выше были набраны именно таким способом.
Зачем это нужно? В замечательной книге «Интерфейс» Джеф Раскин очень хорошо писал про локус внимания и вот проблема с раскладками именно из этой оперы. Приходится постоянно держать в уме, какая раскладка в данный момент включена и, пожалуй, каждый из нас регулярно ошибался (некоторые SEOшники даже делали сайтики под такие ошибки, собирая немало трафика).
Если же переключение будет нецикличным, вырабатывается простая моторная привычка всегда включать нужную раскладку не запоминая какая была до того. Пока что меня ломает, но я знаю, что это хороший правильный путь, также как использование редактора Vim (с ним тоже первое время были ужасные ломки, а потом сплошной кайф).
Нециклическое переключение в Linux
Я поступил очень просто, маленько отредактировал файл /usr/share/X11/xkb/symbols/group, а именно просто заменил <LCTL> на <CAPS> в группе lctrl_rctrl_switch. Именно исправил, добавление своей группы по аналогии не работало, разбираться в причине лень. Так что у меня название группы лишь на 50% соответствует её сути :)
Ну и в .xinitrc прописал такую строчку:
setxkbmap -model evdev -layout 'us,ru' -option -option 'grp:lctrl_rctrl_switch,grp:switch'
Первый -option нужен для сброса умолчальных настроек, если я ничего не напутал. Второй grp (switch) включает временное инвертирование раскладки по правому Alt. Вот и всё.
Всё по раскладке, а вообще хочу ещё Vim и Vimperator настроить на автоматический переход в английскую раскладку при переходе в нормальный режим.
P.S. Кстати, про глупые привычки. Я уже давно не пользуюсь дебильным способом загрузки файлов через панель управления хостингом, теперь просто монтирую серверные каталоги в локальную файловую систему. Очень удобно. А ещё я перешёл на клавиатурный фреймовый оконный менеджер DWM (прочтите хорошую статью про DWM по-русски), тоже пока ломает немного но с каждым днём всё лучше, уже начал не только понимать всю мощь такого решения, но и чувствовать её. В общем, помаленьку всё же разгоняюсь.
P.P.S. Мышку снова пришлось повесить временно, а то уж слишком я её люблю, мешает вырабатывать новые привычки. Кстати, кто знает, как быстро включать/отключать показ мышиного курсора в иксах?
Нашёл утилитку для скрытия курсора — Unclutter. Пока полёт нормальный, отлично работает. Правда, параметр idle как-то странно секунды считает, ну и пофиг.
Комментарии
Комментирование этой статьи закрыто.
Это ж сколько надо за день раз ошибаться с раскладкой, чтобы поступить таким глобальным образом? Или это только идеи ради? )
Прочитав пост, решил себя замутить также, но быстро передумал, т.к. проблем с текущим Shift+Alt не особо и испытываю, изредка, конечно, ошибаюсь с раскладкой, но если сравнивать временные затраты, то исправление тех же очепяток занимает гораздо больше времени.
Я часто ошибался, даже очень часто. Так что не ради идеи. А про временные затраты ты как-то странно написал — да, исправление опечаток действительно занимает больше времени, чем их создание, это очевидно :) Именно поэтому стоит свести их к минимуму в том числе и с помощью более эффективных привычек.
Понятно, я просто ошибкам, связанным с неправильной раскладкой, редко придаю значение, наверно уже привык не обращать внимание на это (хотя печатая данный комментарий уже успел один раз ошибиться)).
Имелось ввиду про очепятки не связанные с раскладкой (у меня их много, порядка 2-4% от набираемого текста, если не ошибаюсь), на этом фоне временные затраты из-за неправильной раскладки ничтожно малы, чтобы на них обращать внимание.
Чьерт, печатая вторую часть комментария, снова ошибся с раскладкой. Надо наверно таки поставить на Alt временное инвертирование. Мда, ошибся уже в третий раз…
Вот-вот. Многие просто привыкли к этому и не замечают уже, на автомате удаляя jgtxfnre и заменяя её правильным текстом. Я тоже почти постоянно это делал (и пока ещё делаю), мизинец вообще постоянно к BackSpace летает.
Punto, выбрать текст, нажать альт. Вот и вся работа над ошибками.
Проблемы с тем, об чём ты пишешь, две: – свободных клавиш на клаве не так много. У меня — только капс, правые фун. клавиши я тоже юзаю. – это слишком нестандартное решение, как только случайно попадёшь на другой комп — это будет полный пэ. Хотя я, к примеру, не собираюсь попадать.
За чужим компом лично я крайне редко бываю, так что глупо оставаться со старыми привычками только для этакой сомнительной совместимости. Punto раньше пользовался, но пришёл к выводу, что такие программы нафиг не нужны.
Эт почему? Он не переключает ничего, только по клавише последний введённый текст или выделенный текст переключает.
Я знаю. Но Punto как бы поощряет ошибки, с ним разучиться очепятываться очень сложно — привыкаешь уже просто постоянно Break (или что там) жать.
Как сделать такую штуку в Windows и на три языка? :)
Я смотрю ты не ищешь легких путей…
Пиздец, откуда у тебя столько времени, Тормоз, чтобы страдать подобного рода хуйней? (Правда ты будешь утверждать, что это охуеть какая полезная тема)
Идея нецеклической раскладки хорошая! На винду первым делом ставлю Punto, но постоянно забываю какая раскладка активна и то и дело кликаю Break, Break, Break…
«монтирую серверные каталоги в локальную файловую систему»
А про это немного подробней можно?
Юзай Google, под Win вообще никаких проблем, куча программок на каждый пук.
Можно.
годно, у меня до этого: #us, ru_winkeys, switch by caps, scroll led
setxkbmap -symbols ‘pc+us+ru(winkeys):2+group(caps_toggle)’ -compat ‘complete+ledscroll(group_lock)’
но, тоже наверное прибью каждую раскладку на отдельную кнопку.
это конечно немного ограничивеает в том смысле, что при циклическом переключении можно было совешать некоторый ограниченный набор действий одной рукой, а теперь нет.
но оно того в принципе стоит.
за unclutter тоже спасибо.
со своей стороны рекомендую все постоянно используемые приложения (ff, vim, терминал, etc) во первых прибить к определённому workspace (вроде-бы в dwm они есть), и сделать для каждого run or raise бинд.
ссыла на авесом вики просто тотому-что они хорошо обьясняют концепт, оно для любого браузера реализуемо.
и точно так-же как ациклическое переключение раскладок уменьшает объём контекста который необходимо помнить, что-бы эффективно взаимодействовать со средой.
А можно своими словами кратко про Run or raise? Что это и для чего?
s/браузера/wm/
lmao
Тут много людей читает и каждому придётся лезть по-ссылке и разбираться. Напиши кратко суть того, что именно ты рекомендуешь. Пожалуйста.
ты просто жмакаешь на кнопку и у тебя фокус переноситься на приложение, в не зависимости от.
если оно запущено, переключит воркспэйс на нужный и поставит фокус на нужное окно.
если не запущено, то запустит.
у меня это весьма скромный набор:
Win+E для gvim
Win+C для терминала
Win+F для ff
ещё когда-то было Win+O для оперы, даже бинд в конфиге остался, но оперы больше нет.
О, это охренительно полезная нужная функция! Я о ней давно думал, но пока не подошёл к решению. Ты не знаешь, в DWM такое есть или что-то нужно патчить?
а, вспомнил-вспомнил.
ничего не поделаешь, это-же dwm.
мало того, что оно само не умеет, из-за своей дурацкой идеи «не больше 2kloc на C».
но оно даже ewmh (Extended Window Manager Hints) и netwm не поддерживает, поэтому внешние припарки его особо не спасут.
хорошие припарки такие:
xbindkeys – что-бы биндить произвольные команды на клавиши.
wmctrl – что-бы управлять wm‘ом из внешних скриптов.
devil’s pie – что-бы производить манипуляции с новопоявившимися окнами.
а вообще лучше поменяй wm на что-то более фичастое, я в такой конструктор года полтора играл, с (black|flux|open)box как базисом, но потом пересел на sawfish где оно всё уже внутри – стало сильно удобнее.
а с xmonad стало ещё лучше.
Спасиб за наводки, посмотрю что как. Сильно фичастее и не надо вроде, достаточно будет эту штуку с фокусом прикрутить и вообще зашибись будет.
алсоу, почитав Заметки на полях клавиатуры (via xgu.ru) сделал менее инвазивный вариант:
пишем в ~/.Xmodmap такое:
! acyclyc layouts switch
keycode 66 = ISO_First_Group
keycode 109 = ISO_Last_Group
66 это код капс лока, а 109 – правого ctrl.
если нужны другие клавиш (мне например активно не нравится rctrl) – запускаем xev и тычем в кнопки, оно в stdout всё напишет.
а потом в ~/.xinitrc:
xmodmap ~/.Xmodmap
(вообще по идее оно должно само, но у меня при каких-то условиях не, поэтому добавил спецально)
а из строчки с setxkbmap наоборот убрать все опции связанные с переключением раскладок.
А вот как бы ещё из консоли аккуратно переключать раскладки? Пробовал через setxkbmap тот же, но с Vim не пашет почему-то.
> из консоли аккуратно переключать раскладки
> Vim
если я правильно понял вопрос, то смотри выдачу гугла на linux console layout switch
Искал, ничего особо толкового не нашёл почему-то. Да и то консольная именно переключалка будет, а мне нужно из консоли переключать иксовую раскладку. Это нужно, чтобы можно было в Vim назначить командой переключение раскладки сразу после перехода в нормальный режим по Escape.
окей, теперь понятно, хотя всё равно непонятно зачем оно тебе.
либо ищи что-то вроде xkb layout commandline switcher.
либо используй что-то вроде xdotool что-бы генерировать синтетическое событие нажатия на клавишу переключающую язык.
Спасибо, поищу, подумаю. Если сделаю что хотел — напишу.