33.5 Команды вставки на уровне пользователя

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

Команда: insert-buffer from-buffer-or-name

Эта команда вставляет все доступное содержимое from-buffer-or-name (которое должно существовать) в текущий буфер после курсора. Она оставляет маркер после вставленного текста. Значение равно nil.

Команда: self-insert-command count &optional char

Эта команда вставляет символ char (последний введенный символ); она делает это count раз перед курсором и возвращает nil. Большинство печатных символов привязаны к этой команде. В обычном использовании self-insert-command является наиболее часто вызываемой функцией в Emacs, но программы редко используют ее, кроме как для установки ее в карту клавиш.

При интерактивном вызове count является числовым префиксным аргументом.

Самостоятельная вставка преобразует входной символ через translation-table-for-input. См. Перевод символов.

Эта команда вызывает auto-fill-function всякий раз, когда это не nil и вставленный символ находится в таблице auto-fill-chars (см. Автозаполнение).

Эта команда выполняет расширение аббревиатур, если включен режим Abbrev, и вставленный символ не имеет синтаксиса, составляющего слово. (См. Аббревиатуры и расширение аббревиатур, и Таблица классов синтаксиса.) Она также отвечает за вызов blink-paren-function при наличии у вставленного символа синтаксиса закрывающей скобки (см. Мигание скобок).

Последнее, что делает эта команда, — это запускает хук post-self-insert-hook. Вы можете использовать это для автоматического переформатирования текста по мере его набора, например. Функции в этом хуке могут использовать last-command-event (см. Информация из цикла команд) для доступа к только что вставленному символу.

Если какая-либо функция в этом хуке должна действовать над регионом (см. Регион), она должна убедиться, что режим Delete Selection (см. Delete Selection в Руководство GNU Emacs) не удаляет регион до вызова функций post-self-insert-hook. Способ сделать это — добавить функцию, возвращающую nil, в self-insert-uses-region-functions, специальный хук, который сообщает режиму Delete Selection, что он не должен удалять регион.

Не пытайтесь заменить стандартную реализацию self-insert-command собственной. Цикл команд редактора обрабатывает эту функцию особым образом.

Команда: newline &optional number-of-newlines interactive

Эта команда вставляет символы новой строки в текущий буфер перед курсором. Если указано number-of-newlines, вставляется столько символов новой строки. При интерактивном вызове number-of-newlines является числовым префиксным аргументом.

Эта команда вызывает self-insert-command для вставки символов новой строки, что впоследствии может привести к разрыву предыдущей строки вызовом auto-fill-function (см. Автозаполнение). Обычно auto-fill-function вставляет новую строку; таким образом, общий результат в этом случае — вставка двух новых строк в разных местах: одна в курсоре, а другая раньше в строке. newline не выполняет автозаполнение, если number-of-newlines не равно nil.

Эта команда не запускает хук post-self-insert-hook, если она вызывается интерактивно или interactive не равно nil.

Эта команда отстукивает к левому полю, если оно не равно нулю. См. Поля для заполнения.

Возвращаемое значение равно nil.

Команда: ensure-empty-lines &optional number-of-empty-lines

Эту команду можно использовать для обеспечения наличия определенного количества пустых строк перед курсором. («Пустая строка» здесь определяется как строка без символов — строка с пробельными символами не является пустой строкой.) По умолчанию она обеспечивает наличие одной пустой строки перед курсором.

Если курсор не находится в начале строки, сначала вставляется символ новой строки. Если перед курсором больше пустых строк, чем указано, количество пустых строк уменьшается. В противном случае оно увеличивается до указанного количества.

Переменная: overwrite-mode

Эта переменная контролирует, активен ли режим перезаписи. Значение должно быть overwrite-mode-textual, overwrite-mode-binary или nil. overwrite-mode-textual указывает текстовый режим перезаписи (обрабатывает символы новой строки и табуляции особо), а overwrite-mode-binary указывает бинарный режим перезаписи (обрабатывает символы новой строки и табуляции как любые другие символы).