Как настроить отображение Dired - PullRequest
10 голосов
/ 05 ноября 2010

Как мне заставить 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

На что-то вроде

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)

Спасибо!


РЕДАКТИРОВАТЬ: Спасибо за ответ, Гарет, но не могли бы вы быть более многословным, пожалуйста? Очевидно, ловушка позволит мне запустить произвольный код при загрузке буфера. Dired даже не перестанет загружать буфер: (

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

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

Ответы [ 4 ]

3 голосов
/ 06 ноября 2010

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

3 голосов
/ 01 февраля 2012

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

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

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

2 голосов
/ 06 ноября 2010

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

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

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

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

(buffer-substring (dired-move-to-filename) (dired-move-to-end-of-filename))
0 голосов
/ 28 января 2014

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

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