33.4 Вставка текста

Вставка означает добавление нового текста в буфер. Вставляемый текст помещается в позицию point—между символом перед point и символом после point. Одни функции вставки оставляют point перед вставленным текстом, а другие оставляют его после. Мы называем первую вставку после point, а вторую — перед point.

Вставка перемещает маркеры, расположенные в позициях после точки вставки, так чтобы они оставались вместе с окружающим текстом (см. Маркеры). Когда маркер указывает на место вставки, вставка может как перемещать, так и не перемещать маркер в зависимости от типа вставки маркера (см. Типы вставки маркеров). Некоторые специальные функции, например insert-before-markers, перемещают все такие маркеры в точку после вставленного текста независимо от типа вставки маркеров.

Функции вставки сигнализируют об ошибке, если текущий буфер защищён от записи (см. Буферы только для чтения) или если они вставляют в защищённый от записи текст (см. Свойства со специальным смыслом).

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

Функции вставки преобразуют текст из однобайтового в многобайтовый для вставки в многобайтовый буфер и наоборот—если текст происходит из строки или буфера. Однако они не преобразуют однобайтовые коды символов 128–255 в многобайтовые символы, даже если текущий буфер является многобайтовым. См. Преобразование представлений текста.

Функция: insert &rest args

Эта функция вставляет строки и/или символы args в текущий буфер в позиции point, перемещая point вперёд. Иными словами, она вставляет текст перед point. Об ошибке сигнализируется, если не все args являются строками или символами. Возвращаемое значение — nil.

Функция: insert-before-markers &rest args

Эта функция вставляет строки и/или символы args в текущий буфер в позиции point, перемещая point вперёд. Об ошибке сигнализируется, если не все args являются строками или символами. Возвращаемое значение — nil.

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

Команда: insert-char character &optional count inherit

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

При интерактивном вызове эта команда запрашивает character, используя его имя в Юникоде или кодовую точку. См. Вставка текста в Руководстве по GNU Emacs.

Эта функция не преобразует однобайтовые коды символов 128–255 в многобайтовые символы, даже если текущий буфер является многобайтовым. См. Преобразование представлений текста.

Если inherit не равен nil, вставленные символы наследуют липкие текстовые свойства от двух символов до и после точки вставки. См. Липкость текстовых свойств.

Функция: insert-buffer-substring from-buffer-or-name &optional start end

Эта функция вставляет часть буфера from-buffer-or-name в текущий буфер перед point. Вставляемый текст — это область между start (включительно) и end (исключительно). (Эти аргументы по умолчанию равны началу и концу доступной части этого буфера.) Функция возвращает nil.

В этом примере форма выполняется, когда буфер ‘bar’ является текущим. Предполагается, что буфер ‘bar’ изначально пуст.

---------- Буфер: foo ----------
We hold these truths to be self-evident, that all
---------- Буфер: foo ----------

(insert-buffer-substring "foo" 1 20)
     ⇒ nil

---------- Буфер: bar ----------
We hold these truth∗
---------- Буфер: bar ----------
Функция: insert-buffer-substring-no-properties from-buffer-or-name &optional start end

Эта функция подобна insert-buffer-substring, за исключением того, что она не копирует текстовые свойства.

Функция: insert-into-buffer to-buffer &optional start end

Эта функция подобна insert-buffer-substring, но работает в обратном направлении: текст копируется из текущего буфера в to-buffer. Блок текста копируется в текущую точку в to-buffer, и point (в этом буфере) перемещается после скопированного текста. Если start/end равны nil, копируется весь текст текущего буфера.

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