Spec-Zone.ru › Elisp

Переключение на буфер в окне

В этом разделе описаны функции высокого уровня для переключения на указанный буфер в некотором окне. В общем случае «переключиться на буфер» означает (1) показать буфер в некотором окне, (2) сделать это окно выбранным окном (а его кадр — выбранным кадром) и (3) сделать буфер текущим.

Не используйте эти функции, чтобы временно сделать буфер текущим лишь для того, чтобы программа на Lisp могла получить к нему доступ или изменить его. У них есть побочные эффекты, например изменение истории окон (см. История окон), которые удивят пользователя при таком использовании. Чтобы сделать буфер текущим для изменения на Lisp, используйте with-current-buffer, save-current-buffer или set-buffer. См. Текущий буфер.

Команда: switch-to-buffer buffer-or-name &optional norecord force-same-window

Эта команда пытается показать buffer-or-name в выбранном окне и сделать его текущим буфером. Её часто используют интерактивно (как привязку C-x b), а также в программах на Lisp. Возвращаемое значение — буфер, на который выполнено переключение.

Если buffer-or-name равно nil, по умолчанию используется буфер, возвращаемый other-buffer (см. Список буферов). Если buffer-or-name — строка, не являющаяся именем существующего буфера, эта функция создаёт новый буфер с таким именем; главный режим нового буфера определяется переменной major-mode (см. Главные режимы).

Обычно указанный буфер помещается в начало списка буферов — как глобального списка буферов, так и списка буферов выбранного кадра (см. Список буферов). Однако это не делается, если необязательный аргумент norecord не равен nil.

Иногда выбранное окно может быть непригодно для показа буфера. Так происходит, если выбранное окно является окном минибуфера или если оно жёстко привязано к своему буферу (см. Выделенные окна). В таких случаях команда обычно пытается показать буфер в другом окне, вызывая pop-to-buffer (см. ниже).

Если необязательный аргумент force-same-window не равен nil и выбранное окно непригодно для показа буфера, при неинтерактивном вызове эта функция всегда сигнализирует об ошибке. При интерактивном использовании, если выбранное окно является окном минибуфера, функция попытается использовать другое окно. Если выбранное окно жёстко привязано к своему буферу, для продолжения можно использовать описанный далее параметр switch-to-buffer-in-dedicated-window.

Пользовательский параметр: switch-to-buffer-in-dedicated-window

Если этот параметр не равен nil, он позволяет switch-to-buffer продолжить работу при интерактивном вызове, если выбранное окно жёстко привязано к своему буферу.

Допустимы следующие значения:

nil

Запрещает переключение и сигнализирует об ошибке, как при неинтерактивном использовании.

prompt

Запрашивает у пользователя разрешение на переключение.

pop

Для продолжения вызывает pop-to-buffer.

t

Снимает с выбранного окна признак выделенного и продолжает работу.

Этот параметр не влияет на неинтерактивные вызовы switch-to-buffer.

По умолчанию switch-to-buffer пытается сохранить window-point. Этим поведением можно управлять с помощью следующего параметра.

Пользовательский параметр: switch-to-buffer-preserve-window-point

Если значение этой переменной равно nil, switch-to-buffer показывает буфер, указанный в buffer-or-name, в позиции его point. Если значение этой переменной равно already-displayed, функция пытается показать буфер в его предыдущей позиции в выбранном окне, если в данный момент буфер отображается в каком-либо другом окне на любом видимом или свёрнутом кадре. Если значение этой переменной равно t, switch-to-buffer безусловно пытается показать буфер в его предыдущей позиции в выбранном окне.

Эта переменная игнорируется, если буфер уже отображается в выбранном окне, никогда ранее в нём не отображался или если switch-to-buffer вызывает pop-to-buffer для показа буфера.

Пользовательский параметр: switch-to-buffer-obey-display-actions

Если значение этой переменной не равно nil, switch-to-buffer учитывает действия отображения, заданные с помощью display-buffer-overriding-action, display-buffer-alist (см. Функции действий для отображения буфера), а также других переменных, связанных с отображением буфера (см. Списки ассоциаций действий для отображения буфера).

Следующие две команды похожи на switch-to-buffer, за исключением описанных особенностей.

Команда: switch-to-buffer-other-window buffer-or-name &optional norecord

Эта функция показывает буфер, указанный в buffer-or-name, в окне, отличном от выбранного. Внутри она использует функцию pop-to-buffer (см. ниже).

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

Аргументы buffer-or-name и norecord имеют те же значения, что и в switch-to-buffer.

Команда: switch-to-buffer-other-frame buffer-or-name &optional norecord

Эта функция показывает буфер, указанный в buffer-or-name, в новом кадре. Внутри она использует функцию pop-to-buffer (см. ниже).

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

Аргументы buffer-or-name и norecord имеют те же значения, что и в switch-to-buffer.

В приведённых выше командах используется функция pop-to-buffer, которая гибко отображает буфер в некотором окне и выбирает это окно для редактирования. В свою очередь, pop-to-buffer использует display-buffer для отображения буфера. Поэтому все переменные, влияющие на display-buffer, также влияют и на неё. Описание display-buffer см. в разделе Выбор окна для отображения буфера.

Команда: pop-to-buffer buffer-or-name &optional action norecord

Эта функция делает buffer-or-name текущим буфером и показывает его в некотором окне, предпочтительно не в текущем выбранном окне. Затем она выбирает окно, в котором отображается буфер. Если это окно находится в другом графическом кадре, этому кадру по возможности передаётся фокус ввода (см. Фокус ввода).

Если buffer-or-name равно nil, по умолчанию используется буфер, возвращаемый other-buffer (см. Список буферов). Если buffer-or-name — строка, не являющаяся именем существующего буфера, эта функция создаёт новый буфер с таким именем; главный режим нового буфера определяется переменной major-mode (см. Главные режимы). В любом случае этот буфер становится текущим и возвращается, даже если подходящее окно для его отображения не найдено.

Если action не равно nil, оно должно быть действием отображения, передаваемым в display-buffer (см. Выбор окна для отображения буфера). Кроме того, значение, не равное nil и не являющееся списком, означает переключение на окно, отличное от выбранного, даже если буфер уже отображается в выбранном окне.

Как и switch-to-buffer, эта функция обновляет список буферов, если только norecord не равно nil.

Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Switching-Buffers.html

Spec-Zone.ru

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