[英]Lisp if-statement - emacs initialization file “.emacs”
我修改了.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))
您可以使用(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
,因为您总是想附加~
。
像这样:
(if (not (string-equal (substring "abcdefg" 0 1) "."))
(message "foo")
(message "bar")
)
由于您处于emacs中,因此请打开暂存缓冲区和Mx eval-buffer
,以检查其是否具有正确的语义。 message
在调试中很有用,因为它将字符串打印到迷你缓冲区。
您还可以测试(字符串匹配“ \\`\\。”(文件名-非目录文件名)),但是说实话我不知道为什么您认为“ ..foo”被认为是“未隐藏”:测试中,“ ls”和*都忽略了我的“ ..test.txt”文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.