33.19.10 Почему свойства текста не являются интервалами

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

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

Предположим, вы берете буфер с одним интервалом и удаляете часть текста. Оставшийся текст в буфере — это один интервал, а копия в буфере отмены (и в списке отмены) становится отдельным интервалом. Затем, если вы вставляете удаленный текст, вы получаете два интервала с одинаковыми свойствами. Таким образом, редактирование не сохраняет различие между одним и двумя интервалами.

Предположим, мы пытаемся решить эту проблему, объединяя два интервала при вставке текста. Это работает нормально, если буфер изначально был одним интервалом. Но предположим, вместо этого у нас есть два соседних интервала с одинаковыми свойствами, и мы удаляем текст одного интервала, а затем вставляем его обратно. Та же функция объединения интервалов, которая спасает в другом случае, вызывает проблемы в этом: после вставки у нас остается только один интервал. Опять же, редактирование не сохраняет различие между одним и двумя.

Вставка текста на границе между интервалами также поднимает вопросы, на которые нет удовлетворительного ответа.

Однако легко настроить редактирование так, чтобы оно вело себя последовательно в отношении вопросов типа: «Каковы свойства текста в этой позиции буфера или строки?» Поэтому мы решили, что это единственные вопросы, которые имеют смысл; мы не реализовали запросы о том, где начинаются или заканчиваются интервалы.

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

Emacs также предоставляет явные интервалы в качестве функции представления; см. Наложения.