前: Killing Emacs, 上: Getting Out


37.2.2 Emacsの休止

Emacsを休止するとは、Emacsを一時的に停止し、 普通はシェルである親プロセスに制御を戻すことです。 これにより、あとで同じEmacsプロセスで、つまり、同じバッファ群、 同じキルリング、同じアンドゥ履歴などで編集を再開できます。 Emacsを再開するには、親シェルにおいて ほとんどの場合fgなどの適切なコマンドを使います。

ジョブの休止を扱えないオペレーティングシステムもあります。 そのようなシステムでは、『休止』はEmacsのサブプロセスとして 一時的に新たなシェルを実際には作成します。 そのシェルを終了するとEmacsに戻ります。

ウィンドウシステムを使っている場合には、 Emacsジョブを再開する親プロセスがいないかもしれませんし、 別のウィンドウへ移動すれば別のジョブへ入力できますから、 Emacsの休止は有用ではありません。 したがって、Emacsがウィンドウシステムを使っている場合には、 休止できません。

— 機能: suspend-emacs string

この関数は、Emacsを休止し、親プロセスへ制御を戻す。 親プロセスがEmacsを再開した場合にのみ、 suspend-emacsはLisp内の呼び出し側へnilを返す。

stringnil以外であると、 Emacsの親シェルが端末入力として読めるようにその文字群を送る。 親シェルはstringの文字群を表示せず、 その結果のみが現れる。

休止するまえに、suspend-emacsは ノーマルフックsuspend-hookを実行する。

ユーザーがEmacsを再開すると、suspend-emacsは ノーマルフックsuspend-resume-hookを実行する。 see Hooks

再開後のつぎの再表示では、 変数no-redraw-on-reenternilならば スクリーン全体を再描画する。 (see Refresh Screen)。

つぎの例では、Emacsを休止しても`pwd'は表示されないことに注意。 しかし、シェルはそれを読み取って実行する。

          (suspend-emacs)
               => nil
          
          (add-hook 'suspend-hook
                    (function (lambda ()
                                (or (y-or-n-p
                                      "Really suspend? ")
                                    (error "Suspend cancelled")))))
               => (lambda nil
                    (or (y-or-n-p "Really suspend? ")
                        (error "Suspend cancelled")))
          (add-hook 'suspend-resume-hook
                    (function (lambda () (message "Resumed!"))))
               => (lambda nil (message "Resumed!"))
          (suspend-emacs "pwd")
               => nil
          ---------- Buffer: Minibuffer ----------
          Really suspend? y
          ---------- Buffer: Minibuffer ----------
          
          ---------- Parent Shell ----------
          lewis@slug[23] % /user/lewis/manual
          lewis@slug[24] % fg
          
          ---------- Echo Area ----------
          Resumed!
     
— 変数: suspend-hook

この変数は、休止するまえに実行されるノーマルフックである。

— 変数: suspend-resume-hook

この変数は、再開後に実行されるノーマルフックである。