Переключение на буфер в окне
В этом разделе описаны функции высокого уровня для переключения на указанный буфер в некотором окне. В общем случае «переключиться на буфер» означает (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