5

Я пытаюсь создать функцию, которая вставляет текст в произвольный файл без переключения в буфер этого файла.

Я знаю, что это можно сделать с помощью echo, но есть ли способ сделать это, используя только elisp?

2 ответа2

4

Попробуйте эту функцию:

(defun append-string-to-file (string filename)
  "Appends STRING to FILENAME."
  (interactive)
  (append-to-file string nil filename))
2

Вам нужно сделать текущий буфер, чтобы сделать что-нибудь с его содержимым. Создание текущего буфера связано с интерпретатором 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))))

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .