Puis-je voir dans Emacs les propriétés d'un fichier que j'ai déjà ouvert?

9

J'ai ouvert un fichier dans Emacs. Je voudrais afficher des informations sur ce fichier telles que la date de création, la taille, etc. dans Emacs. Existe-t-il un raccourci clavier ou une commande Emacs pour cela? Merci.

Romario
la source
C-x d RETs'ouvrira direddans le répertoire du fichier visité. Il n'affichera pas d'informations spécifiques sur le fichier visité, mais tous les fichiers du répertoire.
JRM
1
Comment faire?: M-x eval-expression RET (dired-other-window buffer-file-name) RET La commande change pour "ls" que dired utilise est personnalisable.
lawlist
Vous pouvez également mettre cela dans une fonction et ajouter une liaison de touches. (defun file-info () (interactive) (dired-other-window buffer-file-name)) (global-set-key (kbd "C-c d") 'file-info)
JRM
1
J'encourage @jrm à publier une réponse similaire au commentaire ci-dessus qui inclut la variable let-bound dired-listing-switchesafin que l'OP puisse afficher tout attribut de fichier pris en charge par la version applicable de "ls".
lawlist
Merci pour tous les commentaires et efforts. Celui suggéré par jrm a fonctionné juste hors de la boîte.
Romario

Réponses:

9

Voici une commande qui utilise direddes indicateurs de fichier détaillés pour la lscommande. Vous souhaiterez peut-être personnaliser ces indicateurs en fonction de votre système d'exploitation.

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

Créez une liaison de touches à votre goût.

(global-set-key (kbd "C-c d") 'file-info)
jrm
la source
1
Merci pour tous les commentaires et réponses. Celui-ci a fonctionné sans aucun problème. Je l'ai copié dans ~ / .emacs et il a commencé à fonctionner.
Romario
11

Il ne semble pas y avoir de commande pour obtenir ces informations de manière interactive, bien que vous puissiez utiliser dired comme le suggère @jrm.

Vous pouvez obtenir ces informations avec le code elisp suivant:

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

Cela renverra une liste comme celle-ci:

(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 première ligne vous donne l'UID "lh" et le GID "users".

Les trois lignes suivantes sont les dernières heures d'accès, de modification et de changement d'état, formatées sous forme de listes. Vous pouvez les convertir en chaînes lisibles par l'homme avec current-time-string:

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

Dans ce cas, la valeur de retour est "Tue Oct 23 16:12:03 2012". Avec cela, vous pouvez créer votre propre fonction pour extraire les bits qui vous intéressent. Si vous voulez simplement voir les métadonnées dans le mini-tampon, cela les affichera pour vous:

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

L'appel interactif produit:

/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

Plus de détails dans le manuel (elisp) File Attributes.

Tyler
la source
Merci pour la réponse. Mais je ne sais pas ou je n'ai pas réussi à entrer le premier code: (file-attributes (buffer-file-name)) Je suppose qu'il devrait être entré à l'intérieur du mini-tampon mais comment puis-je passer au mini-tampon? Je sais que Cg doit s'éteindre, mais je ne sais pas comment me connecter.
Romario
Pour exécuter le code elisp dans le mini-tampon, entrez M-:. Vous verrez Eval: dans le mini-tampon, puis vous pourrez taper le code. Pour le defun, (defun file-metadata...vous pouvez essayer par le coller dans le zéro tampon, et point à l' intérieur de la frappe de la fonction M-C-x. Ensuite, vous pouvez appeler la fonction avec M-x file-metadata.
Tyler
Ops, ouais ça a marché. Hé c'est utile. Comme vous l'avez souligné, il répertorie les attributs de fichier sous forme native et avec les fonctions de convertisseur, il est possible d'extraire des informations plus détaillées sur le fichier. Je choisirais cette réponse comme (très) utile. Merci!
Romario