2010-11-05 4 views
10

Как заставить Dired отображать свои файлы с помощью произвольной функции или набора столбцов? В основном я хочу, чтобы перейти от:Как настроить отображение dired's

-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 

Чтобы что-то вроде

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) 

Спасибо!


EDIT: Спасибо за ответ, Гарет, но не могли бы вы быть более многословным, пожалуйста? По-видимому, хук просто позволит мне запускать произвольный код при загрузке буфера. Dired даже не остановит загрузку до буфера :(

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

Взглянув Dired исходных текстов, то кажется, что он получает информацию из этих самых форматов я пытаюсь заменить, так что мне интересно если она жизнеспособна, чтобы изменить его таким образом, или если я в конечном итоге, переписать все.

ответ

3

режим Dired делает довольно много предположений о ls формат вывода, поэтому изменение формата сломается много вещей. Я думаю, что более целесообразным подходом является оставить только один формат и использовать текстовые свойства или оверлеи для изменения презентации.

+0

Эта стратегия реализуется в ответ https://emacs.stackexchange.com/questions/35676/customize-direds-display/35685#35685. – Tobias

2

Написать функцию, которая преобразует выходной ls в формат, который вы хотите, а затем добавить эту функцию в dired-after-readin-hook.

Отредактировано для добавления: dired-mode определяет имя файла, анализируя вывод ls, поэтому некоторые функции прошивки будут прерываться при изменении формата. Вы можете сделать (некоторые из) их работу снова, изменив directory-listing-before-filename-regexp и dired-permission-flags-regexp. Поскольку ваше изменение формата довольно радикально, вы можете переписать функции dired-move-to-filename и dired-move-to-end-of-filename.

(Это звучит жестко, но это не невозможно. Я настроить формат Dired буферов в порядке, который я описал, хотя и не так радикально, как вы предлагаете сделать.)

У вас будет много работы, если вы настаиваете на усечение файла, потому что dired-mode предполагает, что он может получить имя файла в текущей строке, вызвав

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

Это не так сильно, как то, что вы ищете, но можно настроить, как Emacs называет ls в dired-mode.

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

Я использовал его, чтобы опустить идентификатор группы файлов с возможностью -o, сохраняя некоторую горизонтальную площадь экрана.

0

Я бы использовал здесь ответ: https://stackoverflow.com/a/1796009/714357 и команду компиляции, которая будет запущена в вашем каталоге по умолчанию. Таким образом, он даст вам новый буфер, но это информация, которую вы ищете.

(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}'")) 

 Смежные вопросы

  • Нет связанных вопросов^_^