Emacsで既に開いているファイルのプロパティを表示できますか?


9

Emacsでファイルを開きました。作成日やサイズなど、そのファイルに関する情報をEmacs内で表示したいと思います。そのための重要なショートカットやEmacsコマンドはありますか?ありがとう。


C-x d RETdired訪問したファイルのディレクトリで開きます。アクセスしたファイルに関する情報は表示されませんが、ディレクトリ内のすべてのファイルが表示されます。
jrm 2016年

1
方法は?: M-x eval-expression RET (dired-other-window buffer-file-name) RET dirsが使用する「ls」のコマンドスイッチはカスタマイズ可能です。
2016年

それを関数に入れて、キーバインドを追加することもできます。(defun file-info () (interactive) (dired-other-window buffer-file-name)) (global-set-key (kbd "C-c d") 'file-info)
jrm 2016年

1
dired-listing-switchesOPが「ls」の適切なバージョンがサポートするファイル属性を表示できるように、@ jrmにlet-bound変数を含む上記のコメントと同様の回答を投稿することをお勧めします。
2016年

すべてのコメントと努力をありがとう。jrmによって提案されたものは、箱から出してすぐに動作しました。
ロマリオ

回答:


9

以下は、コマンドのdired詳細ファイルフラグと共に使用するlsコマンドです。オペレーティングシステムによっては、これらのフラグをカスタマイズすることもできます。

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

好みに合わせてキーバインドを作成します。

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

1
すべてのコメントと回答をありがとう。これは問題なく動きました。私はそれを〜/ .emacsにコピーし、動作し始めました。
ロマリオ

11

この情報をインタラクティブに取得するコマンドはないようですが、@ jrmが示唆するようにdiredを使用できます。

この情報は、次のelispコードで取得できます。

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

これは次のようなリストを返します:

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

最初の行には、UID "lh"とGID "users"が表示されます。

次の3行は、最後のアクセス、変更、ステータス変更の時間で、リスト形式です。あなたはそれらを人間が読める文字列に変換することができますcurrent-time-string

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

この場合、戻り値は「Tue Oct 23 16:12:03 2012」です。これで、興味のあるビットを抽出する独自の関数を作成できます。ミニバッファーでメタデータを表示するだけの場合は、次のように表示されます。

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

これをインタラクティブに呼び出すと、以下が生成されます。

/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

詳細は、マニュアルの(elisp)ファイル属性を参照してください


答えてくれてありがとう。しかし、私は知らないか、最初のコードを入力できませんでした:(file-attributes(buffer-file-name))ミニバッファー内に入力する必要があると思いますが、どうすればミニバッファーに切り替えることができますか?私はCgをオフに切り替える方法を知っていますが、どのように切り替えるかわかりません
Romario

ミニバッファでelispコードを実行するには、と入力しM-:ます。Eval: ミニバッファーに表示され、コードを入力できます。defunの(defun file-metadata...場合は、スクラッチバッファーに貼り付けて、関数型付けの中にポイントを指定して、それを試すことができますM-C-x。その後、で関数を呼び出すことができますM-x file-metadata
タイラー

Ops、そうだね。ちょっと便利ですね。あなたが指摘したように、それはネイティブな形式でファイル属性をリストし、コンバーター関数でファイルに関するいくつかのより詳細な情報を抽出することが可能です。私はこの答えを(非常に)役立つと選択します。ありがとう!
ロマリオ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.