Função Emacs no conjunto de arquivos

1

Existe alguma maneira implementada no Emacs para aplicar uma função em um conjunto de arquivos? (Ou, se não, você sabe de tal extensão?)

Por exemplo, se você tiver um projeto em um diretório (digamos, scripts para compilar e executar, a origem e um banco de dados XML). Você quer executar essa função em todos esses arquivos, um por um:

(defun indent-buffer ()
  "Indent the whole buffer according to indent-region-function."
  (interactive)
  (indent-region (point-min) (point-max)) )
O que complica a imagem, pelo menos até certo ponto, embora certamente não impossível, é que o Emacs deve estar no modo correto para executar essa função de maneira sensata.

A interface mais legal seria usar o Emacs como um servidor e, em seguida, enviar o comando e a lista de arquivos como argumentos.

Segundo melhor se poderia ser feito em Dired.

    
por Emanuel Berg 11.11.2012 / 11:07

1 resposta

2

No modo batch, faça um loop sobre os argumentos.

emacs --batch -l cl --eval '
  (dolist (filename command-line-args-left)
    (find-file filename)
    (indent-region (point-min) (point-max))
    (save-buffer)
    (kill-buffer))'

A partir de dired, use a macro dired-map-over-marks de dired.el ou a função dired-map-over-marks-check de dired-aux.el .

(dired-map-over-marks-check indent-buffer nil 'indent)
    
por 11.11.2012 / 21:47

Tags