Приостановка 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