【问题标题】:How do I make an interactive command automatically available?如何使交互式命令自动可用?
【发布时间】:2015-09-12 13:33:53
【问题描述】:

我觉得这个问题非常基础,但我一直无法弄清楚如何在 Emacs 会话中自动提供简单的交互式命令......

这是~/random/exploration/exploration.el

;;; Code:

;;;###autoload
(defun exploration ()
  "a test package"
  (interactive)
  (message "hi"))

(provide 'exploration)
;;; exploration.el ends here

这是init.el:

(add-to-list 'load-path (expand-file-name  "~/random/exploration"))

exploration 不能通过M-x 获得。我必须在它出现之前做M-: (require 'exploration)

我如何让这个命令像插件一样自动可用?我一直在研究load-pathautoload 的文档,但不知道如何实现这一点。

我想这样做,以便我可以将其他功能放在exploration.el 中,并且只有在用户第一次使用M-x exploration 后才能使用它们。这意味着需要自动加载exploration

也欢迎对我在这里所做的任何冗余发表评论,或者关于如何自行调试的提示。

【问题讨论】:

标签: emacs


【解决方案1】:

;;;###autloload 评论只是一个评论。当 Emacs 被构建(或者一个合适的智能包管理器将你的代码作为一个包安装)时,它会生成一个实际的自动加载,但除此之外,你需要自己做。

(autoload 'exploration "exploration" nil t)

在第二个参数中指定一个显式路径,您实际上不需要load-path 操作来完成您描述的内容。

另见https://www.gnu.org/software/emacs/manual/html_node/eintr/Autoload.html

【讨论】:

    【解决方案2】:

    您必须加载文件而不是将其添加到load-path,或者您需要在将文件夹添加到load-path 后将(require 'exploration) 放入您的init.el 文件中。

    【讨论】:

      【解决方案3】:

      使用autoload函数:

      (autoload 'exploration "exploration")
      

      如果不修改load-path,则需要一个绝对路径作为第二个参数。

      或者,通过 MELPA(假设您可以在那里获取)或使用 package-install-file 在本地将您的脚本安装为一个包。这将为您处理自动加载。

      【讨论】:

        猜你喜欢
        • 2012-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-11
        • 1970-01-01
        • 2018-02-08
        • 1970-01-01
        • 2013-02-21
        相关资源
        最近更新 更多