Emacs input-decode-map для терминала

Я задал вопрос о привязке клавиш Ctrl-стрелка в Emacs в терминале:

Модификаторы Emacs Ctrl не работают в консоли

И мне сказали, что эмулятор терминала Linux не обрабатывает эту комбинацию. Мне удалось создать файл для команды loadkeys, которая обрабатывает эти ключи:

control keycode 105 = F100
string F100 = "\033[[left"
control keycode 106 = F101
string F101 = "\033[[right"

Затем загрузил его из-под root:

#loadkeys ./funcskeys

После этого каждый раз, когда я нажимаю Ctrl-вправо или Ctrl-влево в консоли, я получаю «право» или «лево». Теперь мне нужно обработать это в Emacs. Насколько я понял из этого вопроса:

Привязка M-‹вверх› / M-‹вниз› в Emacs 23.1.1

это необходимо сделать, используя функцию input-decode-map. Но я не мог заставить его работать. Плиз, помогите.


person user4035    schedule 03.11.2012    source источник


Ответы (1)


Слегка измените файл «funcskeys», чтобы получить следующие управляющие последовательности:

control keycode 105 = F100
string F100 = "\033[1;5D"
control keycode 106 = F101
string F101 = "\033[1;5C"

Затем добавьте следующие строки в файл .emacs:

(define-key input-decode-map "\e[1;5C" [(control right)])
(define-key input-decode-map "\e[1;5D" [(control left)])

После запуска loadkeys и перезапуска Emacs CTRL+влево и CTRL+вправо должны работать. Вы можете убедиться в этом, набрав:

C-h k C-справа

и

C-h k C-левый

Чтобы на самом деле связать эти нажатия клавиш с командой, такой как forward-word, вам, возможно, придется добавить следующие строки в ваш файл .emacs:

(global-set-key [(control right)] 'forward-word)
(global-set-key [(control left)] 'backward-word)

Обратите внимание, что весь этот подход заставляет работать только комбинации клавиш CTRL+влево и CTRL+вправо. Например, не работает ALT+влево / ALT+вправо или любые другие комбинации клавиш, включающие CTRL характер.

person Thomas    schedule 06.11.2012
comment
Не знаю почему, но ваш подход не сработал. Я сделал это с помощью (global-set-key \M-[1;5C 'forward-word). Тогда ваш код elisp не нужен. Вы знаете, что не так? - person user4035; 06.11.2012
comment
Извините, но не сработало в одиночку, недостаточно информации, чтобы понять, что не так. Но попробуйте вариант, который я только что сделал. - person Thomas; 07.11.2012
comment
Здорово! Что касается других клавиш: если у вас есть доступ к какой-либо другой эмуляции терминала, например, к gnome-terminal, имеет смысл использовать те же escape-последовательности клавиш. Посмотрите мой ответ на ваш предыдущий вопрос, чтобы узнать, как получить эти последовательности. - person Thomas; 08.11.2012
comment
К предыдущему вопросу я добавил подробный алгоритм для тех, кто столкнется с такой же проблемой. - person user4035; 08.11.2012