[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: