2014-04-21 11 views
7

używam biblioteki o nazwie DIRED-Detale i DIRED-+ szczegółów uprościć DIRED na wyświetlacz, tak, że linia tak:w Emacs, jak włączyć automatyczne ukrywanie szczegółów diredowych?

[email protected] 1 peter staff 22571 Apr 15 16:05 foo.txt 

wyświetla tak:

foo.txt 

Mam jednak inną funkcję , który umieszcza wszystkie katalogi na szczycie listy:

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

i tej drugiej funkcji zakłóca dired-szczegółami, tak, że gdy ja C-x d, aby otworzyć bufor przewodowy, początkowy wyświetlacz pokazuje pełne dodatkowe szczegóły. Tylko naciśnięcie klawisza g do revert-buffer w celu odświeżenia ekranu spowoduje ukrycie szczegółów katalogu.

Jak domyślnie włączyć ukrywanie szczegółów dired na wszystkich wyświetlaczach diredowych?

Odpowiedz

10

Po pierwsze, jeśli używasz Emacs 24.4 lub nowszy (lub wersję developerski przeszłość 24,3), a następnie nie trzeba już ani dired-details.el lub dired-details+.el. Począwszy od Emacs 24.4, szczegóły Dired aukcji są domyślnie ukryte. dired-hide-details-mode jest odpowiednim trybem.

Jeśli używasz dired+.el (Dired+), możesz łatwiej korzystać z tego nowego zachowania - oferuje wszystkie funkcje oferowane przez dired-details+.el. Użyj opcji ( w dowolnym momencie, aby przełączyć to ukrywanie. Można użyć opcji Dired +: diredp-hide-details-initially-flag, aby zmienić stan domyślny/początkowy. Zobacz także opcję diredp-hide-details-propagate-flag.

Jeśli używasz wersji Emacs, który jest przed Emacs 24,4 (więc trzeba dired-details[+].el), a następnie spróbuj załadować dired-details+.el (która załaduje dired-details.el) po zostały ocenione wyżej kod. Jeśli to nie pomoże, spróbuj także dodać to do swojego ciała defadvice, tuż po (mydired-sort): (dired-details-hide). Jeśli to nie zadziała, będziemy musieli spojrzeć nieco dalej.

Jeśli można uaktualnić wersję Emacsa a następnie będzie wkrótce będą mogli używać Emacsa 24,4 (to jest teraz w badania wstępnego), w takim przypadku powinny być w stanie po prostu załadować dired+.el i ustawić opcję diredp-hide-details-initially-flag na udziały nil.

Katalogi sortowania w pierwszej kolejności: Czy jesteś na MS Windows? Jeśli tak, rozważ użycie bibliotek dired-sort-menu.el i dired-sort-menu+.el. Pozwala to zrobić i wiele więcej.


UPDATE

Problemem jest to, że DIRED-details buforuje listę nakładek go używa, aby ukryć szczegóły. Wykonał on już swoje zadanie (z powodu dired-after-readin-hook), zanim sortowanie zostanie zakończone, i które zmieni bufor bez aktualizacji informacji o pamięci podręcznej.To rozwiąże problem (prawdopodobnie jest to bardziej elegancki sposób, ale tak się stanie):

(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

Dzięki za obszerną odpowiedź. Pracuję na OSX przy użyciu GNU Emacs. Obecna wersja GNU Emacs dla OSX wydaje się być 24.3.1. Więc podążyłem za wskazówkami powyżej (chyba) i nadal nie działa. [Tutaj] (http://pastebin.com/73ZdazyK) to sposób, w jaki wygląda w tej chwili na diakrytycznej sekcji mojego .emacs: http://pastebin.com/73ZdazyK – incandescentman

+0

Uwagi wstępne, zanim przyjrzę się: (1) Nie potrzebujesz własnego 'defcustom's - wystarczy ustawić żądaną wartość opcji, używając' customize-set-variable' (lub używając 'opcji dostosowywania Mx'). (2) Nie musisz cytować form "lambda", więc nie rób tego. (3) Spróbuj zawęzić kod do tego, co jest istotne dla problemu. Na przykład. spróbuj pozbyć się pomijania, jeśli nie ma to związku z problemem. Podobnie dla reszty: należy bisectować swój kod rekursywnie, dopóki nie uzyskasz minimalnego kodu, aby wygenerować problem. Nie zmuszaj siebie ani innych do przebrnięcia przez rzeczy nieistotne dla problemu. – Drew

+0

Spróbuj powyższego kodu (zwiąż pamięć podręczną overlays do zera). – Drew

Powiązane problemy