Я пытаюсь создать функцию, которая вставляет текст в произвольный файл без переключения в буфер этого файла.
Я знаю, что это можно сделать с помощью echo, но есть ли способ сделать это, используя только elisp?
Попробуйте эту функцию:
(defun append-string-to-file (string filename)
"Appends STRING to FILENAME."
(interactive)
(append-to-file string nil filename))
Вам нужно сделать текущий буфер, чтобы сделать что-нибудь с его содержимым. Создание текущего буфера связано с интерпретатором Lisp, оно не включает отображение буфера в окне. Основными примитивами являются set-buffer
для установки буфера для последующих операций и save-excursion
для выполнения фрагмента кода и последующего восстановления текущего буфера.
Существует несколько макросов, вызываемых with-SOMETHING
для выполнения кода с различными настройками (например, текущего буфера) и восстановления настроек при выходе из кода (по любой причине, будь то обычный выход или исключение).
(with-current-buffer "name-of-file-that's-already-open"
(goto-char 42)
(insert "hello"))
Если вы хотите открыть файл и закрыть его, когда закончите, в стандартной библиотеке нет макросов with-
. (Предупреждение: набирается прямо в браузере.)
(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))))