LINUX.ORG.RU

Переключение раскладок клавиатуры в Gnome


0

1

Как в гноме присвоить каждой раскладке свое сочетание клавиш (раскладок больше двух)? Желательно без сторонних программ. Вариант забить на сочетание клавиш команду типа setxkbmap -layout 'ru' не подходит потому как ломает запоминание раскладок для каждого окна.

setxkbmap позволяет настроить до 4-х раскладок, запоминание можно реализовать с помощью xxkb, например

lazyklimm ★★★★★
()
Ответ на: комментарий от lazyklimm

А можно подробнее про xxkb? Даже если после setxkbmap -layout указать несколько раскладок через запятую то запоминание дляразных окон все равно ломается.

mwChief
() автор топика
Ответ на: комментарий от muzlocker

Если бы это хоть где-то настраивалось через гуй, я бы не задвал фопрос на форуме.

mwChief
() автор топика
Ответ на: комментарий от mwChief

у меня так (выкинул то что касается емакса):

cat ~/.xxkbrc

XXkb.mainwindow.enable:No
XXkb.controls.add_when_change:Yes
XXkb.controls.focusout:No
XXkb.button.enable:Yes
XXkb.button.geometry:15x15+1675+0

в автозагрузке setxkbmap us,ru,us -option «grp_led:scroll,ctrl:nocaps» -model microsoft7000

lazyklimm ★★★★★
()
Ответ на: комментарий от lazyklimm

Все же наверное я дурак, но я так и не смог ничего добиться с помощью xxkb. Это всего лишь альтернатива встроенной возможности гнома по запоминанию раскладок для окон, но он точно также сходит с ума при попытке назначить каждой раскладке отдельное сочетание клавиш.

mwChief
() автор топика

Без сторонних программ есть только один способ - хачить файлы xkb. См. например, как реализован grp:win_menu_switch. Но там используются символы ISO_First_Group, ISO_Last_Group. Если нужны конкретные группы, можно попробовать повесть на клавишу action и в нее запихать явно заданную SetGroup(...) В общем, куда-то в эту сторону я б копал.

Предупреждение. Eсли заставите все это работать - пожалуйста, не надо засылать в багзиллу xkeyboard-config. Такое извращение - не приму.

svu ★★★★★
()
Ответ на: комментарий от elipse

До такого решения я дошел давно, но есть проблема - не запоминаются раскладки для разных окон. Вот ее я даже не предсталяю как решать.

mwChief
() автор топика
Ответ на: комментарий от mwChief

И рыбку съесть и еще раз рыбку съесть ?
C svu такой номер не пройдет ))
Первая тема моя на лоре как раз и была попыткой убедить svu что-то сделать полезное для многоязычных пользователей.
А результат вам и так виден - все продолжаем штатно крутить карусель из раскладок.
Если не грозят прибить каждый день, то могут же как-то и привыкнуть и перетоптаться.))

elipse ★★★
()
Ответ на: комментарий от elipse

Есть ли способ просто сменить раскладку командой? Setxkblayout ведь их переопределяет, что и является источником проблем.

mwChief
() автор топика
Ответ на: комментарий от mwChief

есть , но только уже теоретически
через gconf (по ссылке есть ниже пример) можно выбрать одну раскладку,
но на новых гномах будет исчезать индикатор и непонятны последствия с сохранением раскладок в окнах.

elipse ★★★
()
Ответ на: комментарий от elipse

Топикстартер уже отметил - при использовании шорткатов+setxkbmap теряется запоминание группы для окна.

svu ★★★★★
()
Ответ на: комментарий от mwChief

Точно не скажу, вряд ли лучше.
Что можно ожидать от англоязычного лобби ?))

elipse ★★★
()
Ответ на: комментарий от mwChief

Все DE используют xkb. А там не побалуешь;) Вот когда будет xkb2... (возможно, никогда:)

Сделать утилиту командной строки, которая переключает группу - не проблема, это три строчки на С. Вкратце,

XOpenDisplay
XQueryExtension (надо бы, хотя не обязательно)
XkbLockGroup

Можно передавать номер группы параметром, тогда еще atoi потребуется.

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

Но способ, который я указал выше - самый правильный.

svu ★★★★★
()
Ответ на: комментарий от svu

Неудивительно,это побочные явления от костылей.
зы: на ноуте четыре раскладки стоит - это ненависть и кровь закипает через час работы.

elipse ★★★
()
Ответ на: комментарий от svu

Поставь себе и поработай сам
А в непонятку и твоя моя не понимайт мне не охота играть.

elipse ★★★
()
Ответ на: комментарий от elipse

Можно дать четкое определение «нормально»? В данный момент иксы (не код, а имеющиеся в xkeyboard-config материалы) и ДЕ поддерживают две модели:

1. циклическая с комбинацией на переключение на следующую (иногда и предыдущую) групп

2. «двугруппную» с отдельными комбинациями на «первую» и «последнюю» (например, grp:win_menu_switch). групп-то может быть и больше, но переключиться клавишами можно только на первую и последнюю.

Мало?

Группы до четырех я себе ставил для тестирования, но реально работать не приходилось - просто потому что мне без надобности остальные две, я их «проскакивал» при переключении

svu ★★★★★
()
Ответ на: комментарий от svu

Да, это все не то.
Сразу прямой вопрос - существует ли внутренняя возможность (любая) быстро переключатся между группами и любыми раскладками в них ?
Как это отразится на текущих оконных языках (скажем так) ?

elipse ★★★
()
Ответ на: комментарий от mwChief

Самый короткий хакерский вариант:

#include <stdio.h>
#include <X11/XKBlib.h>

void main(int argc, char** argv)
{
   Display *d = XOpenDisplay(NULL);
   int g = atoi(argv[1]);
   XkbLockGroup(d, XkbUseCoreKbd, g);
   XCloseDisplay(d);
}

svu ★★★★★
()
Ответ на: комментарий от elipse

Не понял вопрос до конца (насчет «любыми раскладками»), но попробую ответить, насколько возможно.

В иксах существует возможность переключиться на любую группу (по номеру) быстро - это функция XkbLockGroup. Можно сконфигурировать xkb для того, чтобы некая комбинация переключала иксы на группу с конкретным номером - для этого надо немного покурочить xkeyboard-config (я описал выше, как именно - используя action SetGroup).

По идее, это должно корректно обрабатываться текущим гномовским кодом, сохраняющим раскладку для окна - сам не пробовал, ибо для этого придется проделать вышеозначенный хак.

svu ★★★★★
()
Ответ на: комментарий от svu

Добавить в настройщике клавиатуры под списком групп кнопку Shortcut (там и место как раз для кнопки осталось) и там назначать шорткат для выбранной группы ?

vga ★★
()
Ответ на: комментарий от vga

> и там назначать шорткат для выбранной группы ?
Во во, и добавить столбец с настройкой шорткатов к установленным языкам.
Идеально было бы.

elipse ★★★
()
Ответ на: комментарий от svu

Как тяжко пояснить безногому обувному мастеру, что просто жмут его башмаки.))

elipse ★★★
()
Ответ на: комментарий от vga

Я в свое время пытался ваять код, позволяющий делать _произвольный_ шорткат для переключения группы. В какой-то момент сдался. Знаете, почему? Потому что Ctrl-G зависит от того, где в конкретной конфигуации находятся Ctrl и G.

Геморрою куча, проще подхачить файлы конфигурации xkb, она для этого приспособлена.

svu ★★★★★
()
Ответ на: комментарий от elipse

Да, и еще одно забыл рассказать. Любое переключение группы на клиентской стороне (через шорткаты, отлавливаемые вне икс сервера) - это хак, который по определению тормознее, чем обработка переключения внутри сервера. Надо это делать через конфигурацию сервера. А это задача слишком сложная для предполагаемых бенефитов (и того меньшинства, кому это реально нужно).

svu ★★★★★
()
Ответ на: комментарий от svu

Мораль из басни - если форма ноги нестандартная, то башмаки делают по индивидуальному заказу. Это совсем другая история.

svu ★★★★★
()
Ответ на: комментарий от svu

Поверь, это все фигня и детский лепет по сравнению с теми муками неудобствами кои приходится испытывать ПОСТОЯННО.

elipse ★★★
()
Ответ на: комментарий от elipse

Да мне легко поверить. Когда-то давно мне была очень неудобна переключалка в первом гноме. Я начал свой проект, который вытеснил старую переключалку. И я стараюсь делать так, чтобы БОЛЬШИНСТВО (не не все, разумеется - это невозможно) не испытывали мучений при работе с клавиатурой. Кто Вам мешает улучшить мир тем, что создать свой код (или предложить улучшение для существующего)?

svu ★★★★★
()
Ответ на: комментарий от svu

А ты один такой остряк ?))
Тут приходится постоянно выгребать и ругаться. На все нет сил и времени.
Прикинь, чел забрасывает пакет в testing и после установки
которого надо делать еще
./configure
make
абсолютный ноль по документации в пакете
и он записал себе в блокнотик исправить
когда-то в следуюшей версии в sid , при случае.
Этот ментейнер уже матер и опытен и по изворотливости напоминает тебя.
B вещяет от имени Debian. Что , надо все подряд форкать и совеми спорить до посиняки ? Это утомляет, как минимум.

elipse ★★★
()
Ответ на: комментарий от elipse

Исправлять в пакетах под конкретный дистр - гнилое решение. Серьезные изменения надо в апстрим сплавлять.

svu ★★★★★
()
Ответ на: комментарий от svu

Хо хо, тут ты апстрим, а там - он апстрим, так как пакет чисто дебовский.
И что толку от потерянного моего времени ?

Ты уже себе препон придумал мульон чтоб этого не было исправлено при моей жизни.))

elipse ★★★
()
Ответ на: комментарий от elipse

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

svu ★★★★★
()
Ответ на: комментарий от svu

> Или форкать.

не охота, но приходится.

если кто законтрибутит правильный и некривой патч, я рассмотрю.


Обычно, мне злости хватает на два занятия максимум.
А тут уже намечается четыре. Это пребор.))
Посмотрим, все ж еще и нестабильно. Щас долбить 2.6.32 и кто там знает что и как будет после Gnome3.


elipse ★★★
()
Ответ на: комментарий от elipse

Да, сейчас рано вообще делать выводы. Все в дыму.

svu ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.