我认为标题无法清楚地描述问题。但我会尝试更详细地描述一下。
以下是我设置备份文件夹的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"))
那么,生成路径动态的正确代码是什么?是什么意思。在代码?
由于
答案 0 :(得分: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
构造的范围内工作,该构造可以将值绑定到几个临时符号,然后完成您的工作。
在您的上一个案例中,您在第二个参数之前使用了'
。这将阻止它被评估(它与“引用字面”同义),因此backups-save-folder
不会被值替换。如果你想这样做,做这样的事情。
(setq backup-directory-alist (list (cons "" backups-save-folder)))
.
是表示cdr
不是列表的列表的一种方式。有关详细信息,请参阅elisp documentation。
答案 1 :(得分:0)
似乎您不需要用于存储配对值的关联列表,而是一个简单的列表:
获取当前用户目录(getenv“HOME”)
可能与另一个任意字符串“-BACKSTAGE-AREA”结合使用
(setq my-dir(list(concat(getenv“HOME”)“ - BACKSTAGE-AREA”)))
使用
获取以此方式存储的目录名称(car my-dir)
答案 2 :(得分: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)))))
有效。
由于