如何在Emacs中启动时加载.el文件的更改?

时间:2014-07-05 07:38:15

标签: emacs

我在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))))

我有字节编译并加载了这个文件,它运行正常。但我无法弄清楚它为什么不在启动时加载。

1 个答案:

答案 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。