如何在Emacs Lisp中压缩模式?

如何在Emacs Lisp中压缩模式?,emacs,Emacs,我认为标题不能清楚地描述这个问题。但我会尝试用更详细的词语来描述 以下是设置备份文件夹的Emacs lisp代码: (setq backup-directory-alist '(("" . "/hom/test/.backups"))) 但是如果我想通过以动态方式生成备份路径来完成这项工作,备份路径将基于用户的路径生成 以下是我试图做的: (setq temp-file-folder "/home/test") (setq backups-save-folder (concat temp-fi

我认为标题不能清楚地描述这个问题。但我会尝试用更详细的词语来描述

以下是设置备份文件夹的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"))
那么,生成动态路径的正确代码是什么?这是什么意思。在代码中


首先,我要说一点。您可以使用
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文件夹
不会替换为该值。如果你想那样做,就这样做

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

是一种表示其
cdr
不是列表的列表的方法。有关更多详细信息,请参阅

首先,一点。您可以使用
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文件夹
不会替换为该值。如果你想那样做,就这样做

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

是一种表示其
cdr
不是列表的列表的方法。有关更多详细信息,请参阅

似乎您不需要用于存储成对值的关联列表,而需要一个简单的列表:

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

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

(setq my dir(列表(concat(getenv“HOME”)“-后台区域”))

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


(car my dir)

似乎您不需要一个用于存储成对值的关联列表,而是一个简单的列表:

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

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

(setq my dir(列表(concat(getenv“HOME”)“-后台区域”))

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

(car my dir)

根据客户的回答,以下是我的最终代码:

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

谢谢

根据客户的回答,以下是我的最终代码:

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


谢谢

您也可以使用Quasikote,它在我看来更漂亮。(setq backup directory alist`((“”,backups save folder)))根据您的建议,我添加了以下代码,它可以工作:(setq backup directory alist(list(cons)”(let((backups_dir)/.backups)(temp_文件夹桌面temp文件夹)(格式“%s/%s”temp_文件夹备份_目录()()())(格式“%s/%s”temp_文件夹备份_目录())(setq备份目录列表`(“”,备份保存文件夹)))根据您的建议,我添加了以下代码,它可以正常工作:(setq备份目录列表(列表(cons“”(let((backups_dir”/.backups))(temp_文件夹桌面temp文件文件夹))(格式“%s/%s”temp_文件夹备份(u dir);”))