Как применить изменения к файлам emacs .el

#emacs #lisp #elisp

#emacs #шепелявый #elisp #lisp

Вопрос:

Как применить изменения к файлам emacs .el?

Я сделал следующее:

  1. # locate buff-menu

/usr/share/emacs/22.1/lisp/buff-menu.el.gz
/usr/поделиться/emacs/22.1/lisp/buff-menu.elc

  1. Изменить /usr/share/emacs/22.1/lisp/buff-menu.el.gz — добавьте несколько пользовательских букв в Buffer-menu-select раздел документа.

  2. # rm /usr/share/emacs/22.1/lisp/buff-menu.elc

  3. Байтовая компиляция /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 разрешает это, и я уже использовал его. Ну, в большинстве случаев достаточно совета, но если нет, я не колеблюсь.