записывает привязку ключа lisp emacs и не может указать символ <delete> - PullRequest
4 голосов
/ 22 августа 2010

По какой-то причине я получил привязку ключа M-del по умолчанию для обратного слова уничтожения, сопоставленного сканированию на наличие соответствующих скобок, и сброс не работает, поэтому я пытаюсь установить привязку глобального ключа в lisp.Поэтому я написал в ~ / .emacs.d / init.el команды lisp:

(global-set-key (kbd "Mh") 'backward-kill-word)

(global-set-key (kbd "M - <\ delete>") 'backward-kill-word)

Я попробовал их с помощью Cx Ce, и они оба дают вывод' backward-kill-word ', но толькопервая привязка клавиш работает "Mh", другая игнорируется, а M-del все еще пытается выполнить странное сканирование.Ключ удаления работает в emacs где-то еще, поэтому кажется, что «delete» не отображается на физический ключ в lisp (и обратный слеш присутствует в этом тексте только в том случае, когда слово закомментировано).Любая идея, какое ключевое слово использовать или специальный символ?Best.

(Я искал библиотеки, которые могли переопределить эту команду, но я не могу их найти)

Ответы [ 4 ]

6 голосов
/ 23 августа 2010

В некоторых системах ключ delete определяется как псевдоним C-d.Это делается через function-key-map в GNU Emacs <23 и <code>local-function-key-map в GNU Emacs 23. (Я наблюдал такое поведение в Debian и Ubuntu 10.04 под X.) Цель таких переводов - изолировать людей, которые кодируют режимы изСложности терминала: режим, который хочет скрыть команду удаления, должен только перепривязать C-d и не задумываться, следует ли перепривязывать delete (это удаление влево или удаление вправо?) или deletechar или что-то еще.

Если для delete существует глобальная или локальная привязка, он переводит этот перевод в C-d.Однако если вы нажмете ESC delete, если для ESC delete нет глобальной или локальной привязки, второй ключ будет переведен в C-d.Этот перевод имеет преимущество перед интерпретацией ESC delete как M-delete.Так что ESC delete становится эквивалентным C-M-d.

Это, возможно, ошибка в Emacs: эффект ESC delete должен быть таким же, как M-delete, и нет причины, по которой ESC delete будетзапустите down-list, который не имеет ничего общего с удалением.

Существует несколько возможных исправлений;Я не знаю, что лучше.Тот, который должен работать с любой версией Emacs:

(global-set-key [?\e delete] 'backward-kill-word)
2 голосов
/ 22 августа 2010

Самое приятное в kbd то, что вы набираете ту же строку, что и Emacs.Итак, попробуйте следующее

C-h k M-<\delete>       (to use your syntax)

или

M-x describe-key M-<\delete>

Emacs (для меня) отвечает:

M-DEL (перевод с) запускает команду backward-kill-word, которая представляет собой интерактивную скомпилированную функцию Lisp в `simple.el '.

Она связана с M-DEL.

(backward-kill-слово arg)

....

То, что вы видите, показывает, что представление для требуемой клавиши: M-DEL или M-delete.

Это долгий путь к тому, чтобы получить то, что вы хотите:

(global-set-key (kbd "M-delete") 'backward-kill-word)

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

1 голос
/ 22 августа 2010

Возможно, вы захотите вызвать global-set-key в интерактивном режиме, чтобы увидеть, как он интерпретирует мета-удаление.Также попробуйте local-set-key, чтобы убедиться, что странная привязка не зависит от режима.

0 голосов
/ 22 августа 2010

После невозможности найти библиотеку, содержащую конфликт, я нашел эту веб-страницу http://www.cs.cmu.edu/cgi-bin/info2www?%28emacs%29Rebinding

Интерактивное изменение привязок клавиш ...

`Mx global-set-key KEY CMD 'Определите KEY глобально для запуска CMD ....

Обычно, C-z' is bound to the function suspend-emacs '(если не используется система X Window), но вы можете изменить C-z' to invoke an interactive subshell within Emacs, by binding it to shell' следующим образом:

 M-x global-set-key <RET> C-z shell <RET>

`global-set-key 'читает имя команды после ключа.После того, как вы нажмете клавишу, появится сообщение, подобное этому, чтобы вы могли подтвердить, что вы связываете нужную клавишу:

 Set key C-z to command:...

И теперь стандартное значение по умолчанию возвращается к выполнению

Mx global-set-key M-del ...

backward-kill-word Но это временно и должно быть сделано при каждой перезагрузке, есть ли способ сделать это постоянным?Помещение команды в init.el не отменяет другой эффект

...