2010-11-05 24 views
10

¿Cómo hago que Dired muestre sus archivos usando una función arbitraria o un conjunto de columnas? Básicamente quiero cambiar a partir de:Cómo personalizar la visualización de 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 

Para algo así como

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) 

Gracias!


EDIT: Gracias por la respuesta, Gareth, pero podría ser más detallado, por favor? Aparentemente, el gancho me permitirá ejecutar código arbitrario cuando el buffer se carga. Dired ni siquiera va a detener la carga de la memoria intermedia :(

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

Al mirar el código fuente de dired, parece que se obtiene información de estos mismos formatos que estoy tratando de reemplazar, por lo que me pregunto si es viable para cambiar de esta manera, o si voy a llegar a tener que volver a escribir todo.

Respuesta

3

modo Dired hace bastantes suposiciones acerca de formato de salida ls, por lo que el cambio de formato se romperá muchas cosas. Creo que un enfoque más factible es dejar el formato solo, y usar propiedades textuales o superposiciones para cambiar la presentación.

+0

Esta estrategia se realiza en la respuesta https://emacs.stackexchange.com/questions/35676/customize-direds-display/35685#35685. – Tobias

2

escribir una función que transforma la salida de ls en el formato que desee y, a continuación, añadir que la función de dired-after-readin-hook.

Editado para agregar: dired-mode determina el nombre del archivo analizando la salida de ls, por lo que algunas características de dired se romperán cuando cambie el formato. Puede hacer que (algunas) funcionen nuevamente cambiando directory-listing-before-filename-regexp y dired-permission-flags-regexp. Debido a que su cambio al formato es bastante radical, es posible que prefiera reescribir las funciones dired-move-to-filename y dired-move-to-end-of-filename.

(Esto suena duro, pero no es imposible. Puedo personalizar el formato de buffers dired de la manera que he descrito, aunque no tan radical como se propone hacer.)

Usted tendrá mucho trabajo si insiste en truncar el nombre del archivo, porque dired-mode supone que se puede obtener el nombre del archivo en la línea actual llamando

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

Esto no es tan drástico como lo que está buscando, pero es posible personalizar cómo llama Emacs ls en dired-mode.

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

que lo utilizaron para omitir el ID de grupo de archivos con la opción -o, ahorrar algo horizontal espacio de la pantalla.

0

Utilizaría la respuesta aquí: https://stackoverflow.com/a/1796009/714357 y el comando 'compile' que se ejecutará en su directorio predeterminado. Por lo tanto, le dará un nuevo buffer, pero es la información que está buscando.

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