Experimente esta função:
(defun append-string-to-file (string filename)
"Appends STRING to FILENAME."
(interactive)
(append-to-file string nil filename))
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?
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))))