【问题标题】:Property lists in elispelisp 中的属性列表
【发布时间】:2010-08-30 21:31:39
【问题描述】:

我对 elisp 知之甚少,我正试图弄清楚如何调用一个将属性列表作为其参数之一的函数。特定功能是来自Rudel 包的rudel-join-session;我正在尝试进行设置,以便 Rudel 在 Emacs 启动时自动加入会话。我不确定属性列表是如何工作的,所以我尝试这样做:

(rudel-join-session (list :backend 'obby
                          :host "foo"
                          :port 6522
                          :username "username"
                          :color "blue"
                          :global-password ""
                          :user-password ""
                          ))

我收到了错误:

错误的类型参数:listp, obby

我认为这是由于使用了错误的属性列表。知道正确的语法是什么吗?

【问题讨论】:

    标签: emacs elisp


    【解决方案1】:

    不,这是正确的属性列表。我在 rudel.el 中注意到了这个 sn-p:

    (let* ((backend    (cdr (plist-get info :backend)))
    

    这意味着 :backend 参数应该是一个 cons 单元格。我能找到的所有文档都假定rudel-join-session 是被交互调用的,在这种情况下,后端参数是以编程方式生成的,我无法通过随意阅读代码来弄清楚它应该是什么。但我要尝试的第一件事是:

    (rudel-join-session (list :backend '(dummy . obby) ...))
    

    这样,表达式(cdr (plist-get info :backend)) 将计算为符号obby,这可能是其余代码所期望的。

    【讨论】:

    • 我在'(dummy . obby) 中收到了更神秘的错误消息,但我发现了神奇的rudel-backend-get 函数:(rudel-backend-get 'protocol 'obby) 有效。无论如何,这回答了我的主要问题(你到底是如何使用属性列表的),所以被接受了。谢谢!
    【解决方案2】:

    另外,你可能想看看rudel-session-initiation.el的内容。

    该文件包含变量rudel-configured-sessions,其文档字符串更详细地解释了“会话信息属性列表”。

    在同一个文件中,rudel-session-initiation-adjust-info 通过将 plist 中的后端引用替换为实际的后端对象来解析它们。这个函数的作用是用 ('obby . #<backend object>) 形式的 cons-cell 替换后端名称,如“obby”或“obby”。正如您所怀疑的,这在内部使用了rudel-backend-get

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多