Posso visualizar no Emacs as propriedades de um arquivo que já abri?

9

Abri um arquivo no Emacs. Eu gostaria de ver informações sobre esse arquivo, como data de criação, tamanho etc. no Emacs. Existe um atalho de tecla ou algum comando do Emacs para isso? Obrigado.

Romario
fonte
C-x d RETserá aberto diredno diretório do arquivo visitado. Não mostrará informações especificamente sobre o arquivo visitado, mas todos os arquivos no diretório.
JRM
11
Que tal ?: M-x eval-expression RET (dired-other-window buffer-file-name) RET O comando alterna para "ls" que o dired usa é personalizável.
Lawlist
Você também pode colocar isso em uma função e adicionar uma combinação de teclas. (defun file-info () (interactive) (dired-other-window buffer-file-name)) (global-set-key (kbd "C-c d") 'file-info)
JRM
11
Gostaria de encorajar o @jrm a postar uma resposta semelhante ao comentário acima, que inclui a variável let-bound, dired-listing-switchespara que o OP possa exibir qualquer atributo de arquivo suportado pela versão aplicável de "ls".
lawlist
Obrigado por todos os comentários e esforços. O sugerido por jrm funcionou imediatamente.
Romario 31/05

Respostas:

9

Aqui está um comando que usa diredcom sinalizadores de arquivo detalhado para o lscomando. Convém personalizar esses sinalizadores, dependendo do seu sistema operacional.

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

Crie uma combinação de teclas ao seu gosto.

(global-set-key (kbd "C-c d") 'file-info)
jrm
fonte
11
Obrigado por todos os comentários e respostas. Este funcionou sem nenhum problema. Eu copiei no ~ / .emacs e ele começou a funcionar.
Romario 31/05
11

Não parece haver um comando para obter essas informações interativamente, embora você possa usar o dired como o @jrm sugere.

Você pode obter essas informações com o seguinte código elisp:

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

Isso retornará uma lista como esta:

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

A primeira linha fornece os UID "lh" e GID "usuários".

As próximas três linhas são os últimos horários de acesso, modificação e alteração de status, formatados como listas. Você pode convertê-los em seqüências legíveis por humanos com current-time-string:

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

Nesse caso, o valor de retorno é "Ter 23 de outubro às 16:12:03 de 2012". Com isso, você pode criar sua própria função para extrair os bits em que estiver interessado. Se você quiser apenas ver os metadados no minibuffer, isso será exibido para você:

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

Chamar isso interativamente produz:

/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

Mais detalhes no manual (elisp) Atributos de arquivo.

Tyler
fonte
Obrigado pela resposta. Mas não sei ou não consegui inserir o primeiro código: (atributos de arquivo (nome do arquivo-buffer)) Acho que ele deve ser inserido dentro do minibuffer, mas como alterno para o minibuffer? Eu sei Cg para desligar, mas não sei como mudar no.
Romário
Para executar o código elisp no minibuffer, insira M-:. Você verá Eval: no minibuffer e poderá digitar o código. Para o defun, (defun file-metadata...você pode tentar isso colando-o no buffer de rascunho e digitando point dentro da função M-C-x. Então você pode chamar a função com M-x file-metadata.
Tyler
Ops, sim, isso deu certo. Ei, isso é útil. Como você apontou, ele lista os atributos do arquivo na forma nativa e, com as funções do conversor, é possível extrair algumas informações mais detalhadas sobre o arquivo. Eu selecionaria esta resposta como (muito) útil. Obrigado!
Romario 31/05