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.