РЕДАКТИРОВАТЬ: Я понимаю, что есть клавиатурный выход (который обычно привязан к C-g); но мне больше интересно узнать, как можно работать с функциями редактирования, которые поставляются с Emacs (как в этом случае). Время от времени я сталкиваюсь с подобными ситуациями, когда хочу немного изменить некоторые встроенные функции.
В emacs, когда вы нажимаете M-ESC ESC (или ESC три раза), вы можете выйти из множества ситуаций, таких как переходная метка и т. Д. Но я обычно нажимаю клавишу выхода (я фактически переназначаю это на одно нажатие клавиша выхода) больше, чем я предполагал, и это в конечном итоге убивает мою конфигурацию Windows, что довольно раздражает. Функция keyboard-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, но я не понимаю, как я могу это сделать в этом случае.