Kann ich in Emacs die Eigenschaften einer Datei anzeigen, die ich bereits geöffnet habe?

9

Ich habe eine Datei in Emacs geöffnet. Ich möchte Informationen zu dieser Datei wie Erstellungsdatum, Größe usw. in Emacs anzeigen. Gibt es dafür eine Tastenkombination oder einen Emacs-Befehl? Vielen Dank.

Romario
quelle
C-x d RETwird diredim Verzeichnis der besuchten Datei geöffnet . Es werden keine Informationen speziell zu der besuchten Datei angezeigt, sondern alle Dateien im Verzeichnis.
jrm
1
Wie wäre es mit?: M-x eval-expression RET (dired-other-window buffer-file-name) RET Die Befehlsschalter für "ls", die dired verwendet, sind anpassbar.
Lawlist
Sie können dies auch in eine Funktion einfügen und eine Tastenkombination hinzufügen. (defun file-info () (interactive) (dired-other-window buffer-file-name)) (global-set-key (kbd "C-c d") 'file-info)
jrm
1
Ich würde @jrm ermutigen, eine Antwort ähnlich dem obigen Kommentar zu veröffentlichen, die die let-gebundene Variable enthält, dired-listing-switchesdamit das OP jedes Dateiattribut anzeigen kann, das die entsprechende Version von "ls" unterstützt.
Lawlist
Vielen Dank für alle Kommentare und Bemühungen. Der von jrm vorgeschlagene funktionierte sofort.
Romario

Antworten:

9

Hier ist ein Befehl, der diredmit ausführlichen Dateiflaggen für den lsBefehl verwendet wird. Möglicherweise möchten Sie diese Flags je nach Betriebssystem anpassen.

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

Erstellen Sie eine Tastenkombination nach Ihren Wünschen.

(global-set-key (kbd "C-c d") 'file-info)
jrm
quelle
1
Vielen Dank für alle Kommentare und Antworten. Dieser hat ohne Probleme geklappt. Ich habe es in ~ / .emacs kopiert und es fing an zu funktionieren.
Romario
11

Es scheint keinen Befehl zu geben, um diese Informationen interaktiv abzurufen, obwohl Sie dired verwenden können, wie @jrm vorschlägt.

Sie können diese Informationen mit dem folgenden Elisp-Code erhalten:

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

Dies gibt eine Liste wie folgt zurück:

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

In der ersten Zeile erhalten Sie die UID "lh" und GID "users".

Die nächsten drei Zeilen sind die letzten Zugriffs-, Änderungs- und Statusänderungszeiten, die als Listen formatiert sind. Sie können diese in von Menschen lesbare Zeichenfolgen konvertieren mit current-time-string:

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

In diesem Fall lautet der Rückgabewert "Di 23 Okt 16:12:03 2012". Damit können Sie Ihre eigene Funktion erstellen, um die Bits zu extrahieren, an denen Sie interessiert sind. Wenn Sie nur die Metadaten im Minibuffer anzeigen möchten, wird dies für Sie angezeigt:

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

Wenn Sie dies interaktiv aufrufen, erhalten Sie:

/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

Weitere Details finden Sie im Handbuch (elisp) Dateiattribute.

Tyler
quelle
Danke für die Antwort. Aber ich weiß nicht oder konnte es nicht schaffen, den ersten Code einzugeben: (Dateiattribute (Puffer-Dateiname)) Ich denke, er sollte im Minibuffer eingegeben werden, aber wie wechsle ich zum Minibuffer? Ich weiß, dass Cg abschalten muss, aber ich weiß nicht, wie ich einschalten soll.
Romario
Geben Sie ein, um Elisp-Code im Minibuffer auszuführen M-:. Sie sehen Eval: im Minibuffer, und dann können Sie den Code eingeben. Für die defun, (defun file-metadata...können Sie das ausprobieren, indem sie in die einfügen Scratch - Puffer und mit Punkt innerhalb der Funktion Typisierung M-C-x. Dann können Sie die Funktion mit aufrufen M-x file-metadata.
Tyler
Ops, ja das hat geklappt. Hey, das ist nützlich. Wie Sie bereits betont haben, werden Dateiattribute in nativer Form aufgelistet. Mit den Konverterfunktionen können detailliertere Informationen zur Datei extrahiert werden. Ich würde diese Antwort als (sehr) hilfreich auswählen. Vielen Dank!
Romario