代码之家  ›  专栏  ›  技术社区  ›  Michael Mrozek

elisp中的属性列表

  •  4
  • Michael Mrozek  · 技术社区  · 15 年前

    我知道一点elisp,我想知道如何调用一个以属性列表为参数的函数。具体功能是 rudel-join-session Rudel 包;我正在尝试设置它,以便Rudel在Emacs启动时自动加入会话。我不确定属性列表是如何工作的,所以我尝试这样做:

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

    我得到一个错误:

    类型参数错误:listp,obby

    2 回复  |  直到 15 年前
        1
  •  6
  •   Sean    15 年前

    不,那是正确的财产清单。我注意到这个片段鲁德尔:

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

    这意味着 :backend rudel-join-session 是以交互方式调用的,在这种情况下,backend参数是以编程方式生成的,我不能从对代码的随意阅读中看出它应该是什么。但我要做的第一件事是:

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

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

        2
  •  1
  •   user458685    15 年前

    此外,您还可以查看 rudel-session-initiation.el .

    rudel-configured-sessions 其中的文档字符串更详细地解释了“会话信息属性列表”。

    在同一个文件中,有 rudel-session-initiation-adjust-info 它通过将plists中的后端引用替换为实际的后端对象来解析它们。此函数所做的是用以下形式的cons单元格替换“obby”或“obby”之类的后端名称 ('obby . #<backend object>) . 在内部,它使用 rudel-backend-get 正如你所怀疑的。