emacs - 提供和要求 Emacs Lisp 包子功能(如何)

标签 emacs package elisp

我写 Emacs Lisp 包已经有一段时间了。但是,我还没有找到/遇到使用 require 和提供子功能的单个示例。老实说,Emacs Lisp 手册中给出的解释绝对是可笑的。它会告诉您为什么要使用子功能,但没有说明如何使用它们。它甚至不会告诉您 require 和 provide 中的子功能参数是否应该是路径或文件名中文件的符号。因此,我的问题...

有人可以提供一个非常简单的子功能如何工作的例子吗?
具体来说:

  • 你能给我一个提供一个功能和两个子功能的包的简单例子吗?
  • 你能给我举个例子,它需要上述特性,并且只有 1
  • 中的包提供的两个子特性之一。

    非常感谢提前,

    巴勃罗

    最佳答案

    免责声明:在我阅读这个问题之前,我什至不知道子功能是一回事。

    子功能似乎用于复杂功能,这些功能可能在一个平台(例如 Linux)上具有某些功能,但在另一个平台(例如 Windows)或某些类似情况下没有。该功能的用户可以测试子功能并在它不存在时执行变通方法。

    至于使用子功能,您只需添加一个列表参数,如 (provide 'foo '(bar baz)) ,但更有可能使用一些以编程方式生成的列表,例如

    (setq foo--subfeatures ())
    (when (barp) 
      (setq foo--subfeatures (cons 'bar foo--subfeatures))) 
    (provide 'foo foo--subfeatures)
    

    然后用 (featurep 'foo 'bar) 测试确保foobar子功能。子功能只是符号。带有子功能的功能的内置示例是 make-network-process ,它是用 C 实现的,但即使你不熟悉 C,子功能机制也应该很清楚。lisp 中的另一个例子是 providefiles.el和相应的 featureptramp-compat.el .

    看起来不像 require完全关心子功能;它的工作是加载一个未加载的功能,并且一个功能加载了所有子功能。子功能在 subfeatures 中实现为列表特征符号的属性,例如(get 'foo 'subfeatures) -> (bar baz) .它看起来像 provide覆盖该属性,因此只有最后一次调用 provide是相关的。

    关于emacs - 提供和要求 Emacs Lisp 包子功能(如何),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45009575/

    相关文章:

    emacs - Ansi彩色文件编辑

    emacs - 字节编译 emacs lisp 文件 : Error: Cannot open load file

    node.js - npm cache clean 中 -f(强制?)参数的行为是什么?

    r - 有没有一种方法可以使用emacs安装R软件包?

    emacs - ido-completing-read - 历史列表应该如何表现?

    emacs - 如何为特定目录下的所有文件设置 ispell 字典

    Emacs大写锁定小模式?

    python - 如何只导入包中没有 exec __init__.py 的子模块

    ruby-on-rails-3 - Emacs Ruby 自动完成几乎可以工作

    emacs - 删除窗口的更智能替代方案?