Как настроить отображение по умолчанию
Как заставить 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)
Спасибо!
EDIT: Спасибо за ответ, Гарет, но могли бы вы быть более подробными, пожалуйста? По-видимому, хук просто позволит мне запускать произвольный код при загрузке буфера. Dired даже не перестанет загружать буфер: (
(defun foo (&rest args) (unlocking-buffer (message "foo") (insert "foo\n")))
![]()
Взглянув на устаревший исходный код, кажется, что он получает информацию из этих самых форматов, которые я пытаюсь заменить, поэтому я задаюсь вопросом, можно ли это изменить так, или мне придется переписать все.
Ответы
Ответ 1
Dired mode делает довольно много предположений о формате вывода ls
, поэтому изменение формата приведет к разрыву многих вещей. Я думаю, что более целесообразным подходом является оставить только один формат и использовать текстовые свойства или оверлеи для изменения презентации.
Ответ 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-mode
предполагает, что он может получить имя файла в текущей строке, вызвав
(buffer-substring (dired-move-to-filename) (dired-move-to-end-of-filename))
Ответ 3
Это не так сильно, как то, что вы ищете, но можно настроить, как Emacs вызывает ls
в dired-mode
.
M-x customize-variable RET dired-listing-switches RET
Я использовал его для того, чтобы опустить идентификатор группы файлов с опцией -o
, сохраняя некоторую горизонтальную экранную недвижимость.
Ответ 4
Я бы использовал здесь ответ: fooobar.com/info/42814/...
и команду компиляции, которая будет запущена в вашем каталоге по умолчанию. Таким образом, он предоставит вам новый буфер, но это информация, которую вы ищете.
(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}'"))