2010-11-05 38 views
10

Làm cách nào để hiển thị Dired các tệp của nó bằng chức năng tùy ý hoặc tập hợp các cột? Về cơ bản tôi muốn thay đổi từ:Làm thế nào để tùy chỉnh màn hình của dired

-rw-r--r-- 1 konrad konrad 3847863 Out 18 14:17 ClojureinAction.pdf 
-rw-rw-r-- 1 tamara tamara 27338341 Out 20 07:16 Halliday, Resnick, Walker - Fundamentals of Physics.pdf 
-rw-r--r-- 1 konrad konrad 3921024 Set 22 11:11 Pragmatic.Programming.Clojure.May.2009.pdf 

Để cái gì đó như

644 1-5MB ClojureinAction.pdf  PDF (5 days ago, 400pgs) 
664 10-100MB Halliday, Resnic...pdf PDF (3 days ago, 1000pgs, Tamara's) 
644 1-5MB Pragmatic.Progra...pdf PDF (1 min ago, 100 pages) 

Cảm ơn!


EDIT: Cảm ơn cho câu trả lời, Gareth, nhưng bạn có thể tiết hơn, xin vui lòng? Rõ ràng móc sẽ chỉ cho phép tôi chạy mã tùy ý khi bộ đệm tải lên. Dired thậm chí sẽ không dừng lại tải lên bộ đệm :(

(defun foo (&rest args) (unlocking-buffer (message "foo") (insert "foo\n"))) 

Liếc vào mã nguồn dired của, có vẻ như nó được thông tin từ các định dạng rất Tôi đang cố gắng để thay thế, vì vậy tôi tự hỏi nếu nó là khả thi để thay đổi nó theo cách này, hoặc nếu tôi sẽ kết thúc phải viết lại tất cả mọi thứ.

Trả lời

3

chế độ Dired làm cho khá một vài giả thuyết về định dạng đầu ra ls, vì vậy thay đổi định dạng sẽ phá vỡ nhiều thứ. Tôi nghĩ rằng một cách tiếp cận khả thi hơn là để lại định dạng một mình và sử dụng thuộc tính văn bản hoặc lớp phủ để thay đổi bản trình bày.

+0

Chiến lược này được thực hiện trong câu trả lời https://emacs.stackexchange.com/questions/35676/customize-direds-display/35685#35685. – Tobias

2

Viết một hàm biến đổi đầu ra của ls sang định dạng mà bạn muốn, và sau đó thêm chức năng đó để dired-after-readin-hook.

Chỉnh sửa để thêm: dired-mode xác định tên của tệp bằng cách phân tích cú pháp đầu ra của ls, vì vậy một số tính năng của dired sẽ bị ngắt khi bạn thay đổi định dạng. Bạn có thể thực hiện (một số) chúng hoạt động trở lại bằng cách thay đổi directory-listing-before-filename-regexpdired-permission-flags-regexp. Vì thay đổi của bạn đối với định dạng khá triệt để, bạn có thể muốn viết lại các hàm dired-move-to-filenamedired-move-to-end-of-filename.

(Điều này nghe có vẻ khó khăn nhưng nó không phải là không thể. Tôi tùy chỉnh định dạng của bộ đệm dired theo cách tôi đã mô tả, mặc dù gần như không triệt để như bạn đề xuất để làm.)

Bạn sẽ có rất nhiều công việc nếu bạn nhấn mạnh vào cắt bỏ tên tập tin, vì dired-mode giả định rằng nó có thể lấy tên tập tin trên dòng hiện tại bằng cách gọi

(buffer-substring (dired-move-to-filename) (dired-move-to-end-of-filename)) 
2

Đây không phải là gần như quyết liệt như những gì bạn đang tìm kiếm, nhưng có thể tùy chỉnh cách Emacs gọi ls trong dired-mode.

M-x customize-variable RET dired-listing-switches RET 

Tôi đã sử dụng nó để bỏ qua ID nhóm tệp bằng tùy chọn -o, tiết kiệm một số bất động sản màn hình ngang.

0

Tôi muốn sử dụng câu trả lời tại đây: https://stackoverflow.com/a/1796009/714357 và 'lệnh biên dịch sẽ chạy trong thư mục mặc định của bạn. Vì vậy, nó sẽ cung cấp cho bạn một bộ đệm mới, nhưng nó là thông tin bạn đang tìm kiếm.

(defun my/ls-mode-numbers() 
    (interactive) 
    (compile " ls -l | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/) \ 
      *2^(8-i));if(k)printf(\"%0o \",k);print}'")) 
Các vấn đề liên quan