LINUX.ORG.RU

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

видел я этот список возможных вариантов.. думал может есть обходные пути...

kde не пользуюсь, гномом тоже. стоит kkbswitch, но там нет возможности циклически переключать раскладки.. как-то это убоговато всё, честное слово.

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

Эти возможные варианты -- это то, что предопределено. Но они не исчерпывают всех возможностей.

man xmodmap

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

Да, позволяет. В определенных пределах. Твоя задача состоит в том, чтобы заставить комбинацию Super (а какая кнопка у тебя супер?) + Space посылать символ ISO_Next_Group. Этот символ выбирает следующую языковую группу.

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

в моём случае кнопка super -- это command (на ней ещё яблочко нарисовано, аналог win-key).

попробовал прописать в xmodmap вот это:

keycode 65 = space ISO_Next_Group ISO_Next_Group ISO_Next_Group

в результате язык переключается только по shift+space..

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

Вот третья и четвертая комбинация -- это Mode_switch и Shift+Mode_switch. Можно попробовать сделать так, чтобы "Command" генерировала Mode_switch, но это явно не то, что надо. Тогда эта кнопка всегда будет генерировать Mode_switch.

Сделать это можно так:

xmodmap -e "keycode <код яблочка из xev> = Mode_switch"

Но тогда символ Super эта кнопка уже не будет генерировать. Да, задачка твоя несколько посложнее, чем мне показалось. Надо подумать.

Zubok ★★★★★
()

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

Это в файл ~/my_model.xkb

xkb_keymap "my_model" {
        xkb_keycodes {
                include "xfree86"
        };
        xkb_types { include "complete" 
                    include "my_types" 
        };
        xkb_compatibility { include "complete" };
        xkb_symbols {
                include "pc(pc105)"
                include "us"
                include "ru(winkeys):2"
                include "my_group(super_space_toggle)"
        };
        xkb_geometry { include "pc(pc105)" };
};

Это в файл ~/my_types:

partial default xkb_types "default" {
    virtual_modifiers Super;

    type "PC_SUPER" {
        modifiers = Super;
        map[None] = Level1;
        map[Super] = Level2;
        level_name[Level1] = "Base";
        level_name[Level2] = "Super";
    };

};

Это в файл ~/my_group:

partial modifier_keys 
xkb_symbols "super_space_toggle" {
    virtual_modifiers Super;
    key <SPCE> {
        type[Group1]="PC_SUPER",
        symbols[Group1]= [ NoSymbol,    ISO_Next_Group ],
        virtualMods = Super
    };
};

Проблемы:

1. Я не до конца еще понял, что я сотворил. Можно ли без этого вообще
   обойтись?

2. Emacs при смене языка моргает (visible-bell), но язык меняет
   Пocмотрел xev. Мне кажется, что
   он реагирует на символ Super_L или Super_R. А вот должен ли этот
   символ передаваться, я не знаю еще. Наверное, это как-то поправимо.

3. Компилировать это можно прямо в нужный DISPLAY (можно в файл, 
   читать man xkbcomp):

$ xkbcomp my_model.xkb :0

Сразу должно работать.

Zubok ★★★★★
()

Кастую svu пятого уровня.

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