Spec-Zone.ru › Elisp

Внутреннее представление буфера

Для представления буферов на C используются две структуры (см. buffer.h). Структура buffer_text содержит поля, описывающие текст буфера; структура buffer содержит другие поля. В случае косвенных буферов две или более структур buffer ссылаются на одну и ту же структуру buffer_text.

Вот некоторые поля в структуре struct buffer_text:

beg

Адрес содержимого буфера. Содержимое буфера — это линейный массив C из char, с пропуском где-то посередине.

gpt
gpt_byte

Позиции символов и байтов пропуск буфера. См. Пропуск буфера.

z
z_byte

Позиции символов и байтов конца текста буфера.

gap_size

Размер пропуска буфера. См. Пропуск буфера.

modiff
save_modiff
chars_modiff
overlay_modiff

Эти поля подсчитывают количество событий изменения буфера, выполненных в этом буфере. modiff увеличивается после каждого события изменения буфера и не изменяется в иных случаях; save_modiff содержит значение modiff в последний раз, когда буфер был посещён или сохранён; chars_modiff подсчитывает только изменения символов в буфере, игнорируя все другие типы изменений (такие как свойства текста); а overlay_modiff подсчитывает только изменения наложений буфера.

beg_unchanged
end_unchanged

Количество символов в начале и конце текста, которые, как известно, не изменились с момента последнего полного перерисовки.

unchanged_modified
overlay_unchanged_modified

Значения modiff и overlay_modiff соответственно после последнего полного перерисовки. Если их текущие значения совпадают с modiff или overlay_modiff, это означает, что beg_unchanged и end_unchanged не содержат полезной информации.

markers

Маркеры, которые ссылаются на этот буфер. Это фактически один маркер, а последующие элементы в его цепочке маркеров (связный список) — это другие маркеры, ссылающиеся на этот текст буфера.

intervals

Дерево отрезков, которое записывает свойства текста этого буфера.

Некоторые поля структуры struct buffer:

header

Заголовок типа union vectorlike_header общий для всех объектов векторного типа.

own_text

Структура struct buffer_text, обычно содержащая содержимое буфера. В косвенных буферах это поле не используется.

text

Указатель на структуру buffer_text для этого буфера. В обычном буфере это поле own_text выше. В косвенном буфере это поле own_text базового буфера.

next

Указатель на следующий буфер в цепочке всех буферов, включая удаленные. Эта цепочка используется только для выделения памяти и сбора мусора, чтобы корректно собирать удаленные буферы.

pt
pt_byte

Позиции символа и байта в буфере.

begv
begv_byte

Позиции символа и байта начала доступного диапазона текста в буфере.

zv
zv_byte

Позиции символа и байта конца доступного диапазона текста в буфере.

base_buffer

В косвенном буфере указывает на базовый буфер. В обычном буфере равно нулю.

local_flags

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

modtime

Время изменения посещаемого файла. Устанавливается при записи или чтении файла. Перед записью буфера в файл это поле сравнивается с временем изменения файла на диске, чтобы определить, не был ли файл изменен на диске. См. Изменение буфера.

auto_save_modified

Время последней автоматической сохранения буфера.

last_window_start

Позиция window-start в буфере на момент последнего отображения буфера в окне.

clip_changed

Этот флаг указывает, что сужение изменилось в буфере. См. Сужение.

prevent_redisplay_optimizations_p

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

inhibit_buffer_hooks

Этот флаг указывает, что буфер не должен запускать хуки kill-buffer-hook, kill-buffer-query-functions (см. Удаление буферов) и buffer-list-update-hook (см. Список буферов). Он устанавливается при создании буфера (см. Создание буферов) и предотвращает замедление внутренних или временных буферов, таких как те, которые создаются with-temp-buffer (см. Текущий буфер).

overlay_center

Это поле содержит текущую позицию центра наложения. См. Управление наложениями.

overlays_before
overlays_after

Эти поля содержат соответственно список наложений, которые заканчиваются или до текущего центра наложения, и список наложений, которые заканчиваются после текущего центра наложения. См. Управление наложениями. overlays_before отсортирован в порядке убывания конечной позиции, а overlays_after — в порядке возрастания начальной позиции.

name

Строка Lisp, которая называет буфер. Гарантируется, что она уникальна. См. Имена буферов. У этих и последующих полей имена в определении C-структуры заканчиваются на _, что указывает на то, что к ним не следует обращаться напрямую, а через макрос BVAR, например так:

  Lisp_Object buf_name = BVAR (buffer, name);
save_length

Длина файла, который посещает этот буфер, при последнем чтении или сохранении. Может иметь 2 специальных значения: -1 означает, что автоматическое сохранение было выключено в этом буфере, а -2 означает, что не нужно отключать автоматическое сохранение, если текст буфера сильно уменьшится. Это и другие поля, связанные с сохранением, не хранятся в структуре buffer_text, потому что косвенные буферы никогда не сохраняются.

directory

Директория для расширения относительных имен файлов. Это значение переменной default-directory буфера (см. Расширение имен файлов).

filename

Имя файла, посещенного в этом буфере, или nil. Это значение переменной buffer-file-name буфера (см. Имя файла буфера).

undo_list
backed_up
auto_save_file_name
auto_save_file_format
read_only
file_format
file_truename
invisibility_spec
display_count
display_time

Эти поля хранят значения переменных Lisp, которые автоматически являются локальными для буфера (см. Переменные, локальные для буфера), имена соответствующих переменных имеют дополнительный префикс buffer- и имеют подчеркивания, замененные дефисами. Например, undo_list хранит значение buffer-undo-list.

mark

Отметка для буфера. Отметка — это маркер, поэтому она также включена в список markers. См. Отметка.

local_var_alist

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

major_mode

Символ, обозначающий основной режим этого буфера, например, lisp-mode.

mode_name

Красивое имя основного режима, например, "Lisp".

keymap
abbrev_table
syntax_table
category_table
display_table

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

downcase_table
upcase_table
case_canon_table

Эти поля хранят таблицы преобразования для преобразования текста в нижний регистр, верхний регистр и для канонизации текста для поиска со свертыванием регистра. См. Таблицы регистра.

minor_modes

Список ассоциаций для второстепенных режимов этого буфера.

pt_marker
begv_marker
zv_marker

Эти поля используются только в косвенном буфере или в буфере, который является базой косвенного буфера. Каждый из них содержит маркер, который записывает pt, begv, и zv соответственно для этого буфера, когда буфер не является текущим.

mode_line_format
header_line_format
case_fold_search
tab_width
fill_column
left_margin
auto_fill_function
truncate_lines
word_wrap
ctl_arrow
bidi_display_reordering
bidi_paragraph_direction
selective_display
selective_display_ellipses
overwrite_mode
abbrev_mode
mark_active
enable_multibyte_characters
buffer_file_coding_system
cache_long_line_scans
point_before_scroll
left_fringe_width
right_fringe_width
fringes_outside_margins
scroll_bar_width
indicate_empty_lines
indicate_buffer_boundaries
fringe_indicator_alist
fringe_cursor_alist
scroll_up_aggressively
scroll_down_aggressively
cursor_type
cursor_in_non_selected_windows

Эти поля хранят значения переменных Lisp, которые автоматически являются локальными для буфера (см. Переменные, локальные для буфера), имена соответствующих переменных имеют подчеркивания, замененные дефисами. Например, mode_line_format хранит значение mode-line-format.

last_selected_window

Это последнее окно, которое было выбрано с этим буфером в нём, или 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/Buffer-Internals.html

Spec-Zone.ru

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