LINUX.ORG.RU

elisp


0

0

Есть global-set-key, мне же надо для определённого режима сделать биндинг, который будет работать только в нём. Покажите, плз, пример.

★★

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

стоит отметить, что лямбды лучше не пихать в хуки, а лучше делать так:

(defun my-c-mode-hook () ....)

(add-hook 'c-mode-hook 'my-c-mode-hook)

так проще изменять код хука, если что-то сделал неправильно

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

А что если надо сделать свои биндинги, которые не будут перекрываться любыми режимами? Поменять например C-n. Я не нашел иного способа, кроме хаков с перезаписью уже установленных keymap.

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

M-x eval-region при выделенном фрагменте с my-c-mode-hook и при следующем открытии file.c будет задействован новый код хука.

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

Т. е. так нет надобности перегружать emacs. А если просто делать M-x eval-buffer, значение хука будет хранить как "старую" лямбду, так и новую. Поскольку add-hook добавляет к списку хука очередное значение.

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

как правильно отметил ipc, вычисление add-hook с анонимной функцией, добавит ее в список, т.е. будут две (или больше) версий одного хука. если вы добавляете функцию, которая уже есть в хуке, то она не будет добавляться второй раз, а будет лишь изменено ее поведение.

P.S. у меня емакс висит без перезапуска неделями, хотя я периодически дописываю новые хуки, меняю старые, и все делается без перезапуска.

к тому же, выделение кода для хука в отдельную функцию, позволяет использовать ее в хуках для разных режимов - у меня например, есть хуки для всех программерских режимов, для lisp-based языков, и т.д.

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