LINUX.ORG.RU

три раскладки


0

0

имеется три раскладки: англ, рус, укр.

возможно ли сделать переключение между англ <-> рус по альт-шифт, напирмер. а англ <-> укр по капсу, или контрол-шифт или еще как.


Ответ на: комментарий от anonymous

dwm

желательно чтобы эта гадость дальше ксорг.конф не вылезала. хотя все варианты интересны

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

Чего-то непонятно. Вот ты переключился, скажем, в русскую раскладку одной комбинацией, а потом нажал на комбинацию укр/инглиш. В какую он у тебя должен перейти: украинскую или английскую? Переключатель укр/инглиш как должен себя вести при уже выбранной до этого рус или инглиш? Ты не запутаешься?

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

э.. ну какбы так. например переключение между основными (рус-англ) по алтшифт. а вот если нажать контрол-шифт то получаем украинскую. или как-то так.

если бы я такое встречал и знал или оно возможно, то не спрашивал бы.

может какой левел3 или как оно там называется..

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

моежт setxkbmap на hotkeys привязать?

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

я знаю два пути: через левел3 и через компоуз. когда я пробовал поставить авесам, левел3 не подошол, потому компоуз:

andrey@valkyrie ~ $ cat .XCompose
include "/usr/share/X11/locale/en_US.UTF-8/Compose"

<Multi_key> <Cyrillic_yeru> <Cyrillic_yeru> : "і" U0456
<Multi_key> <Cyrillic_YERU> <Cyrillic_YERU> : "І" U0406

<Multi_key> <Cyrillic_hardsign> <Cyrillic_hardsign> : "ї" U0457
<Multi_key> <Cyrillic_HARDSIGN> <Cyrillic_HARDSIGN> : "Ї" U0407

<Multi_key> <Cyrillic_e> <Cyrillic_e> : "є" U0454
<Multi_key> <Cyrillic_E> <Cyrillic_E> : "Є" U0404

<Multi_key> <backslash> <backslash> : "ґ" U0491
<Multi_key> <bar> <bar> : "Ґ" U0490

andrey@valkyrie ~ $

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

>э.. ну какбы так. например переключение между основными (рус-англ) по алтшифт. а вот если нажать контрол-шифт то получаем украинскую. или как-то так.

А немодальные переключения по трем комбинациям не годятся?

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

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

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

Вот есть некий результат по решению задачки (немного отличной от
исходной). Alt+Shift переключает режим Рус/Лат либо Укр/Лат, а 
Crtl+Shift -- сам toggle делает. Это несколько похоже на хак, но
сделать лучше пока знаний не хватает. Идея такая. Делаем символ 
ISO_Next_Group_Lock прыгающим через одну группу, а ISO_Prev_Group_Lock
прыгающим через две. Определяем четыре группы us, us, ru, ua. На 
комбинацию Alt+Shift вешаем генерацию ISO_Next_Group_Lock, а на 
Ctrl+Shift вешаем ISO_Prev_Group_Lock. Проверить можно так

xkbcomp ~/my_keymap :0 (в нулевой дисплей)

Комбинации Alt+Shift и Ctrl+Shift (my_group) взяты прямо из xkb и 
подправлены. У меня вроде заработало, как предполагалось.

ъъъ ]]] ъъъ (переключаем режим) їїїїї ]]]]] їїїїї :)

=========================================
~/my_group:

partial modifier_keys 
xkb_symbols "ctrl_shift_toggle" {
    key <LFSH> {
        type[Group1]="PC_BREAK",
        symbols[Group1]= [ Shift_L,     ISO_Prev_Group_Lock ]
    };
    key <RTSH> {
        type[Group1]="PC_BREAK",
        symbols[Group1]= [ Shift_R,     ISO_Prev_Group_Lock ]
    };
    key <LCTL>  {       [       Control_L,      ISO_Prev_Group_Lock ]        };
    key <RCTL>  {       [       Control_R,      ISO_Prev_Group_Lock ]        };
};

partial modifier_keys 
xkb_symbols "alt_shift_toggle" {
    virtual_modifiers Alt;
    key <LALT> {
        symbols[Group1]= [ NoSymbol,    ISO_Next_Group_Lock ],
        virtualMods= Alt
    };
    key <RALT> {
        symbols[Group1]= [ NoSymbol,    ISO_Next_Group_Lock ],
        virtualMods= Alt
    };
    key <LFSH> {
        type[Group1]="PC_SYSRQ",
        symbols[Group1]= [ Shift_L,     ISO_Next_Group_Lock ]
    };
    key <RTSH> {
        type[Group1]="PC_SYSRQ",
        symbols[Group1]= [ Shift_R,     ISO_Next_Group_Lock ]
    };
};

===================================================
~/my_keymap:

xkb_keymap "my_model" {
        xkb_keycodes {
                include "xfree86"
        };
        xkb_types { include "complete" 
		    include "my_types" 
        };
        xkb_compatibility { 
		include "complete" 
		interpret ISO_Next_Group_Lock { action = LockGroup(group=+1); };
  		interpret ISO_Prev_Group_Lock { action = LockGroup(group=+2); };
	};
        xkb_symbols {
                include "pc(pc105)"
		include "us:1"
		include "us:2"
                include "ru(winkeys):3"
		include "ua:4"
		include "my_group(ctrl_shift_toggle)"
		include "my_group(alt_shift_toggle)"
        };
        xkb_geometry { include "pc(pc105)" };
};

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

Ой, только ошибся в my_keymap. Там надо my_types убрать. Забыл.

~/my_keymap:

xkb_keymap "my_model" {
        xkb_keycodes {
                include "xfree86"
        };
        xkb_types { include "complete" };
        xkb_compatibility { 
		include "complete" 
		interpret ISO_Next_Group_Lock { action = LockGroup(group=+1); };
  		interpret ISO_Prev_Group_Lock { action = LockGroup(group=+2); };
	};
        xkb_symbols {
                include "pc(pc105)"
		include "us:1"
		include "us:2"
                include "ru(winkeys):3"
		include "ua:4"
		include "my_group(ctrl_shift_toggle)"
		include "my_group(alt_shift_toggle)"
        };
        xkb_geometry { include "pc(pc105)" };
};

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

Да, похоже, можно покрасивее решить задачку с выбором ua/us и ru/us. У Ивана Паскаля есть похожий примерчик. А так как этот человек есть корифей в области xkb, то советую его почитать.

http://www.linux.org.ru/books/xkb/example4.html#2

Я еще думаю, что возможен такой вариант, что ты переключаешься между ru/us, а ua у тебя может быть включена с удержанием какой-нибудь выбранной кнопки с целью набора нужных украинских букв. Отпускаешь кнопку -- возвращается прежний режим. Но для этого тоже надо познать xkb. Я на 100% не уверен, что так можно делать. Но вот SetGroup, кажется, как раз такой режим переключения и осуществляет, судя по доке:

SetGroup Set current group, while the keys are held down.

LatchGroup Latch current group, until the next key is pressed.

LockGroup Lock current group, until the keys are pressed again.

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