Spec-Zone.ru › Elisp

Переключение текста между двумя буферами

Специализированные режимы иногда требуют, чтобы пользователь имел доступ к различным типам текста в одном буфере. Например, вам может потребоваться отобразить сводку текста буфера, помимо доступа к самому тексту.

Это можно реализовать с помощью нескольких буферов (синхронизируемых при редактировании пользователем), или с помощью сужения (см. Сужение). Но эти альтернативы могут иногда стать утомительными или слишком дорогостоящими, особенно если каждый тип текста требует дорогостоящих операций с глобальными буферами для корректного отображения и команд редактирования.

Emacs предоставляет другой механизм для таких режимов: вы можете быстро переключать текст буфера между двумя буферами с помощью buffer-swap-text. Эта функция очень быстрая, так как она не перемещает текст, а только изменяет внутренние структуры данных объекта буфера, чтобы он указывал на другой фрагмент текста. Используя её, вы можете представить, что группа из двух или более буферов фактически является одним виртуальным буфером, содержащим содержимое всех отдельных буферов вместе.

Функция: buffer-swap-text buffer

Эта функция меняет местами текст текущего буфера и буфера-аргумента buffer. Она сигнализирует об ошибке, если один из двух буферов является косвенным буфером (см. Косвенные буферы) или является базовым буфером косвенного буфера.

Также меняются все свойства буфера, связанные с текстом буфера: положения точки и метки, все маркеры, наложения, свойства текста, список отмены, значение enable-multibyte-characters флага (см. enable-multibyte-characters) и т. д.

Предупреждение: Если эта функция вызвана внутри save-excursion формы, текущий буфер будет изменён на buffer при выходе из формы, так как маркер, используемый save-excursion для сохранения позиции и буфера, также будет поменян местами.

Если вы используете buffer-swap-text в буфере просмотра файла, вы должны установить обработчик, чтобы сохранить исходный текст буфера, а не то, с чем он был поменян. write-region-annotate-functions подходит для этой цели. Вероятно, вам следует установить buffer-saved-size в -2 в буфере, чтобы изменения в тексте, с которым он меняется местами, не мешали автоматическому сохранению.

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/Swapping-Text.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API