¿Puedo ver dentro de Emacs las propiedades de un archivo que ya abrí?

9

He abierto un archivo en Emacs. Me gustaría ver información sobre ese archivo, como la fecha de creación, el tamaño, etc. dentro de Emacs. ¿Hay un atajo de teclado o algún comando de Emacs para eso? Gracias.

Romario
fuente
C-x d RETse abrirá direden el directorio del archivo visitado. No mostrará información específica sobre el archivo visitado, sino todos los archivos en el directorio.
jrm
1
¿Qué tal ?: M-x eval-expression RET (dired-other-window buffer-file-name) RET El comando cambia para "ls" que utiliza directamente es personalizable.
ley
También podría poner eso en una función y agregar una combinación de teclas. (defun file-info () (interactive) (dired-other-window buffer-file-name)) (global-set-key (kbd "C-c d") 'file-info)
jrm
1
Animaría a @jrm a publicar una respuesta similar al comentario anterior que incluye la variable let-bound dired-listing-switchespara que el OP pueda mostrar cualquier atributo de archivo que admita la versión aplicable de "ls".
ley
Gracias por todos los comentarios y esfuerzos. El sugerido por jrm funcionó de inmediato.
Romario

Respuestas:

9

Aquí hay un comando que se utiliza diredcon marcas de archivo detalladas para el lscomando. Es posible que desee personalizar esos indicadores según su sistema operativo.

(defun file-info ()
  (interactive)
  (let ((dired-listing-switches "-alh"))
    (dired-other-window buffer-file-name)))

Crea una combinación de teclas a tu gusto.

(global-set-key (kbd "C-c d") 'file-info)
jrm
fuente
1
Gracias por todos los comentarios y respuestas. Este funcionó sin ningún problema. Lo copié en ~ / .emacs y comenzó a funcionar.
Romario
11

No parece haber un comando para obtener esta información de forma interactiva, aunque puede usar dired como sugiere @jrm.

Puede obtener esta información con el siguiente código elisp:

(file-attributes (buffer-file-name))

Esto devolverá una lista como esta:

(nil 1 "lh" "users"
  (20614 64019 50040 152000)
  (20000 23 0 0)
  (20614 64555 902289 872000)
  122295 "-rw-rw-rw-"
  t (5888 2 . 43978)
  (15479 . 46724))

La primera línea le proporciona los UID "lh" y GID "usuarios".

Las siguientes tres líneas son los últimos tiempos de acceso, modificación y cambio de estado, formateados como listas. Puede convertirlos en cadenas legibles por humanos con current-time-string:

(current-time-string '(20614 64019 50040 152000))

En este caso, el valor de retorno es "Mar 23 de octubre 16:12:03 2012". Con eso, puede crear su propia función para extraer los bits que le interesen. Si solo desea ver los metadatos en el minibúfer, esto lo mostrará por usted:

(defun file-metadata ()
  (interactive)
  (let* ((fname (buffer-file-name))
         (data (file-attributes fname))
         (access (current-time-string (nth 4 data)))
         (mod (current-time-string (nth 5 data)))
         (change (current-time-string (nth 6 data)))
         (size (nth 7 data))
         (mode (nth 8 data)))
    (message
     "%s:
  Accessed: %s
  Modified: %s
  Changed: %s
  Size: %s bytes
  Mode: %s"
     fname access mod change size mode)))

Llamar a esto interactivamente produce:

/home/tws/org/hk.org:
  Accessed: Mon May 30 09:38:29 2016
  Modified: Thu Apr 21 11:59:06 2016
  Changed: Wed May 18 16:09:31 2016
  Size: 7508 bytes
  Mode: -rwxr-xr-x

Más detalles en el manual (elisp) Atributos del archivo.

Tyler
fuente
Gracias por la respuesta. Pero no sé o no pude ingresar el primer código: (atributos de archivo (nombre de archivo del búfer)) Supongo que debería ingresarse dentro del minibúfer, pero ¿cómo cambio al minibúfer? Sé que Cg se apaga, pero no sé cómo hacerlo.
Romario
Para ejecutar el código elisp en el minibúfer, ingrese M-:. Verá Eval: en el minibúfer, y luego puede escribir el código. Para defun, (defun file-metadata...puede probarlo pegándolo en el búfer de memoria virtual y con el punto dentro de la función de escritura M-C-x. Entonces puede llamar a la función con M-x file-metadata.
Tyler
Ops, sí, eso funcionó. Hola, eso es útil. Como señaló, enumera los atributos del archivo en forma nativa y con las funciones del convertidor es posible extraer información más detallada sobre el archivo. Seleccionaría esta respuesta como (muy) útil. ¡Gracias!
Romario