【问题标题】:in Emacs, how to enable automatic hiding of dired details?在 Emacs 中,如何启用自动隐藏详细信息?
【发布时间】:2014-04-21 23:51:54
【问题描述】:

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

-rw-r--r--@  1 peter  staff  22571 Apr 15 16:05 foo.txt

显示如下:

foo.txt

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

(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))

第二个函数会干扰 dired-details,因此当我 C-x d 打开一个 dired 缓冲区时,初始显示会显示完整的无关细节。只有按 grevert-buffer 以刷新显示,目录详细信息才会隐藏。

如何在所有 dired 显示中默认隐藏 dired 细节?

【问题讨论】:

    标签: emacs dired


    【解决方案1】:

    首先,如果您使用 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.

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


    更新

    问题在于 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)))
    

    【讨论】:

    • 感谢您的广泛回复。我在 OSX 上使用 GNU Emacs。当前用于 OSX 的 GNU Emacs 版本似乎是 24.3.1。所以我按照你上面的指示(我认为)它仍然不起作用。 Here 是我的 .emacs 的 dired 部分目前的样子:pastebin.com/73ZdazyK
    • 前言,在我看之前:(1)你不需要自己的defcustoms——只要设置你想要的选项值,使用customize-set-variable(或使用@987654351 @)。 (2) 你不需要引用lambda 表格,所以不要那样做。 (3) 尝试将代码范围缩小到对问题至关重要的部分。例如。如果与问题无关,请尝试摆脱省略的内容。其余部分也是如此:递归地平分你的代码,直到你有最少的代码来产生问题。不要让自己和他人费力地处理与问题无关的事情。
    • 试试上面的代码(把overlays缓存绑定为nil)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-18
    • 1970-01-01
    相关资源
    最近更新 更多