0

我认为标题无法清楚地描述问题。但我会尽量用更详细的词来描述。

这是我设置备份文件夹的 Emacs lisp 代码:

(setq backup-directory-alist '(("" . "/hom/test/.backups")))

但是如果我想通过以动态方式生成备份路径来完成这项工作,它会根据用户的路径生成路径。

这是我正在尝试做的事情:

(setq temp-file-folder "/home/test")
(setq backups-save-folder (concat temp-file-folder "/.backups"))
(setq backup-directory-alist '(("" . backups-save-folder)))

但它不起作用。上述代码的最终输出为:

(("" . backups-save-folder))

我认为我想要得到的应该是:

(("" . "/home/test/.backups"))

那么,生成路径动态的正确代码是什么?是什么意思。在代码中?

谢谢

4

3 回答 3

4

首先,一个点。您可以使用该format函数而不是 concat 来执行此操作(类似于printf)。这是一个例子

(let ((home_dir "/home/noufal")
      (posts_dir "posts"))
  (format "%s/%s" home_dir posts_dir))

评估为"/home/noufal/posts"

setq临时变量不是惯用的lisp 。您应该在可以将值绑定到一些临时符号的构造范围内工作let,然后完成您的工作。

在您的最后一种情况下,您'在第二个参数之前使用了 a 。这将阻止它被评估(它是“逐字引用”的同义词),因此backups-save-folder不会用值替换。如果您想这样做,请执行以下操作。

(setq backup-directory-alist (list (cons ""  backups-save-folder)))

.是一种表示cdr不是列表的列表的方式。有关详细信息,请参阅elisp 文档。

于 2012-07-30T10:55:55.423 回答
0

根据Noufal Ibrahim的回答,这是我的最终代码:

(setq backup-directory-alist (list (cons "" 
                                     (let ((backups_dir "/.backups")
                                           (temp_folder desktop-temp-file-folder))
                                       (format "%s/%s" temp_folder backups_dir)))))

有用。

谢谢

于 2012-07-31T10:34:15.827 回答
0

似乎您不需要旨在存储配对值的关联列表,而是一个简单的列表:

获取当前用户目录(getenv "HOME")

可能与另一个任意字符串“-BACKSTAGE-AREA”组合

(setq my-dir (list (concat (getenv "HOME")"-BACKSTAGE-AREA")))

获取以这种方式存储的目录名称

(汽车我的目录)

于 2012-07-30T16:25:33.723 回答