Como faço para o emacs inserir texto em um arquivo arbitrário?

5

Estou tentando criar uma função que insere texto em um arquivo arbitrário sem alternar para o buffer desse arquivo.

Eu sei que isso pode ser feito com echo, mas existe uma maneira de fazer isso usando apenas elisp?

    
por chd 16.06.2011 / 01:12

2 respostas

4

Experimente esta função:

(defun append-string-to-file (string filename)
  "Appends STRING to FILENAME."
  (interactive)
  (append-to-file string nil filename))
    
por 16.06.2011 / 16:26
2

Você precisa fazer um buffer atual para fazer praticamente qualquer coisa com seu conteúdo. Fazer um buffer atual está relacionado ao interpretador Lisp, não envolve a exibição do buffer em uma janela. As primitivas básicas são set-buffer para definir o buffer para operações subsequentes e save-excursion para executar um trecho de código e restaurar o buffer atual posteriormente.

Existem várias macros chamadas with-SOMETHING para executar código com configurações diferentes (como o buffer atual) e restaurar as configurações quando o código sai (por qualquer motivo, seja a saída normal ou uma exceção).

(with-current-buffer "name-of-file-that's-already-open"
  (goto-char 42)
  (insert "hello"))

Se você quiser abrir o arquivo e fechá-lo quando terminar, não haverá macro with- na biblioteca padrão. (Aviso: digitado diretamente no navegador.)

(save-excursion
  (let (buf)
    (unwind-protect
      (progn
        (setq buf (find-file-noselect "filename"))
        (when buf
          (goto-char 42)
          (insert "hello")))
      (if buf (kill-buffer buf))))
    
por 16.06.2011 / 15:46

Tags