#emacs #lisp #elisp
#emacs #шепелявый #elisp #lisp
Вопрос:
Как применить изменения к файлам emacs .el?
Я сделал следующее:
# locate buff-menu
/usr/share/emacs/22.1/lisp/buff-menu.el.gz
/usr/поделиться/emacs/22.1/lisp/buff-menu.elc
-
Изменить
/usr/share/emacs/22.1/lisp/buff-menu.el.gz
— добавьте несколько пользовательских букв вBuffer-menu-select
раздел документа. -
# rm /usr/share/emacs/22.1/lisp/buff-menu.elc
- Байтовая компиляция
/usr/share/emacs/22.1/lisp/buff-menu.el.gz
Запустите emacs и просмотрите старое описание для Buffer-menu-select
Комментарии:
1. вы уверены, что хотите изменить установленные в вашей системе библиотеки? эти изменения могут быть уничтожены будущим обновлением системы.
2. jtahlborn: попытка может быть разной, но, тем не менее, вопрос остается.
3. Вы уверены, что это ваша единственная копия buff-menu?
locate
может устареть, и то, что вы описываете, должно привести к запуску вашего измененного кода buff-menu.4. Что
M-x locate-library
говорит вам внутри Emacs? Вы также должны видеть в*Messages*
буфере, из которого загружается библиотека, когда вы ее загружаете.5. или
find-library
может привести вас туда напрямую, если вам действительно нужно отредактировать файл (но опять же, вы почти наверняка этого не сделаете).
Ответ №1:
Нам было бы легче ответить вам, если бы вы сказали нам, что именно вы хотите сделать. Дело в том, что правильный способ настройки Emacs — это никогда не изменять .el в системных библиотеках Emacs.
-
чтобы изменить defun, вы можете:
- воспользуйтесь советом (посмотрите документацию
defadvice
) -
используйте новый, который вы будете оценивать в
defun
eval-after-load
(eval-after-load 'buff-menu '(defun Buffer-menu-mark () "do nothing" (interactive)))
- воспользуйтесь советом (посмотрите документацию
-
чтобы добавить привязку ключа, вы можете снова использовать
eval-after-load
:(eval-after-load 'buff-menu '(define-key Buffer-menu-mode-map "M" 'Buffer-menu-mark))
Комментарии:
1. Я хочу изменить способ компоновки окон. При выборе 2 или более буферов в
*Buffer List*
окне, используяm
затем вводv
, у меня есть все отмеченные буферы с горизонтальным разделителем. Но мне нужны вертикальные разделители или матрица окон.2. После просмотра исходного кода вам нужно переопределить Buffer-menu-select, поэтому используйте вторую форму, которую я дал (совет кажется слабым в этом примере). В you .emacs добавьте: (eval-after-load ‘buff-menu'(defun Buffer-menu-select () ……)) вы «просто» должны заменить их … модифицированной версией
3. Спасибо, что предоставили мне правильный и распространенный способ расширения и настройки Emacs. Я не возражаю, что это обычное дело — полностью переписать функцию по умолчанию.
4. Обычно я не знаю, но elisp разрешает это, и я уже использовал его. Ну, в большинстве случаев достаточно совета, но если нет, я не колеблюсь.