在Emacs中,如何启用自动隐藏dired细节?

inc*_*man 8 emacs dired

我使用一个名为dired-details和dired-details +的库来简化dired的显示,这样就像这样一行:

-rw-r--r--@  1 peter  staff  22571 Apr 15 16:05 foo.txt
Run Code Online (Sandbox Code Playgroud)

显示如下:

foo.txt
Run Code Online (Sandbox Code Playgroud)

但是,我有另一个函数,它将所有目录放在列表的顶部:

(defun mydired-sort ()
"Sort dired listings with directories first."
(save-excursion
 (let (buffer-read-only)
  (forward-line 2) ;; beyond dir. header
  (sort-regexp-fields t "^.*$" "[ ]*." (point) (point-max)))
(set-buffer-modified-p nil)))

(defadvice dired-readin
(after dired-after-updating-hook first () activate)
 "Sort dired listings with directories first before adding marks."
 (mydired-sort))
Run Code Online (Sandbox Code Playgroud)

并且这第二个函数干扰了dired-details,这样当我C-x d打开一个dired缓冲区时,初始显示会显示完整的无关细节.只需按下grevert-buffer刷新显示,目录详细信息就会隐藏.

如何在所有直接显示中默认启用隐藏详细信息?

Dre*_*rew 11

首先,如果你使用Emacs 24.4或更高版本(或一个研究与开发过去版本24.3),那么你就不再需要任何dired-details.eldired-details+.el.从Emacs 24.4开始,默认情况下隐藏了Dired列表详细信息. dired-hide-details-mode是相关模式.

如果您使用dired + .el(Dired +),那么您可以更轻松地利用这种新行为 - 它为您提供了所提供的所有功能dired-details+.el.(随时使用以切换此隐藏.您可以使用Dired +选项 diredp-hide-details-initially-flag更改默认/初始状态.另见选项diredp-hide-details-propagate-flag.

如果您使用Emacs 24.4之前的Emacs版本(所以您需要dired-details[+].el),那么评估上面的代码之后尝试加载dired-details+.el(将加载dired-details.el).如果这没有帮助,那么请尝试将此添加到您的身体,就在:.如果这不起作用,那么我们需要进一步了解.defadvice(mydired-sort)(dired-details-hide)

如果您可以升级您的Emacs版本,那么您很快就可以使用Emacs 24.4(它现在处于预测试状态),在这种情况下,您应该只能加载dired+.el并将选项diredp-hide-details-initially-flag设置为非nil.

Wrt首先排序目录:你是MS Windows吗?如果是这样,请考虑使用库dired-sort-menu.eldired-sort-menu+.el.它可以让你做到这一点以及更多.


UPDATE

问题是dired-details缓存了用于隐藏细节的叠加层列表.它已经完成了它的工作(因为dired-after-readin-hook),在你的排序完成之前,它改变了缓冲区而没有更新缓存信息.这将解决问题(可能有更优雅的方式,但这样做):

(defadvice dired-readin
    (after dired-after-updating-hook first () activate)
  "Sort dired listings with directories first before adding marks."
  (mydired-sort)
  (let ((dired-details-internal-overlay-list  ())) (dired-details-hide)))
Run Code Online (Sandbox Code Playgroud)