2014-04-21 19 views
7

tôi sử dụng một thư viện gọi dired-chi tiết và dired-chi tiết + để đơn giản hóa hiển thị dired, chẳng hạn rằng một dòng như thế này:trong Emacs, làm thế nào để kích hoạt tự động ẩn các chi tiết dired?

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

hiển thị như thế này:

foo.txt 

Tuy nhiên, tôi có chức năng khác , đặt tất cả các thư mục ở đầu danh sách:

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

và chức năng thứ hai này cản trở các chi tiết được hướng dẫn, chẳng hạn như khi tôi C-x d để mở bộ đệm đệm, màn hình ban đầu hiển thị đầy đủ chi tiết không liên quan. Chỉ bằng cách nhấn g đến revert-buffer để làm mới màn hình, chi tiết thư mục bị ẩn.

Làm cách nào để bật ẩn chi tiết được chỉ định theo mặc định trong tất cả các màn hình được hướng dẫn?

Trả lời

10

Thứ nhất, nếu bạn sử dụng Emacs 24,4 hoặc mới hơn (hoặc một phiên bản Phát triển qua 24.3), sau đó bạn không còn cần hoặc dired-details.el hoặc dired-details+.el. Bắt đầu với Emacs 24.4, chi tiết danh sách bị bỏ qua được ẩn theo mặc định. dired-hide-details-mode là chế độ có liên quan.

Nếu bạn sử dụng dired+.el (Dired+) thì bạn có thể dễ dàng tận dụng hành vi mới này - nó cung cấp cho bạn tất cả các tính năng được cung cấp bởi dired-details+.el. Sử dụng ( bất kỳ lúc nào để chuyển đổi ẩn này. Bạn có thể sử dụng tùy chọn Dired + diredp-hide-details-initially-flag để thay đổi trạng thái ban đầu/mặc định. Xem thêm tùy chọn diredp-hide-details-propagate-flag.

Nếu bạn sử dụng một phiên bản Emacs đó là trước khi Emacs 24,4 (vì vậy bạn cần dired-details[+].el) sau đó thử tải dired-details+.el (mà sẽ được tải dired-details.el) sau bạn đã đánh giá mã của bạn ở trên. Nếu cách đó không hiệu quả, hãy thử thêm số này vào cơ thể defadvice của bạn, ngay sau (mydired-sort): (dired-details-hide). Nếu điều đó không làm việc thì chúng ta sẽ cần phải nhìn xa hơn một chút.

Nếu bạn có thể nâng cấp lên phiên bản Emacs của bạn thì bạn sẽ sớm có thể sử dụng Emacs 24,4 (đó là trong pretest bây giờ), trong trường hợp này bạn nên có thể chỉ cần tải dired+.el và thiết lập tùy chọn diredp-hide-details-initially-flag để phi nil.

Thư mục phân loại trước tiên: Bạn có đang sử dụng MS Windows không? Nếu có, hãy xem xét sử dụng thư viện dired-sort-menu.eldired-sort-menu+.el. Nó cho phép bạn làm điều đó và nhiều hơn nữa.


CẬP NHẬT

Vấn đề là dired-chi tiết lưu trữ danh sách các lớp phủ nó sử dụng để ẩn chi tiết. Nó đã thực hiện công việc của mình (vì dired-after-readin-hook), trước khi sắp xếp xong và thay đổi bộ đệm mà không cập nhật thông tin bộ nhớ cache.Điều này sẽ khắc phục sự cố (có thể có cách thanh lịch hơn nhưng điều này sẽ làm):

(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

Cảm ơn bạn đã trả lời rộng rãi. Tôi đang sử dụng OSX sử dụng GNU Emacs. Phiên bản hiện tại của GNU Emacs cho OSX có vẻ là 24.3.1. Vì vậy, tôi đã làm theo hướng dẫn của bạn ở trên (tôi nghĩ) và nó vẫn không hoạt động. [Ở đây] (http://pastebin.com/73ZdazyK) là cách phần dired của tôi .emacs nhìn vào thời điểm này: http://pastebin.com/73ZdazyK – incandescentman

+0

Nhận xét sơ bộ, trước khi tôi xem xét: (1) Bạn không cần 'defcustom's của riêng bạn - chỉ cần đặt giá trị tùy chọn bạn muốn, sử dụng' tùy chỉnh-set-biến' (hoặc sử dụng 'Mx tùy chỉnh-tùy chọn'). (2) Bạn không cần báo giá các biểu mẫu "lambda', vì vậy đừng làm điều đó. (3) Cố gắng thu hẹp mã của bạn về những gì cần thiết cho vấn đề. Ví dụ. cố gắng loại bỏ những thứ bỏ qua nếu nó không thích hợp với vấn đề. Tương tự như vậy cho phần còn lại: bisect mã của bạn đệ quy cho đến khi bạn có mã tối thiểu để sản xuất vấn đề. Đừng làm cho bản thân và những người khác lội qua những thứ không liên quan đến vấn đề. – Drew

+0

Thử mã ở trên (liên kết bộ đệm lớp phủ với nil). – Drew

Các vấn đề liên quan