akorop |
|
Темы:
111
Сообщения:
1755
Участник с: 29 февраля 2012
|
Мне нужно переключаться между тремя языками, что гораздо удобнее делать при помощи фиксирующих клавиш, а не при помощи одной комбинации, перебирающей раскладки по кругу. Конкретно, я с незапамятных времён привык, что RShift включает раскладку 1 (us), RCtrl - раскладку 2 (ru), RWin - раскладку 3 (ua). С горем пополам я когда-то определил такое переключение иксовыми средствами, но после этого, естественно, перестали работать такие хоткеи, как RCtrl-Rigt (прыжок на слово вперёд в любом редакторе; очень удобно нажимать одной правой рукой). Иксовая переключалка работает по нажатию и конфликтует с хоткеями приложений. Как подсказал Koluchka, это Знаменитый древний баг, но в мэйнстриме предложенное решение игнорируется. Кроме того, это решение работает только для двухклавишных комбинаций. Поэтому я долгое время использовал xneur в режиме чисто ручного переключения - xneur имеет правильную логику распознавания переключающих комбинаций. Но так использовать xneur - это забивание гвоздей микроскопом; кроме того xneur конфликтует со многими приложениями (xterm, к примеру), да и глючноват он. Но как-то жить можно было. А недавно я случайно наткнулся на функцию XQueryKeymap, которая позволяет подсматривать клавиатуру, не вмешиваясь в поток иксовых событий, и, следовательно, гарантировано никому не мешая. Ну я и сделал на её базе программульку s1kls, которая тупо поллит клавиатуру (период 20 мс) и переключает раскладку по заданным клавишам. Она очень-очень простая: распознавать умеет только одиночные клавиши (скажем, Ctrl-Shift не поймёт) и умеет только устанавливать раскладку (а не переключать по кругу). Если кому надо, то не особо сложно добавить туда и двухклавишные комбинации, и переключение по кругу, но мне - не надо, так что я предпочёл сохранить максимальную простоту. Зависимостей у этой программы никаких, кроме базовых иксов, так что бинарик запускается где угодно. Я пробовал её на очень слабом компьютере (первый Athlon, 750 МГц, с древней Убунтой) - работает без проблем, никакой заметной загрузки процессора не создаёт. Писал, в принципе, для себя, но, может, кому пригодится. Выложено на AUR, имя пакета - s1kls |
konstantinov-ms |
|
Темы:
15
Сообщения:
636
Участник с: 29 ноября 2009
|
akoropСпасибо за программу, попробую. Но было бы неплохо реализовать такой вариант: мне бóльшее время нужны две раскладки (RU-US), переключаемые по кругу двухклавишной комбинацией (LAlt+Shift), но иногда требуется переключение на сочетание RU-DE (и тоже по кругу). Первоначально я реализовал это при помощи костыля: одним хоткеем загружается 'setxkbmap -layout "de,ru(winkeys)" -model pc105 -option grp:alt_shift_toggle,grp:rctrl_switch,grp_led:scroll,compose:ralt', а другим — 'setxkbmap -layout "us,ru(winkeys)" -model pc105 -option grp:alt_shift_toggle,grp:rctrl_switch,grp_led:scroll,compose:ralt'. Потом перешёл на gxkb; принцип тот же, только загружаются разные конфиги для gxkb. Так вот, если бы можно было сделать в программе два варианта: с помощью LAlt+Shift (например) переключение между RU-US, а с помощью LCtrl+Shift (например) — между RU-DE, это было бы просто идеально. Жалко отдавать функциональные клавиши под раскладку. Как можно заметить, у меня RAlt — клавиша compose, RCtrl — временное переключение раскладки. А уж отказаться от одного из Shift'ов означает отказаться от десятипальцевого метода набора. |
akorop |
|
Темы:
111
Сообщения:
1755
Участник с: 29 февраля 2012
|
konstantinov-msАналогичный костыль и у меня был в OS/2 поначалу. Но потом я перешёл на честное переключение между тремя раскладками, и увидел, что это намного удобнее. Очень быстро вырабатывается привычка на всякий случай тыкать клавишу нужного языка, так что ошибок практически не бывает. Но чтобы такая привычка могла выработаться, нужно, чтобы клавиша всегда обозначала один и тот же язык.akoropСпасибо за программу, попробую. Но было бы неплохо реализовать такой вариант: мне бóльшее время нужны две раскладки (RU-US), переключаемые по кругу двухклавишной комбинацией (LAlt+Shift), но иногда требуется переключение на сочетание RU-DE (и тоже по кругу). Первоначально я реализовал это при помощи костыля: одним хоткеем загружается 'setxkbmap -layout "de,ru(winkeys)" -model pc105 -option grp:alt_shift_toggle,grp:rctrl_switch,grp_led:scroll,compose:ralt', а другим — 'setxkbmap -layout "us,ru(winkeys)" -model pc105 -option grp:alt_shift_toggle,grp:rctrl_switch,grp_led:scroll,compose:ralt'. Потом перешёл на gxkb; принцип тот же, только загружаются разные конфиги для gxkb. konstantinov-msХм... Я бы и врагу такого не пожелал. konstantinov-msТак ведь не надо же ничего отдавать, если используется переключатель не стандартный иксовый, а с нормальной логикой (то есть xneur или мой). Я для переключения использую правые Ctrl, Shift и Win, и это совершенно не мешает использованию Shift по прямому назначению или всех трёх в составе хоткеев. Например, в текстовом редакторе очень удобно прыгать по словам одной правой рукой (RCtrl+Left, RCtr+Right). Что касается compose, то ничто не мешает использовать его так же, как и раньше, но в сочетании нестандартной переключалкой. Вот сейчас я (со своей переключалкой) выполнил setxkbmap -option compose:ralt и проверил: RAlt, o, c - ввёлся знак копирайта. А что касается временного переключения - то это костыль, практически не нужный при использовании фиксирующих клавиш, и временами крайне неудобный. Скажем, если находясь на английской раскладке, нужно ввести русскую букву "Г', то Вам придётся нажать RCtrl, LShift, затем чёрт знает каким пальцем 'Г", и затем всё отпустить. А мне - нажать и отпустить RCtrl, нажать Shift и Г (привычным образом), отпустить их, нажать и отпустить RShift. Формально говоря, у меня движений больше, но у меня всё делается на автомате, как всегда. А у Вас одно движение извращённо топырит пальцы и требует внимания. А поскольку это операция не такая уж частая, то механическое удобство и экономия внимания важнее, чем экономия числа движений. К тому же разница в числе движений сходит на нет, если надо ввести не одну букву, а, скажем, три. В общем, советую попробовать вот так: setxkbmap -layout "en,de,ru(winkeys)" -model pc105 -option compose:ralt s1kls 62 105 134 |
konstantinov-ms |
|
Темы:
15
Сообщения:
636
Участник с: 29 ноября 2009
|
Хм... Почитал, подумал, прикинул. Судя по всему, Ваш способ действительно удобнее. Особенно, если его немного подстроить под себя (я пользуюсь, в основном, ноутбуками, там часто нет клавиши RWin). Да и Shift тоже не хотелось бы задействовать (иногда он нажимается случайно, когда думаешь ввести какой-нибудь символ, потом отпускаешь, передумав, — тогда происходит переключение раскладки, что не всегда удобно). Но можно подобрать для себя удобные кейкоды, посмотрев их в файле /usr/share/X11/xkb/keycodes/evdev. Для себя пока выбрал такую комбинацию:setxkbmap -layout "us,de,ru(winkeys)" -model pc105 -option compose:ralt s1kls 37 133 64 |
Medar |
|
Темы:
12
Сообщения:
402
Участник с: 08 февраля 2013
|
Я вот такое использовал для переключения: https://github.com/scorpp/xkbswitch |
akorop |
|
Темы:
111
Сообщения:
1755
Участник с: 29 февраля 2012
|
MedarCtrl-Shift-1, чтобы переключиться на русский, это злая шутка по мотивам Windows? Эта программа может представлять интерес в скриптах, но чтобы её использовать в качестве ручной переключалки, надо уметь повесить её вызов на что-то типа "нажал-отпустил RShift". Чем это сделать? |
akorop |
|
Темы:
111
Сообщения:
1755
Участник с: 29 февраля 2012
|
konstantinov-msЕсли передумание осознаётся, то можно, прежде чем отпускать Shift, ткнуть что-то ещё, скажем, Ctrl. Тогда переключения не будет. |
konstantinov-ms |
|
Темы:
15
Сообщения:
636
Участник с: 29 ноября 2009
|
akoropНет, я, когда работаю, полностью погружаюсь в мысли и не думаю ни о клавиатуре, ни о программе, в которой набираю текст. Уже попробовал с Shift'ом, не получается. Но это не значит, что другим тоже будет неудобно.konstantinov-msЕсли передумание осознаётся, то можно, прежде чем отпускать Shift, ткнуть что-то ещё, скажем, Ctrl. Тогда переключения не будет. Для себя подобрал неплохую комбинацию: LCtrl (us), RCtrl (de), LAlt (ru). Уже даже привык. Действительно удобно. |
Medar |
|
Темы:
12
Сообщения:
402
Участник с: 08 февраля 2013
|
akoropЗачем Ctrl-Shift-1? Я повесил на Ctrl-1=us, Ctrl-2=ru, Ctrl-3=ua. А так можно и на LCtrl (us), RCtrl (de), LAlt (ru) или как кому удобно. |
akorop |
|
Темы:
111
Сообщения:
1755
Участник с: 29 февраля 2012
|
MedarCtrl-Shift-1 - это авторский пример. А Ctrl-1 и т.п. не намного лучше.akoropЗачем Ctrl-Shift-1? Я повесил на Ctrl-1=us, Ctrl-2=ru, Ctrl-3=ua. MedarВот это меня бы устроило (при условии, что имеет "правильную" логику, то есть срабатывает по отпусканию, и только если ничего постороннего не было нажато). Так что повторяю вопрос: чем такую привязку сделать? Openbox, вроде, так не умеет. Собственно, подобная своя программа у меня давным-давно есть, так что вопрос чем привязать - это единственный вопрос. Я её использую для установки английской раскладки при вызове меню openbox горячей клавишей (у меня несколько горячих клавиш для вызова разных меню). А установка определённой раскладки нужна, чтобы работали клавиши-ускорители. |