【问题标题】:How can I load changes of .el file at startup in Emacs?如何在 Emacs 启动时加载 .el 文件的更改?
【发布时间】:2014-07-05 07:38:14
【问题描述】:

我已经在 Windows 7 下安装了 Emacs,并希望在我的日常工作中使用它。不幸的是,Emacs 世界和其他文本编辑器世界完全不同,我在键盘上每按三个键序列就卡住了 - 它正在做一些我不希望它会做的事情。

我想发出一个紧急命令 - 当我按 ESC ESC ESC 时,它停止执行所有操作,从 minibuffer 退出,停止输入命令,取消突出显示正则表达式等。它已经做了我想要的,除了它杀死缓冲区,布局我的工作空间。所以我修改了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))))

我已经字节编译并加载了这个文件,它工作正常。但我不知道为什么它在启动时没有加载。

【问题讨论】:

  • 我是新手,但你能把这段代码放在你的.emacs.emacs.d/init.el 中,从而覆盖之前的定义吗? (Windows,它可能是c:\Users\<user-name>\AppData\Roaming\_emacs。)我尽量不要依赖编辑源文件,因为那样你可能会在某些时候担心它。 (重新安装、故障排除、在与支持人员互动时检查前沿。)
  • 据我所知,现在所有用户自定义都是通过 .emacs.d 目录中的 init.el 完成的。安全的方法是添加新功能,将新键绑定到它们或重新绑定现有的。
  • @user2244092 我认为您至少应该浏览一下Emacs manual。它彻底解释了 Emacs 的所有概念,包括 CustomizationInit File

标签: emacs


【解决方案1】:

您不能修改某些特殊的内置库,包括simple.el。 Emacs 从来没有真正从它们的源文件或字节码文件中加载这些特殊的库。它们的字节码在构建时通过称为“转储”的过程直接包含在 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,恕我直言。

【讨论】:

  • 感谢您的回答。至于建议,也许你是对的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-28
  • 2010-10-27
  • 2013-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-27
相关资源
最近更新 更多