¿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.


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)

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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.