Spec-Zone.ru › Elisp

Приостановка Emacs

На текстовых терминалах возможно приостановить Emacs, что означает временную остановку Emacs и возврат управления его родительскому процессу, обычно оболочке. Это позволяет позже возобновить редактирование в том же процессе Emacs с теми же буферами, тем же кольцом удаления, той же историей отмены и так далее. Для возобновления Emacs используйте соответствующую команду в родительской оболочке — скорее всего fg.

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

Некоторые операционные системы (те, у которых нет SIGTSTP, или MS-DOS) не поддерживают приостановку задач; в этих системах приостановка фактически создаёт временную новую оболочку как дочерний процесс Emacs. Затем вам нужно будет выйти из оболочки, чтобы вернуться в Emacs.

Команда: suspend-emacs &optional string

Эта функция останавливает Emacs и возвращает управление родительскому процессу. Если и когда родительский процесс возобновляет Emacs, suspend-emacs возвращает nil своему вызывающему объекту в Lisp.

Эта функция работает только с управляющим терминалом сессии Emacs; для отказа от управления другими устройствами tty используйте suspend-tty (см. ниже). Если сессия Emacs использует более одного терминала, необходимо удалить фреймы на всех остальных терминалах перед приостановкой Emacs, иначе эта функция сообщит об ошибке. См. Множественные терминалы.

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

Перед приостановкой suspend-emacs выполняет обычный хук suspend-hook. После возобновления Emacs пользователем suspend-emacs выполняет обычный хук suspend-resume-hook. См. Хукы.

Следующее перерисовывание после возобновления перерисует весь экран, если переменная no-redraw-on-reenter не nil. См. Перерисовывание экрана.

Вот пример того, как вы можете использовать эти хуки:

(add-hook 'suspend-hook
          (lambda () (or (y-or-n-p "Really suspend?")
                         (error "Suspend canceled"))))
(add-hook 'suspend-resume-hook (lambda () (message "Resumed!")
                                 (sit-for 2)))

Вот что вы увидите при оценке (suspend-emacs "pwd"):

---------- Buffer: Minibuffer ----------
Really suspend? y
---------- Buffer: Minibuffer ----------
---------- Parent Shell ----------
bash$ /home/username
bash$ fg
---------- Echo Area ----------
Resumed!

Обратите внимание, что ‘pwd’ не отображается после приостановки Emacs. Но он считывается и выполняется оболочкой.

Переменная: suspend-hook

Эта переменная — обычный хук, который Emacs выполняет перед приостановкой.

Переменная: suspend-resume-hook

Эта переменная — обычный хук, который Emacs выполняет при возобновлении после приостановки.

Функция: suspend-tty &optional tty

Если tty указывает на устройство терминала, используемое Emacs, эта функция отказывается от устройства и восстанавливает его в предыдущее состояние. Фреймы, которые использовали устройство, продолжают существовать, но не обновляются, и Emacs не считывает ввод с них. tty может быть объектом терминала, фреймом (то есть терминалом для этого фрейма) или nil (то есть терминалом для выбранного фрейма). См. Множественные терминалы.

Если tty уже приостановлено, эта функция ничего не делает.

Эта функция выполняет хук suspend-tty-functions, передавая объект терминала в качестве аргумента каждой функции.

Функция: resume-tty &optional tty

Эта функция возобновляет ранее приостановленное устройство терминала tty; где tty имеет те же возможные значения, что и для suspend-tty.

Эта функция повторно открывает устройство терминала, повторно инициализирует его и перерисовывает его с выбранным фреймом этого терминала. Затем она выполняет хук resume-tty-functions, передавая объект терминала в качестве аргумента каждой функции.

Если то же устройство уже используется другим терминалом Emacs, эта функция сообщит об ошибке. Если tty не приостановлено, эта функция ничего не делает.

Функция: controlling-tty-p &optional tty

Эта функция возвращает не-nil , если tty является управляющим терминалом сессии Emacs; tty может быть объектом терминала, фреймом (то есть терминалом для этого фрейма) или nil (то есть терминалом для выбранного фрейма).

Команда: suspend-frame

Эта команда приостанавливает фрейм. Для фреймов графического интерфейса она вызывает iconify-frame (см. Видимость фреймов); для фреймов на текстовых терминалах она вызывает либо suspend-emacs или suspend-tty, в зависимости от того, отображается ли фрейм на устройстве управляющего терминала или нет.

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/Suspending-Emacs.html

Spec-Zone.ru

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