Elisp中的属性列表

4

我对Elisp的了解有限,正在尝试弄清楚如何调用一个将属性列表作为其参数之一的函数。特定的函数是rudel-join-session来自Rudel软件包;我正在尝试设置它,以便当Emacs启动时,Rudel会自动加入会话。我不确定属性列表的工作原理,所以我尝试进行以下操作:

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

我遇到了这个错误:

类型错误:listp,obby

我猜测是因为我错误地使用了属性列表。你知道正确的语法吗?

2个回答

6
不,那是一个正确的属性列表。我注意到rudel.el中的这个片段:
(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) 有效。无论如何,这解答了我的主要问题(在世界上你怎么使用属性列表),所以我接受了。谢谢! - Michael Mrozek

1

此外,您可能还想查看rudel-session-initiation.el 的内容。

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

在同一文件中,有rudel-session-initiation-adjust-info,它通过替换实际后端对象来解析plist中的后端引用。该函数的作用是将像'obby 或 "obby" 这样的后端名替换为一个类似于('obby . #<backend object>) 的 cons-cell。内部使用了rudel-backend-get,正如您所猜测的那样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接