我可以运行“xterm -e MyApp”,并将焦点传递到新的 xterm 窗口吗?

问题描述 投票:0回答:1

如果我在终端会话中运行

xterm -e MyApp
,则会弹出一个新的 xterm 窗口,运行 MyApp。我必须单击新窗口才能获得焦点。当我关闭 MyApp 时,窗口会关闭,但焦点不会返回到原始窗口。我正在 Mac 上的终端窗口中工作。

我希望新窗口从旧窗口中获取焦点,并在关闭时将其交还给它。

“xterm”命令生成新窗口,并将 -e 参数传递给该窗口中的 shell。本地“xterm”任务完成。我可以用

nohup
继续下去,但这并没有传递焦点。这是合乎逻辑的。为了获得我期望的行为,我必须编写一些东西,将焦点从旧终端转移到新终端,然后再转移回来。

我的搜索结果很少。我怀疑我问了一个愚蠢的问题。因此我问...

有没有一种简洁的方法可以在 Mac、Linux 甚至 Windows 上来回传递焦点?我欢迎一个明确的答案“不,这很复杂,而且每种情况都不同”。然后我就可以光荣地放弃了,因为我知道我已经尽力了。

后续问题可能是“如果没有其他应用程序像这样传递焦点,为什么它觉得应该这样做?”。可能是因为新的 xterm 窗口出现在旧的终端窗口前面。我尝试过

xterm -iconic
希望单击图标可以获得键盘焦点,但事实并非如此'

背景:

这是一个调试工具。我在几台机器上运行它。我强调简单、万无一失。我可以点击新窗口,即使它让我烦恼。如果我忘记了,它就会以明显的方式失败。我相信这个网站上的聪明人可以提供巧妙的解决方案,但我不希望您把时间浪费在简单的 shell 命令(如果有的话)之外的任何事情上。

我当前的机器是 Intel Mac,我在终端窗口中输入。我的 .zshrc 中有以下别名...

alias AnsiView="xterm -e myAnsiView"

如果我输入命令

AnsiView image.png
,它将打开一个运行我的应用程序的“视图”窗口,该窗口使用 ANSI 代码显示图像。

我知道一个新窗口会在没有焦点的情况下启动。我使用 ANSI

\e[?1004h
转义来检测它何时第一次获得焦点。在新窗口中运行的应用程序以“单击此处获取焦点”提示开始,并在获得焦点时转到通常的命令提示符。当它失去焦点时它似乎没有反应。我希望该事件在再次获得焦点之前不会被处理。

focus xterm
1个回答
0
投票

不,我不能。

xterm -iconic
可能是最好的解决方案。您必须单击该图标,焦点就会传递。如果窗口是打开的,您第一次单击它可能会消耗焦点,因此能够单击打开的窗口中的功能也会产生误导。

很难证明是否定的。那里可能有一个很好的解决方案。但仔细一看,似乎不太可能。当然没有 xterm 选项可以做我想做的事。

这是有道理的。窗口管理器应该负责顶部的内容。有一些系统选项可用于设置焦点是否跟随鼠标,或者焦点窗口是否位于顶部。如果我将焦点转移到新窗口,我将不得不考虑所有这些设置,因为我可能没有这样做的权限。最好不要尝试。其他应用程序遵守 OS House 规则。

还是感觉不对。我从终端打开一个“xterm”,它会打开一个窗口,该窗口可能位于我正在使用的窗口前面。很容易假设它有焦点。如果您将新窗口图标化,而不是让它保持打开状态,那么您必须单击它才能看到它。

© www.soinside.com 2019 - 2024. All rights reserved.