Косвенные буферы
Косвенный буфер разделяет текст с некоторым другим буфером, который называется базовым буфером косвенного буфера. В некотором смысле это аналог символической ссылки между файлами для буферов. Базовый буфер сам по себе не может быть косвенным буфером.
Текст косвенного буфера всегда идентичен тексту его базового буфера; изменения, внесённые при редактировании любого из них, немедленно видны в другом. Это включает свойства текста, а также сами символы.
Во всех остальных отношениях косвенный буфер и его базовый буфер полностью независимы. У них разные имена, независимые значения точки, независимое сужение, независимые маркеры и наложения (хотя вставка или удаление текста в любом буфере перемещает маркеры и наложения для обоих), независимые основные режимы и независимые привязки переменных, относящихся к буферу.
Косвенный буфер не может посетить файл, но его базовый буфер может. Если вы попытаетесь сохранить косвенный буфер, это фактически сохранит базовый буфер.
Уничтожение косвенного буфера не влияет на его базовый буфер. Уничтожение базового буфера фактически уничтожает косвенный буфер, так как он больше никогда не может быть текущим буфером.
- Команда: make-indirect-buffer имя-базового-буфера &опциональный clone inhibit-buffer-hooks
-
Это создаёт и возвращает косвенный буфер с именем name, базовый буфер которого — base-buffer. Аргумент base-buffer может быть активным буфером или именем (строкой) существующего буфера. Если name — имя существующего буфера, генерируется ошибка.
Если clone не
nil, то косвенный буфер изначально разделяет состояние base-buffer, такое как основной режим, вспомогательные режимы, переменные, относящиеся к буферу, и так далее. Если clone опущено илиnil, состояние косвенного буфера устанавливается в стандартное состояние для новых буферов.Если base-buffer является косвенным буфером, его базовый буфер используется в качестве основы для нового буфера. Если, кроме того, clone не
nil, начальное состояние копируется из фактического базового буфера, а не из base-buffer.См. Создание буферов для значения inhibit-buffer-hooks.
- Команда: clone-indirect-buffer newname display-flag &опциональный norecord
-
Эта функция создаёт и возвращает новый косвенный буфер, который разделяет базовый буфер текущего буфера и копирует остальные атрибуты текущего буфера. (Если текущий буфер не косвенный, он используется в качестве базового буфера.)
Если display-flag не
nil, как это всегда происходит при интерактивном вызове, это означает отображение нового буфера с помощью вызоваpop-to-buffer. Если norecord неnil, это означает, что новый буфер не помещается в начало списка буферов.
- Функция: buffer-base-buffer &опциональный buffer
Эта функция возвращает базовый буфер buffer, который по умолчанию — текущий буфер. Если buffer не косвенный, значение равно
nil. В противном случае значение — другой буфер, который никогда не является косвенным буфером.
Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Indirect-Buffers.html