gpt4 book ai didi

file - Emacs 口齿不清 : Concise way to get `directory-files` without "." and ".."?

转载 作者:行者123 更新时间:2023-12-03 23:23:18 26 4
gpt4 key购买 nike

函数directory-files返回 ...条目也是如此。虽然在某种意义上确实如此,只有这样函数才能返回所有现有条目,但我还没有看到包含这些条目的用途。另一方面,每次使用 directory-files我也写类似的东西

(unless (string-match-p "^\\.\\.?$" ... 

或者为了更好的效率
(unless (or (string= "." entry)
(string= ".." entry))
..)

特别是在交互式使用( M-: )中,额外的代码是不可取的。

是否有一些预定义的函数可以有效地仅返回目录的实际子条目?

最佳答案

您可以将其作为原始函数调用的一部分来执行。

(directory-files DIRECTORY &optional FULL MATCH NOSORT)

If MATCH is non-nil, mention only file names that match the regexp MATCH.

所以:

(directory-files (expand-file-name "~/") nil "^\\([^.]\\|\\.[^.]\\|\\.\\..\\)")

或者:

(defun my-directory-files (directory &optional full nosort)
"Like `directory-files' with MATCH hard-coded to exclude \".\" and \"..\"."
(directory-files directory full "^\\([^.]\\|\\.[^.]\\|\\.\\..\\)" nosort))

虽然更类似于您自己的方法可能会产生更有效的包装器,真的。

(defun my-directory-files (directory &optional full match nosort)
"Like `directory-files', but excluding \".\" and \"..\"."
(delete "." (delete ".." (directory-files directory full match nosort))))

尽管这对列表进行了两次处理,并且我们知道我们希望排除的每个名称只有一个实例(并且它们很有可能首先出现),因此如果您是这样的事情,则可能是一个很好的解决方案希望经常处理大型目录:

(defun my-directory-files (directory &optional full match nosort)
"Like `directory-files', but excluding \".\" and \"..\"."
(let* ((files (cons nil (directory-files directory full match nosort)))
(parent files)
(current (cdr files))
(exclude (list "." ".."))
(file nil))
(while (and current exclude)
(setq file (car current))
(if (not (member file exclude))
(setq parent current)
(setcdr parent (cdr current))
(setq exclude (delete file exclude)))
(setq current (cdr current)))
(cdr files)))

关于file - Emacs 口齿不清 : Concise way to get `directory-files` without "." and ".."?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17164767/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com