テキスト端末ではEmacsのサスペンドができます。これはEmacsを一時的にストップして上位のプロセスに制御を返します。これは通常はshellです。これにより後で同じEmacsプロセス内の同じバッファー、同じkillリング、同じアンドゥヒストリー、...で編集を再開できます。Emacsを再開するには親shell内で適切なコマンド
— 恐らくはfg
— を使用します。
そのEmacsセッションが開始された端末デバイス上でのみサスペンドは機能します。そのデバイスのことをセッションの制御端末(controlling terminal)と呼びます。制御端末がグラフィカルな端末ならサスペンドは許されません。グラフィカルな端末ではEmacsで特別なことをせずに単に別のアプリケーションにスイッチできるのでサスペンドは通常は関係ありません。
いくつかのオペレーティングシステム(SIGTSTP
のないシステムやMS-DOS)ではジョブの停止はサポートされません。これらのシステムでの停止はEmacsのサブプロセスとして新たなshellを一時的に作成します。Emacsに戻るためにはshellをexitすればよいでしょう。
この関数はEmacsを停止して上位のプロセスに制御を返す。上位プロセスがEmacsを再開する際には、Lispでのsuspend-emacs
の呼び出し元にnil
をリターンする。
この関数はそのEmacsセッションの制御端末上でのみ機能する。他のTTYデバイスの制御を放棄するにはsuspend-tty
を使用する(下記参照)。そのEmacsセッションが複数の端末を使用する場合にはEmacsのサスペンド前に他のすべての端末からフレームを削除しなければならず、さもないとこの関数はエラーをシグナルする。複数の端末を参照のこと。
stringが非nil
なら、その各文字はEmacsの上位shellに端末入力として送信される。
サスペンドする前に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$ pwd /home/username bash$ fg
---------- Echo Area ---------- Resumed!
Emacsの親シェルにstringを送信するために特別な権限を要求する一部のオペレーティングシステムでは、実行するためにシェルに送信したstringが暗黙に破棄されるかもしれないことに注意。別のシステムではこれはサポートされていないので、試すとEmacsはエラーをシグナルするかもしれない。さらにstringがシェルによって実行されたとしても、エコーされないかもしれない。
この変数はEmacsがサスペンド前に実行するノーマルフック。
この変数はサスペンド後の再開時にEmacsが実行するノーマルフック。
ttyにEmacsが使用する端末デバイスを指定すると、この関数はそのデバイスを放棄して以前の状態にリストアする。そのデバイスを使用していたフレームは存在を続けるが更新はされず、Emacsはそれらのフレームから入力を読み取らない。ttyには端末オブジェクト、フレーム(そのフレームの端末の意)、nil
(選択されたフレームの端末の意)を指定できる。複数の端末を参照のこと。
ttyがサスペンド済みなら何も行わない。
この関数は端末オブジェクトを各関数への引数としてフックsuspend-tty-functions
を実行する。
この関数は以前にサスペンドされたデバイスttyを再開する。ここでttyはsuspend-tty
に指定できる値と同じである。
この関数は端末デバイスの再オープンと再初期化を行い、その端末の選択されたフレームで端末を再描画する。それから端末ブジェクトを各関数への引数としてフックresume-tty-functions
を実行する。
同じデバイスが別のEmacs端末で使用済みなら、この関数はエラーをシグナルする。ttyがサスペンドされていなければ何もしない。
この関数はttyがそのEmacsセッションの制御端末なら非nil
をリターンする。ttyには端末オブジェクト、フレーム(そのフレームの端末の意)、nil
(選択されたフレームの端末の意)を指定できる。