Этот раздел описывает высокоуровневые функции для переключения на заданный буфер в некотором окне. В общем случае «переключение на буфер» означает (1) показ этого буфера в некотором окне, (2) сделать это окно выбранным (а его фрейм — выбранным фреймом) и (3) сделать этот буфер текущим.
Не используйте эти функции, чтобы сделать буфер временно текущим
только для того, чтобы программа на Lisp могла получить к нему доступ или изменить его.
Они имеют побочные эффекты, такие как изменение истории окон (см. История окон), которые удивят пользователя при таком использовании. Если вы хотите
сделать буфер текущим, чтобы изменить его в Lisp, используйте
with-current-buffer, save-current-buffer или
set-buffer. См. Текущий буфер.
Эта команда пытается отобразить 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, описанную далее.
Эта опция, если не равна nil, позволяет switch-to-buffer
продолжить выполнение при интерактивном вызове, если выбранное окно строго
выделено для своего буфера.
Поддерживаются следующие значения:
nilЗапрещает переключение и вызывает ошибку, как при неинтерактивном использовании.
promptЗапрашивает у пользователя разрешение на переключение.
popВызывает pop-to-buffer для продолжения.
tПомечает выбранное окно как невыделенное и продолжает выполнение.
Эта опция не влияет на неинтерактивные вызовы
switch-to-buffer.
По умолчанию switch-to-buffer пытается сохранить
window-point. Это поведение можно настроить с помощью следующей
опции.
Если эта переменная равна nil, switch-to-buffer отображает
буфер, заданный buffer-or-name, в позиции point этого
буфера. Если эта переменная равна already-displayed, она
пытается отобразить буфер в его предыдущей позиции в выбранном
окне при условии, что буфер в данный момент отображается в некотором другом окне
на любом видимом или свёрнутом в значок фрейме. Если эта переменная равна t,
switch-to-buffer безусловно пытается отобразить буфер в
его предыдущей позиции в выбранном окне.
Эта переменная игнорируется, если буфер уже отображается в выбранном
окне или никогда не отображался в нём ранее, или если
switch-to-buffer вызывает pop-to-buffer для отображения
буфера.
Если эта переменная не равна nil, switch-to-buffer учитывает
действия отображения, задаваемые display-buffer-overriding-action,
display-buffer-alist и другими переменными, связанными с отображением.
Следующие две команды аналогичны switch-to-buffer, за исключением
описанных особенностей.
Эта функция отображает буфер, заданный buffer-or-name, в
некотором окне, отличном от выбранного. Внутренне она использует функцию
pop-to-buffer (см. ниже).
Если выбранное окно уже отображает заданный буфер, оно продолжает это делать, но для его отображения всё равно находится другое окно.
Аргументы buffer-or-name и norecord имеют те же
значения, что и в switch-to-buffer.
Эта функция отображает буфер, заданный 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.
Эта функция делает buffer-or-name текущим буфером и отображает его в некотором окне, предпочтительно не в том, которое выбрано в данный момент. Затем она выбирает окно, в котором происходит отображение. Если это окно находится на другом графическом фрейме, этот фрейм получает фокус ввода, если это возможно (см. Фокус ввода).
Если buffer-or-name равен nil, по умолчанию используется буфер,
возвращаемый other-buffer (см. Список буферов). Если
buffer-or-name — это строка, не являющаяся именем какого-либо существующего
буфера, эта функция создаёт новый буфер с таким именем; основной режим
нового буфера определяется переменной major-mode
(см. Основные режимы). В любом случае этот буфер делается текущим и
возвращается, даже если не найдено подходящего окна для его отображения.
Если action не равен nil, он должен быть действием отображения,
передаваемым в display-buffer (см. Выбор окна для отображения буфера).
Альтернативно, не равное nil, но не являющееся списком значение означает
переключиться в окно, отличное от выбранного — даже если буфер уже
отображается в выбранном окне.
Как и switch-to-buffer, эта функция обновляет список буферов,
если только norecord не равен nil.