我在Windows 7下安装了Emacs,并希望在日常工作中使用它。不幸的是,Emacs世界和其他文本编辑器世界是完全不同的,我在卡在键盘上的每三个键序列上都被卡住了 - 它正在做一些我不希望它会做的事情。
我想做一个恐慌命令 - 当我按下ESC ESC时它停止做所有事情,从迷你缓冲器退出,停止输入命令,取消强光正则表达等等。它已经做了我想要的,除了它杀死缓冲区,布局我的工作区。所以我修改了simple.el文件中的keyboard-escape-quit
函数(由C-h k ESC ESC ESC找到)
(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)
; Stop highlighting regexp
(unhighlight-regexp)
(cond ((eq last-command 'mode-exited) nil)
((region-active-p)
(deactivate-mark))
((> (minibuffer-depth) 0)
(abort-recursive-edit))
(current-prefix-arg
nil)
((> (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))))
我有字节编译并加载了这个文件,它运行正常。但我无法弄清楚它为什么不在启动时加载。
答案 0 :(得分:2)
您无法修改某些特殊的内置库,包括simple.el
。 Emacs从未实际从源代码或字节代码文件加载这些特殊库。它们的字节代码在构建时通过一个名为“dumping”的进程直接包含在Emacs可执行文件中。 Emacs从它自己的二进制文件中加载这些库。
通常,不应该修改任何内置库。更新Emacs时,您的风险破坏和自定义将丢失。
相反,请执行您应该执行的操作:将自定义函数添加到init.el
。
因此,不是修改内置的keyboard-escape-quit
,而是创建自己的函数,例如: my-emergency-quit
中的init.el
,并将其绑定到全局密钥,例如C-c q
,
(global-set-key (kbd "C-c q") #'my-emergency-quit)
建议的最后一句话:我认为这种恐慌命令没有任何好处。 Emacs的第一条规则是:不要惊慌失措。如果你被困住了,不要试图戒掉并杀死一切。相反,试着找出你被困的原因,以及如何通过正常手段“解除困难”。你可以通过这种方式更好地学习Emacs,imho。