Emacs 如何在elisp中进行代码漫游?

Emacs 如何在elisp中进行代码漫游?,emacs,elisp,Emacs,Elisp,我正试图打开一个文件并通读sexps。如果表单的第一个位置有setq,则遍历表单的其余部分,将setq表单中的添加到列表中 ;;; File passwords.el.gpg (setq twitter-password "Secret" github-password "Sauce") 我的目标是能够从文件中setq表单中的对构造一个alist。我是如何开始的?您可以使用流来读取文件(从字符串读取),然后执行通常的elisp黑客操作。下面的内容并不可靠,但你明白了。在包含您的文件

我正试图打开一个文件并通读sexps。如果表单的第一个位置有setq,则遍历表单的其余部分,将setq表单中的添加到列表中

;;; File passwords.el.gpg
(setq twitter-password "Secret"
      github-password "Sauce")

我的目标是能够从文件中setq表单中的对构造一个alist。我是如何开始的?

您可以使用流来读取文件(从字符串读取),然后执行通常的elisp黑客操作。下面的内容并不可靠,但你明白了。在包含您的文件的pwd.el文件中,它返回alist((github password.“Sauce”)(twitter password.“Secret”))


首先,我支持将密码存储在一个实际的列表中的建议,如果有必要,可以根据该列表设置所需的变量

除此之外,还有另一个解决方案,它试图稍微解决一些问题。
-partition
函数来自库,我强烈推荐

你其实不需要“走”代码,只要读入它并检查它的
car
是否为
setq
。表单的其余部分应该是交替的符号和字符串,因此您只需将它们按2进行划分,就得到了列表。(请注意,“对”将是正确的列表,而不是肖恩解决方案中的虚线对)

或者,如果你已经在一个列表中有了密码,下面是它的工作方式,就像这样

(defvar *passwords*
  '((twitter-password "Secret")
    (github-password "Sauce")))
然后想将变量
twitter password
设置为
“Sauce”
,依此类推。您只需在其上方绘制地图:

(mapcar #'(lambda (pair)
            (let ((name (car pair))
                  (value (cadr pair)))
              (set name value)))
        *passwords*)

首先,学习一些语法。抱歉拖拉,但我什么都不懂。我想在密码中有一个列表会更容易。el和
setq
基于列表的值。-1:我不明白你想要完成什么。是的,我担心的是,只要阅读就能解决问题。非常感谢。
(defvar *passwords*
  '((twitter-password "Secret")
    (github-password "Sauce")))
(mapcar #'(lambda (pair)
            (let ((name (car pair))
                  (value (cadr pair)))
              (set name value)))
        *passwords*)