Списки недвижимости в elisp - PullRequest
4 голосов
/ 31 августа 2010

Я знаю немного elisp, и я пытаюсь выяснить, как вызвать функцию, которая принимает список свойств в качестве одного из аргументов. Особой функцией является 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

Я предполагаю, что это из-за неправильного использования списков свойств. Есть идеи, каков правильный синтаксис?

Ответы [ 2 ]

6 голосов
/ 31 августа 2010

Нет, это правильный список свойств.Я заметил этот фрагмент в rudel.el:

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

Это означает, что параметр :backend, как ожидается, будет cons-ячейкой.Вся документация, которую я могу найти, предполагает, что rudel-join-session вызывается в интерактивном режиме, и в этом случае параметр backend генерируется программно, и я не могу понять из случайного прочтения кода, каким он должен быть.Но первое, что я попробую, это:

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

Таким образом, выражение (cdr (plist-get info :backend)) будет преобразовано в символ obby, что может быть тем, что ожидает остальная часть кода.

1 голос
/ 26 сентября 2010

Кроме того, вы можете посмотреть содержимое rudel-session-initiation.el.

Этот файл содержит переменную rudel-configured-sessions, строка документации которой более подробно объясняет «списки свойств информации сеанса».

В том же файле есть rudel-session-initiation-adjust-info, который разрешает ссылки на серверв списках, заменяя их фактическими объектами бэкэнда.Эта функция заменяет имя бэкэнда, например, «obby» или «obby», на консольную ячейку вида ('obby . #<backend object>).Внутри это использует rudel-backend-get, как вы и предполагали.

...