Re: emacs: local-set-key
Alex Kicelew -> debian-russian@lists.debian.org @ Thu, 12 Jul 2007 14:33:18 +0400:
AK> А как ныне (последний когда-то пробегавший по анстейблу
AK> emacs-snapshot) модно локально переопределять клавиши для конкретного
AK> режима?
AK> Задача. В техе неразрывный пробел вводится неудобно -- тильдой,
AK> которой нет в русской раскладке. Издревле у меня сидело
AK> переопределение сочетания meta-space (я в курсе, что оно вообще в
AK> емаксе значимо, но в тех-моде я им никогда не пользовался) на тильду,
AK> и все было нормально. Сейчас вдруг обнаружил, что мой старый код не
AK> работает:
AK> (add-hook 'tex-mode-hook
AK> '(lambda ()
AK> (local-set-key [?\M- ] '(lambda ()
AK> "Inserts TeX non-breaking space"
AK> (interactive)
AK> (insert "~")
AK> )
AK> )
AK> )
AK> Точнее, он отрабатывает без ошибок, но толку с него нуль. eval-region
AK> на фрагмент внутри лямбды проходит правильно -- клавиша
AK> переопределяется. Ковыряние в нутрях показало, что tex-mode-hook ныне
AK> вообще отсутствует, попытка изменить на latex-mode-hook (в голом техе
AK> я все равно практически не работаю) не привела ни к чему. Хелп дает
AK> пример:
AK> (add-hook 'texinfo-mode-hook
AK> '(lambda ()
AK> (define-key texinfo-mode-map "\C-cp"
AK> 'backward-paragraph)
AK> (define-key texinfo-mode-map "\C-cn"
AK> 'forward-paragraph)))
AK> Изменение этого примера под мои значения проходит с тем же
AK> успехом. Все работает, ничего не ругается, ничего не отрабатывает.
AK> Вопрос 1. Как это нужно делать сейчас?
Вообще, судя по тому, что я увидел в описании latex-mode (C-h f
latex-mode), он использует LaTeX-mode-map. Она, правда, не определена,
пока не загрузился соответствующий файл, но это, понятно, лечится
подходом "on load" (я не помню имя функции, найди в info сам).
AK> Вопрос 2. А нужно ли это делать? Глобальная задача -- вводить тильду
AK> (или, тем более, в хтмл-сгмл) вне зависимости от раскладки, но
AK> именно локально -- в техе тильду, в сгмл нбсп, еще в некоторых режимах
AK> еще некоторые прелести. Возможно, у нее есть какое-то более элегантное
AK> решение (кроме переопределения раскладки, которое сработает под тех,
AK> но не сработает в более сложных случаях)?
Не то чтобы более элегантное, но решающее именно эту задачу. Сделать
global-set-key, а в функции анализировать текущий mode.
--
Artem Chuprina
RFC2822: <ran{}ran.pp.ru> Jabber: ran@jabber.ran.pp.ru
Reply to: