Переключение на буфер в окне
В этом разделе описываются функции высокого уровня для переключения на указанный буфер в некотором окне. В общем, «переключение на буфер» означает (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-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Switching-Buffers.html