LINUX.ORG.RU

Ремап стрелок на C-х как в emacs.

 , ,


0

1

Прошу помощи в настройке. Использую в повседневной работе elementary OS Loki, по сути Ubuntu.

Для полного счастья не хватает возможности использовать в место стрелок: up, down, left, right, сочетания Ctrl+P, Ctrl+N, Ctrl+F и Ctrl+B соответственно как в Emacs.

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

И конечно хотелось бы иметь простое, лаконичное, переносимое и современное решение которое не слетает при смене раскладки.

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

Пробовал, не то. Работает не везде, те приходится все равно юзать стрелки.

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

emacs сделан с помощью readline. Терминалы, MC и большинство ПО поддерживает эти сочетания. В браузер можно поставить расширения VIM и переназначить «под себя» сочетания (история, прокрутка).

n1rdeks
()

up, down, left, right
Ctrl+P, Ctrl+N, Ctrl+F и Ctrl+B

А я думал это вимеры больные.

Deleted
()
Ответ на: комментарий от n1rdeks

С терминалом проблем нет, мс - тоже, хотя режим lynx уже работает иначе. большинство браузеров и файловых менеджеров комбинацию С-n воспринимают как создать новое окно.

Использую хром и Pantheon-files в общем все устраивает но возможности поменять shortcuts нормально не выходит...

В браузере использую vimium но мне привычней C-n, C-p, тк с вима давно переполз на emacs. К тому же навигация по всяким контекстным меню браузера и менюхе в адресной строке (подсказки ввода адреса) браузера не работает и приходится использовать стрелки. В итоге куча костылей которые работают лишь на половину.

Еще есть куча софта, о котором распространяться нет смысла, в котором стрелки жестко забиты и их так просто не изменить или вообще не изменить, проприетарное по.

Проще всего как-то заменить стрелки на С-х, где-то на уровне системы и забыть про все эти трудности.

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

Еще раз пишу: в системе они как раз выбраны по умолчанию в «emacs mode». Многие программы позволяют поставить emacs-keys.

n1rdeks
()
Ответ на: комментарий от lintiay

Тааак-с. Что мы имеем? Мы имеем систему, которая использует по умолчанию readline библиотеку. Дальше мы имеем программу со своими хоткеями. Как в программе поставить свои клавиши? Биндить в настройках. В самой системе поддерживаются настройки выше. Поведение для браузеров тоже своё (выше написали, как поменять). В чём вопрос?

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

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

Если подскажете как в хроме сделать навигацию, хотя бы по меню адресной строки при помощи C-n/C-p буду премного благодарен.

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

хром - зло с горячими клавишами. В отличии от лисы всё вшито (другие раскладки нормально с русским не работают (colemak, dvorak). Я пользуюсь vimium, где забиндил перемещение по истории и по странице. С адресной строкой я просто донабираю до интересующего результата (ctrl+L - фокус на адрес и вперёд).

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

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

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

Понял, что копать надо в сторону xkb, у кого есть опыт как сделать все максимально просто?

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

Напоминает старую шутку.

Доктор, у меня боли в спине. Нагнитесь. Так лучше? Да, так намного легче. Вот так и ходите. Следующий!

lintiay
() автор топика
5 мая 2019 г.

Приемлимое решение

Перепробовав много разных конфигураций решил остановиться на следующем решении:

$ cat /usr/share/X11/xkb/compat/emacs

partial xkb_compatibility "compat" {
    interpret osfUp {
        action= RedirectKey(key=<UP>, clearmods=all);
    };
    interpret osfRight {
        action= RedirectKey(key=<RGHT>, clearmods=all);
    };
    interpret osfLeft {
        action= RedirectKey(key=<LEFT>, clearmods=all);
    };
    interpret osfDown {
        action= RedirectKey(key=<DOWN>, clearmods=all);
    };
};

и

$ cat /usr/share/X11/xkb/symbols/emacs
                                 
partial alphanumeric_keys
xkb_symbols "symbols" {
    replace key <AD10> {
        type = "THREE_LEVEL",
        symbols[Group1] = [           p,           P,    osfUp ],
        symbols[Group2] = [ Cyrillic_ze, Cyrillic_ZE,    osfUp ]
    };
    replace key <AC04> {
        type = "THREE_LEVEL",
        symbols[Group1] = [           f,           F, osfRight ],
        symbols[Group2] = [  Cyrillic_a,  Cyrillic_A, osfRight ]
    };
    replace key <AB05> {
        type = "THREE_LEVEL",
        symbols[Group1] = [           b,           B,  osfLeft ],
        symbols[Group2] = [  Cyrillic_i,  Cyrillic_I,  osfLeft ]
    };
    replace key <AB06> {
        type = "THREE_LEVEL",
        symbols[Group1] = [           n,           N,  osfDown ],
        symbols[Group2] = [ Cyrillic_te, Cyrillic_TE,  osfDown ]
    };
    replace key <LCTL> {
        virtualMods = LevelThree,
        type = "ONE_LEVEL",
        symbols[Group1] = [ NoSymbol ],
        actions[Group1] = [ SetMods(modifiers=Control+LevelThree,clearLocks) ]
    };
    replace key <RCTL> {
        virtualMods = LevelThree,
        type = "ONE_LEVEL",
        symbols[Group1] = [ NoSymbol ],
        actions[Group1] = [ SetMods(modifiers=Control+LevelThree,clearLocks) ]
    };
};

Конечно не забыть все это прописать в rules (/usr/share/X11/xkb/rules/evdev) и в иксы, у меня это выглядит так:

$ cat /etc/X11/xorg.conf.d/00-keyboard.conf

Section "InputClass"
        Identifier "system-keyboard"
        MatchIsKeyboard "on"
        Option "XkbLayout" "us,ru"
        Option "XkbModel" "pc105"
        Option "XkbVariant" "os_winkeys"
        Option "XKbOptions" "grp:shift_caps_switch,shift:both_shiftlock,emacs:keys,emacs:symbols,emacs:compat"
EndSection

В данном случае необходимо дописать только: «emacs:symbols, emacs:compat».

К сожалению конфиг не идеален, т.к. Некоторые программы воспринимают Control, который использую, для переключения на третий слой в группе. Как вариантрешения проблемы можно использовать в место Control клавишу(-ы) Super или что-то другое. Еще есть мысль посылать, предварительно, что Control отжат, но как это сделать пока не знаю.

ЗЫ: Не так страшен xkb как его рисуют)

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