Posso visualizzare in Emacs le proprietà di un file che ho già aperto?


9

Ho aperto un file in Emacs. Vorrei visualizzare informazioni su quel file come data di creazione, dimensioni, ecc. All'interno di Emacs. Esiste una scorciatoia da tastiera o un comando Emacs per questo? Grazie.


C-x d RETsi aprirà dirednella directory del file visitato. Non mostrerà informazioni specifiche sul file visitato, ma tutti i file nella directory.
jrm

1
Che ne dici ?: M-x eval-expression RET (dired-other-window buffer-file-name) RET Il comando cambia per "ls" che dired usa è personalizzabile.
elenco legislativo

Potresti anche metterlo in una funzione e aggiungere un keybinding. (defun file-info () (interactive) (dired-other-window buffer-file-name)) (global-set-key (kbd "C-c d") 'file-info)
jrm

1
Vorrei incoraggiare @jrm a pubblicare una risposta simile al commento precedente che include la variabile let-bound in dired-listing-switchesmodo che l'OP possa visualizzare qualsiasi attributo di file supportato dalla versione applicabile di "ls".
elenco delle leggi

Grazie per tutti i commenti e gli sforzi. Quello suggerito da jrm ha funzionato subito.
Romario

Risposte:


9

Ecco un comando che utilizza diredcon flag di file dettagliati per il lscomando. È possibile che si desideri personalizzare tali flag in base al proprio sistema operativo.

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

Crea una combinazione di tasti a tuo piacimento.

(global-set-key (kbd "C-c d") 'file-info)

1
Grazie per tutti i commenti e le risposte. Questo ha funzionato senza alcun problema. L'ho copiato in ~ / .emacs e ha iniziato a funzionare.
Romario

11

Non sembra esserci un comando per ottenere queste informazioni in modo interattivo, anche se puoi usare dired come suggerisce @jrm.

È possibile ottenere queste informazioni con il seguente codice elisp:

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

Questo restituirà un elenco come questo:

(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 prima riga fornisce l'UID "lh" e GID "utenti".

Le tre righe successive sono gli ultimi tempi di accesso, modifica e modifica dello stato, formattati come elenchi. Puoi convertirli in stringhe leggibili dall'uomo con current-time-string:

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

In questo caso, il valore restituito è "Mar 23 ott 16:12:03 2012". Con ciò, puoi costruire la tua funzione per estrarre qualsiasi bit che ti interessa. Se vuoi solo vedere i metadati nel minibuffer, questo lo mostrerà per te:

(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)))

Chiamare questo in modo interattivo 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

Maggiori dettagli nel manuale (elisp) Attributi dei file.


Grazie per la risposta. Ma non so o non sono riuscito a inserire il primo codice: (attributi-file (nome-file-buffer)) Immagino che debba essere inserito nel minibuffer ma come posso passare al minibuffer? So che Cg si spegne ma non so come accenderlo.
Romario

Per eseguire il codice elisp nel minibuffer, inserire M-:. Vedrai Eval: nel minibuffer e quindi puoi digitare il codice. Per il defun, (defun file-metadata...puoi provarlo incollandolo nel buffer di memoria virtuale e con il punto all'interno della funzione digitando M-C-x. Quindi è possibile chiamare la funzione con M-x file-metadata.
Tyler,

Ops, sì, ha funzionato. Ehi, questo è utile. Come hai sottolineato elenca gli attributi dei file in forma nativa e con le funzioni del convertitore è possibile estrarre alcune informazioni più dettagliate sul file. Selezionerei questa risposta come (molto) utile. Grazie!
Romario
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.