我在跑ratpoison
。我是emacs
通过键绑定启动的(因此没有 xterm)。然后我错误地按了 Ctrl-Z,emacs 消失了(emacs iconify-or-deiconify-frame
)。我知道它仍然在那里,因为当我离开ratpoison 并转到mwm emacs 时,它又回到了前台。然而,启动 xterm 并运行%emacs
bash 告诉我bash: fg: %emacs: no such job
。
如何在ratpoison 中取消 emacs 图标?
(这篇文章经过大量编辑)
答案1
将子 shell #1 中的进程置于后台并将其返回到子 shell #2 上的前台是根本不可能的(如果您不使用额外的工具,例如:雷普特尔)。
在您的情况下,您甚至没有从终端启动它,并且Ctrl+Z
如果您不在终端中,则会有不同的行为。我认为你Ctrl+Z
正在做一些其他的“魔法”,鼠毒默认键绑定甚至不列出来。也许你应该弄清楚,Ctrl+Z
你的设置有什么限制。
编辑
从Emacs手册:
当 Emacs 直接与 X 服务器通信并创建自己的专用 X 窗口时,Cz 具有不同的含义。挂起使用自己的 X 窗口的应用程序没有任何意义或用处。相反,Cz 运行命令 iconify-or-deiconify-frame,该命令临时图标化(或“最小化”)选定的 Emacs 框架(请参阅 P. 框架和 X Windows 部分)。然后您可以使用窗口管理器返回到 shell 窗口。
您应该能够Alt+Tab
通过打开的应用程序访问 emacs。也许在ratpoison下有另一种方法可以恢复最小化的帧。或者添加Alt-Tab
到ratpoison,编辑你的.ratpoisonrc
:
definekey top M-Tab next
definekey top M-ISO_Left_Tab prev
并重新启动 rp。
答案2
Ctrl+Z是 Emacs 命令最小化窗口(Emacs 将窗口称为“框架”)。从技术上讲,它与使用Ctrl+Z在终端窗口中暂停命令无关(但 Emacs 设计者选择了该快捷方式,因为它们的操作有些相似)。
通常,窗口管理器会在某处显示最小化窗口的列表。最初,“某处”是桌面上的一个图标,这就是最小化也称为图标化的原因。许多窗口管理器提供了一些其他方法来取消最小化窗口的最小化,例如通过从列表中进行选择。
如果您的窗口管理器不提供此功能,您可以从命令行执行此操作。最新版本wmctrl
可以用 来做到wmctrl -x -Y Emacs
。最新版本xdotool
可以用 来做到xdotool search --classname Emacs windowmap
。
如果您启动了 Emacs 服务器,则可以使用 恢复 Emacs 窗口emacsclient -c '(make-frame-visible)'
。
为了避免将来发生意外,您可以将以下行添加到您的文件中,~/.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
.
答案3
我正在其 git 存储库中查看 RatPoison 的来源。基本上,当它收到窗口已图标化的事件时,它会将其撤回并将其放入全局列表中。查看unmap_notify
函数 inevents.c
和 at withdraw_window
in manage.c
。
withdraw_window
将窗口放入某种全局列表中:请参阅list_move_tail(&win->node, &rp_unmapped_window);
中的行withdraw_window
。
rp_unmapped_window
也许破解一个新操作,分配给某个键绑定,从该列表中弹出一个窗口,并执行 XLib 调用以取消图标化它,从而使其恢复生机并不困难。 (无需做任何花哨的事情,例如渲染这些图标化窗口的列表以供随机选择。)
答案4
默认的ratpoison键绑定:
Ctrl+ t Ctrl+Enter隐藏一个窗口ratpoison
。
Emacs Gui
underratpoison
也隐藏在Ctrl+之后z。
Ctrl+t Enter恢复隐藏窗口。