我修改了我的.emacs文件,通过以下代码自动备份隐藏文件:
(defun make-backup-file-name (filename)
(expand-file-name
(concat "." (file-name-nondirectory filename) "~")
(file-name-directory filename)))
除了隐藏文件的备份从“.hidden-file.xxx”到“..no-longer-hidden-file.xxx”
之外,它的效果很好我知道零Lisp,有人可以给我一个快速的解决方法,如:
(if (filename) doesn't-start-with "."
(concat
(else do-nothing))
答案 0 :(得分:3)
您可以使用(equal (string-to-char filename) ?.)
。这会将文件名字符串转换为其第一个字符,并将其与?.
进行比较,后者是.
的字符表示法。
从它的外观来看,你想要检查(file-name-nondirectory filename)
而不仅仅是filename
,所以整个陈述将是这样的:
(if (equal (string-to-char (file-name-nondirectory filename)) ?.)
(concat (file-name-nondirectory filename) "~")
(concat "." (file-name-nondirectory filename) "~"))
所以整个函数看起来应该是这样的:
(defun make-backup-file-name (filename)
(expand-file-name
(if (equal (string-to-char (file-name-nondirectory filename)) ?.)
(concat (file-name-nondirectory filename) "~")
(concat "." (file-name-nondirectory filename) "~"))
(file-name-directory filename)))
您需要在两个分支中执行concat
,因为您总是想要附加~
。
答案 1 :(得分:2)
像这样:
(if (not (string-equal (substring "abcdefg" 0 1) "."))
(message "foo")
(message "bar")
)
由于你在emacs中,打开一个暂存缓冲区并M-x eval-buffer
你正在做什么来检查它是否具有正确的语义。 message
在调试时非常有用,因为它会将字符串打印到迷你缓冲区。
答案 2 :(得分:0)
你也可以测试(字符串匹配“\`\。”(文件名 - 非目录文件名)),但说实话我想知道为什么你认为“..foo”被认为是“不隐藏” :在我的测试中,`ls'和*都忽略了我的“..test.txt”文件。