2014-04-21 57 views
7

我使用庫稱爲dired-細節和dired-細節+簡化dired的顯示器,例如,像這樣的線:,如何啓用自動隱藏dired細節?

[email protected] 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-細節,例如,當我C-x d打開dired緩衝區,初始顯示顯示完整的無關細節。只需按grevert-buffer刷新顯示,目錄詳細信息就會隱藏起來。

如何在所有直接顯示中默認隱藏直接詳細信息?

回答

10

首先,如果你使用Emacs 24.4或更高版本(或一個研究與開發過去版本24.3),那麼你不再需要要麼dired-details.eldired-details+.el。從Emacs 24.4開始,Dired列表詳細信息默認爲隱藏。 dired-hide-details-mode是相關模式。

如果您使用dired+.elDired+),那麼您可以更容易地利用這種新行爲 - 它爲您提供了dired-details+.el提供的所有功能。隨時使用(切換此隱藏。您可以使用Dired +選件 diredp-hide-details-initially-flag更改默認/初始狀態。另見選項diredp-hide-details-propagate-flag

如果使用Emacs的之前版本的Emacs 24.4是(所以你需要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。它可以讓你做到這一點,甚至更多。


UPDATE

的問題是,dired-細節緩存使用它來隱藏詳細覆蓋的列表。它已經完成了它的工作(因爲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))) 
+0

感謝您的廣泛答覆。我在使用GNU Emacs的OSX上。當前版本的GNU Emacs for OSX似乎是24.3.1。所以我按照上面的指示(我認爲),它仍然不起作用。 [Here](http://pastebin.com/73ZdazyK)是我的.emacs的dired部分的樣子:http://pastebin.com/73ZdazyK – incandescentman

+0

初步評論,在我看之前: ( 1)你不需要自己的'defcustom's - 只需使用'customize-set-variable'(或者使用'Mx customize-option')設置你想要的選項值。 (2)你不需要引用lambda表單,所以不要這樣做。 (3)儘量縮小你的代碼的範圍,以解決問題的根本。例如。如果與問題無關,可嘗試刪除遺漏的內容。同樣,其餘部分:遞歸地平分你的代碼,直到你有最小的代碼來產生這個問題。不要讓自己和其他人通過與問題無關的東西進行溝通。 – Drew

+0

試試上面的代碼(將覆蓋緩存綁定到nil)。 – Drew