Spec-Zone.ru › Elisp

Сужение

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

Сужение задаётся двумя позициями в буфере, которые становятся началом и концом доступной части. Для большинства команд и примитивов редактирования эти позиции заменяют значения начала и конца буфера. Пока сужение активно, текст за пределами доступной части не отображается, а точка не может перемещаться за пределы доступной части. Обратите внимание, что сужение не изменяет фактические позиции в буфере (см. Точку); оно только определяет, какие позиции считаются доступной частью буфера. Большинство функций отказываются от работы с текстом, находящимся за пределами доступной части.

Команды сохранения буферов не затрагиваются сужением; они сохраняют весь буфер независимо от любого сужения.

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

Команда: narrow-to-region start end

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

В интерактивном вызове start и end устанавливаются в границы текущей области (точка и метка, с наименьшей вначале).

Команда: narrow-to-page &optional move-count

Эта функция устанавливает доступную часть текущего буфера, чтобы она включала только текущую страницу. Необязательный первый аргумент move-count non-nil означает перемещение вперёд или назад на move-count страниц, а затем сужение до одной страницы. Переменная page-delimiter определяет, где начинаются и заканчиваются страницы (см. Стандартные регулярные выражения).

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

Команда: widen

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

(narrow-to-region 1 (1+ (buffer-size)))
Функция: buffer-narrowed-p

Эта функция возвращает не-nil если буфер сужен, и nil в противном случае.

Специальная форма: save-restriction body…

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

Значение, возвращаемое save-restriction, это значение, возвращаемое последней формой в body, или nil если форм body не было.

Внимание: легко допустить ошибку при использовании конструкции save-restriction. Прочитайте всё описание здесь перед тем, как попробовать.

Если body изменяет текущий буфер, save-restriction всё равно восстанавливает ограничения исходного буфера (буфера, ограничения которого были сохранены), но не восстанавливает идентичность текущего буфера.

save-restriction не восстанавливает точку; используйте save-excursion для этого. Если вы используете одновременно save-restriction и save-excursion, save-excursion должно стоять первым (снаружи). В противном случае старое значение точки будет восстановлено с временным сужением, всё ещё действующим. Если старое значение точки было за пределами границ временного сужения, это приведёт к некорректному восстановлению.

Вот простой пример правильного использования save-restriction:

---------- Buffer: foo ----------
This is the contents of foo
This is the contents of foo
This is the contents of foo∗
---------- Buffer: foo ----------
(save-excursion
  (save-restriction
    (goto-char 1)
    (forward-line 2)
    (narrow-to-region 1 (point))
    (goto-char (point-min))
    (replace-string "foo" "bar")))

---------- Buffer: foo ----------
This is the contents of bar
This is the contents of bar
This is the contents of foo∗
---------- Buffer: foo ----------

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/Narrowing.html

Spec-Zone.ru

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