EDIT: Я понимаю, что есть клавиатура-quit (которая обычно связана с C-g); но мне больше интересно узнать, как работать с функциями редактирования, которые поставляются с Emacs (как в этом случае). Время от времени я сталкиваюсь с такими ситуациями, когда хочу немного изменить некоторые встроенные функции.
В emacs, когда вы нажимаете ESC ESC (или ESC три раза), вы можете выйти из множества ситуаций, таких как кратковременная метка и т.д. Но я обычно ударяю ключ-побег (я на самом деле перенаправляю это на одно нажатие клавиши эвакуации) больше, чем я предполагал, и это заканчивает убийство моей конфигурации окон, что довольно раздражает. Функция key-escape-quit определена в файле simple.el:
(defun keyboard-escape-quit ()
"Exit the current \"mode\" (in a generalized sense of the word).
This command can exit an interactive command such as `query-replace',
can clear out a prefix argument or a region,
can get out of the minibuffer or other recursive edit,
cancel the use of the current buffer (for special-purpose buffers),
or go back to just one window (by deleting all but the selected window)."
(interactive)
(cond ((eq last-command 'mode-exited) nil)
((> (minibuffer-depth) 0)
(abort-recursive-edit))
(current-prefix-arg
nil)
((and transient-mark-mode mark-active)
(deactivate-mark))
((> (recursion-depth) 0)
(exit-recursive-edit))
(buffer-quit-function
(funcall buffer-quit-function))
((not (one-window-p t))
(delete-other-windows))
((string-match "^ \\*" (buffer-name (current-buffer)))
(bury-buffer))))
И я вижу, что мне не нужны строки:
((not (one-window-p t))
(delete-other-windows))
Но каков наилучший способ изменить эту функцию? Я вижу только два способа: 1) изменить simple.el 2) скопировать эту функцию в файл .emacs и внести туда изменения. Оба способа не очень хороши; в идеале я хотел бы увидеть что-то на линии defadvice, но я не вижу, как я могу это сделать в этом случае.