web-dev-qa-db-ja.com

Ratpoisonで最小化した後にGUIウィンドウを回復する

ratpoisonを実行しています。キーバインディングを介して開始されたemacsを実行していました(したがって、xtermはありません)。次に、誤ってCtrl-Zを押すと、emacsが消えました(emacs iconify-or-deiconify-frame)。 ratpoisonを離れてmwmemacsに行くと、フォアグラウンドに戻ってくるので、まだそこにあることはわかっています。ただし、xtermを起動して%emacs bashを実行すると、bash: fg: %emacs: no such jobがわかります。

Ratpoisonでemacsを非アイコン化するにはどうすればよいですか?

  1. Gnome内の同様の問題
  2. バグレポート

(この投稿は大幅に編集されました)

2
dmvianna

デフォルトのratpoisonキーバインディング:

Ctrl+tCtrl+Enterratpoisonのウィンドウを非表示にします。

ratpoisonの下のEmacs Guiも後に非表示になります Ctrl+z

Ctrl+tEnter 非表示のウィンドウを元に戻します。

2
dmvianna

サブシェル#1でプロセスをバックグラウンドにして、サブシェル#2でフォアグラウンドに戻すことはまったくできません(次のような追加のツールを使用しない場合: reptyr )。


あなたの場合、ターミナルから起動していなくても、ターミナルにいない場合はCtrl+Zの動作が異なります。あなたのCtrl+Zは他の「魔法」をやっていると思います、 ratpoison-default-keybindings それをリストしていません。セットアップでCtrl+Zが何にバインドされているかを理解する必要があるかもしれません。

[〜#〜]編集[〜#〜]
From Emacs Manual

EmacsがXサーバーと直接通信し、独自の専用Xウィンドウを作成する場合、C-zの意味は異なります。独自のXウィンドウを使用するアプリケーションを一時停止しても、意味がなく、役に立ちません。代わりに、C-zはコマンドiconify-or-deiconify-frameを実行します。これは、選択されたEmacsフレームを一時的にアイコン化(または「最小化」)します(セクションP.フレームとXウィンドウを参照)。次に、ウィンドウマネージャーを使用して、シェルウィンドウに戻ることができます。

開いているアプリケーションを介してemacsにAlt+Tabできるはずです。たぶん、ratpoisonの下で、最小化されたフレームを取り戻す別の方法があります。または、Alt-Tabをratpoisonに追加し、.ratpoisonrcを編集します。

definekey top M-Tab next
definekey top M-ISO_Left_Tab prev

rpを再起動します。

4
xx4h

Ctrl+Zウィンドウを最小化する (Emacsはウィンドウを「フレーム」と呼びます)へのEmacsコマンドです。の使用とは技術的に無関係です Ctrl+Z ターミナルウィンドウでコマンドを一時停止します(ただし、ショートカットはEmacsの設計者によって選択されました。これは、アクションが多少似ているためです)。

通常、ウィンドウマネージャーは最小化されたウィンドウのリストをどこかに表示します。もともと、「どこか」はデスクトップ上のアイコンを意味していました。そのため、最小化はアイコン化とも呼ばれます。多くのウィンドウマネージャーは、リストから選択するなど、最小化されたウィンドウを最小化しない他の方法を提供します。

ウィンドウマネージャーがこの機能を提供していない場合は、コマンドラインから実行できます。 wmctrl のごく最近のバージョンは、_wmctrl -x -Y Emacs_でそれを行うことができます。 xdotool の最近のバージョンは_xdotool search --classname Emacs windowmap_でそれを行うことができます。

Emacsサーバーを起動した場合は、emacsclient -c '(make-frame-visible)'を使用してEmacsウィンドウを復元できます。

将来の事故を避けるために、_~/.emacs_に次の行を追加して、最小化する前に確認プロンプトを取得できます。

_(defadvice iconify-frame (around iconify-frame-confirm)
  (if (y-or-n-p "Really iconify this frame?")
    ad-do-it))
_

_C-z_バインディングは端末で役立つため、オーバーライドしません。アイコン化をRatpoisonで役立つ他のものに置き換えることをお勧めします。また、必ずEmacsサーバーを起動して、emacsclientでコマンドを発行できるようにしてください。_(server-start)_を_.emacs_に入れてください。

私はそのgitリポジトリでRatPoisonのソースを見ています。基本的に、ウィンドウがアイコン化されたというイベントを取得すると、ウィンドウを撤回してグローバルリストに追加します。 _unmap_notify_の_events.c_関数と_withdraw_window_の_manage.c_を見てください。

_withdraw_window_は、ウィンドウをある種のグローバルリストに配置します。_withdraw_window_の行list_move_tail(&win->node, &rp_unmapped_window);を参照してください。

おそらく、キーバインディングに割り当てられた新しいアクションをハックして、この_rp_unmapped_window_リストからウィンドウをポップし、XLib呼び出しを実行してアイコンを解除し、それによってウィンドウを復活させることは難しくありません。 (ランダムに選択するためにこれらのアイコン化されたウィンドウのリストをレンダリングするなど、特別なことは何もしません。)

2
Kaz