No emacs dired, como posso executar um comando em vários arquivos marcados?

4

Eu tenho vários arquivos marcados no modo dired e gostaria de executar um comando (digamos (delete-trailing-whitespace) em cada um deles.

Existe uma maneira integrada de fazer isso, ou eu preciso escrever isso sozinho?

Basicamente, quero fazer algo como (dired-do-shell-command) , mas quero eval uma expressão do emacs em vez de um comando shell. Eu quero fazer isso dentro do emacs nos arquivos que eu marquei, então não posso usar -batch .

    
por Matt Curtis 17.08.2010 / 02:52

3 respostas

7

Eu escrevi algo para fazer o que eu quero, no caso de alguém achar útil:

Update: Atualizou esta solução com um comando de propósito geral.

(defun mrc-dired-do-command (command)
  "Run COMMAND on marked files. Any files not already open will be opened.
After this command has been run, any buffers it's modified will remain
open and unsaved."
  (interactive "CRun on marked files M-x ")
  (save-window-excursion
    (mapc (lambda (filename)
            (find-file filename)
            (call-interactively command))
          (dired-get-marked-files))))

Agora, M-x mrc-dired-do-command delete-trailing-whitespace faz o que eu quero.

Eu ficaria encantado se alguém me dissesse que eu não precisei fazer isso, e ignorei um comando óbvio como dired-do-command .

    
por 17.08.2010 / 03:08
4

AFAIK dired não tem esse recurso, mas ibuffer usa dired para marcar todos os arquivos que você deseja efetuar ( m ), visitá-los ( C-u F ), executar ibuffer ( M-x ibuffer [RET] ), marcar todos os buffers ( m ) e invocar ibuffer-do-eval ( E ), insira a expressão que você deseja avaliar em cada buffer, salve todos eles ( S ) e feche-os ( D ).

    
por 15.04.2012 / 21:36
1

Isso não é exatamente o que você pediu, mas você pode marcar buffers em ibuffer e usar 'E' (ibuffer-do-eval FORM)

Eu sei que o eshell permite que você use o elisp para scripts de shell (tipo), então você provavelmente poderia fazê-lo mais facilmente a partir do eshell.

    
por 26.08.2010 / 21:35

Tags