Як зберегти копію буфера у файл?


9

Я хотів би мати можливість зберегти копію (або знімок) буфера у файл. Поведінка буде подібною write-file, за винятком того, що вона не встановить буфер для відвідування цього файлу.

Щодо корисної справи, уявіть, що у вас сеанс оболонки, і ви хочете швидко зберегти все це у файл журналу. Буфер не слід перейменовувати (щоб функції, що покладаються на ім'я буфера, все ще працювали), він також не повинен відвідувати файл (щоб файл випадково не був перезаписаний і не було попередження при виході з emacs).

Я можу уявити кілька брудних способів зробити це, я опублікую його як відповідь самовідповіді, але читаючи з посібника, вся система "відвіданих файлів" є складнішою, ніж це виглядає, і я думаю, що легко скласти проект неправильне рішення. Чи існує прихований, вбудований спосіб цього досягти?

Відповіді:


18

Просто виберіть весь буфер ( C-x h) та використовуйте write-region.


3
Вам не потрібно вибирати текст буфера, якщо ви використовуєте write-regionз Lisp (наприклад, у власній команді). Просто передайте його (point-min)і (point-max)разом з ім'ям файлу.
Дрю

2
C-x h M-x write-region
Якуб Нарубський

Дякуємо за буфер вибору та фактичну M-x write-regionкоманду.
Грант Боуман

0

Брудно elispробити те, що хочу зробити:

(defun tv/copy-buffer-to-file (filename)
  (interactive "sFile to write? ")
  (let ((bufname (buffer-name)))
    (set-visited-file-name filename)
    (save-buffer)
    (set-visited-file-name nil)
    (rename-buffer bufname)))

Це виглядає набагато більше клопоту, ніж потрібно, оскільки ми маємо дбати і про відвіданий файл, і за ім'ям буфера, і ми не можемо бути впевнені, що не забули нічого іншого.

Інші рішення, що стосуються копіювання тексту буфера в новий буфер, а потім збереження та знищення цього буфера, ймовірно, працюватимуть краще, але я б тоді переймався питаннями з ефективністю великих буферів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.