33.8.2 Функции для удаления

kill-region — это обычная подпрограмма для удаления текста. Любая команда, вызывающая эту функцию, является командой удаления (и, вероятно, должна содержать в своем имени слово kill). kill-region помещает только что удаленный текст в новый элемент в начале кольца удаления или добавляет его к последнему элементу. Он автоматически определяет (используя last-command), была ли предыдущая команда командой удаления, и, если да, добавляет удаленный текст к последней записи.

Команды, описанные ниже, могут фильтровать удаленный текст перед сохранением его в кольцо удаления. Они вызывают filter-buffer-substring (см. Просмотр содержимого буфера) для выполнения фильтрации. По умолчанию фильтрация не производится, но основные и второстепенные режимы, а также функции хуков могут настроить фильтрацию, чтобы текст, сохраняемый в кольцо удаления, отличался от текста в буфере.

Команда: kill-region start end &optional region

Эта функция удаляет участок текста между start и end; но если необязательный аргумент region не равен nil, она игнорирует start и end и удаляет текст в текущем регионе вместо этого. Текст удаляется, но сохраняется в кольце удаления вместе с его свойствами текста. Возвращаемое значение всегда nil.

При интерактивном вызове start и end являются точкой и меткой, а region всегда не равен nil, поэтому команда всегда удаляет текст в текущем регионе.

Если буфер или текст являются только для чтения, kill-region изменяет кольцо удаления так же, затем сигнализирует об ошибке, не изменяя буфер. Это удобно, поскольку позволяет пользователю использовать серию команд удаления для копирования текста из буфера только для чтения в кольцо удаления.

Пользовательский вариант: kill-read-only-ok

Если этот вариант не равен nil, kill-region не сигнализирует об ошибке, если буфер или текст являются только для чтения. Вместо этого он просто возвращается, обновляя кольцо удаления, но не изменяя буфер.

Команда: copy-region-as-kill start end &optional region

Эта функция сохраняет участок текста между start и end в кольце удаления (включая свойства текста), но не удаляет текст из буфера. Однако, если необязательный аргумент region не равен nil, функция игнорирует start и end и сохраняет текущий регион вместо этого. Она всегда возвращает nil.

При интерактивном вызове start и end являются точкой и меткой, а region всегда не равен nil, поэтому команда всегда сохраняет текст в текущем регионе.

Команда не устанавливает this-command в kill-region, поэтому последующая команда удаления не добавляется к той же записи в кольце удаления.