Как перезагрузить основной режим Emacs? - PullRequest
17 голосов
/ 05 декабря 2010

У меня есть буфер в каком-то основном режиме, а в другом буфере сам файл режима (* .el).После того, как я отредактировал файл * .el, я хочу увидеть изменения, отраженные в первом буфере, без перезапуска emacs.Я попытался запустить функцию -mode, но она не изменила буфер.Спасибо

Ответы [ 3 ]

28 голосов
/ 06 декабря 2010

Если ваш режим предоставляет функцию (как и должно быть!), Используя (provide 'foo-mode), тогда вы можете

M-x функция разгрузки RET foo-mode RET

и затем снова загрузите режим как обычно (используя foo-mode, если у вас есть соответствующая автозагрузка, или * load-library или load-file в противном случае).

17 голосов
/ 06 декабря 2010
M-x load-file your-mode.el

или

M-x eval-buffer

Затем включите и выключите поведение в буфере, предположительно выполнив

M-x your-mode
M-x your-mode

Или, если ваш режим распознает префиксный аргумент

C-u 1 M-x your-mode

Примечание. При загрузке файла defvar не переопределяет существующие значения, поэтому, если вы измените значения в вызове на defvar, вам нужно будет их конкретно оценить,либо с помощью CMx , когда курсор находится в выражении devfar, либо с помощью Mx: и вводом выражения.Смотрите эту страницу для документации по оценке lisp в Emacs.

1 голос
/ 05 декабря 2010

Когда вы редактируете источник режима, вы должны убедиться, что вы оцениваете функции, которые вы изменяете - сохранения их в один файл будет недостаточно, потому что внутренне Emacs по-прежнему будет использовать старый код.1002 * Например, вы можете перейти к концу определения функции, над которым вы работаете с MCe, и оценить функцию с помощью Cx Ce.С этого момента Emacs будет использовать текущее определение.

Это также работает для определения режима, но часто вызов режима с Mx mode-name реализуется как переключатель: вы вызываете его один раз, онактивирует режим, вы вызываете его снова, он деактивирует режим.Так что вам, возможно, придется сделать Mx mode-name дважды.

...