Mac OS X:从命令行启动时,将(非捆绑)GUI应用程序带到前台

时间:2012-06-28 15:49:16

标签: macos terminal

当从OS X终端启动GUI进程时,窗口会显示在后台,您必须使用命令选项卡为其提供焦点。

有没有办法让终端在启动后自动给这些GUI重点? 例如(假设安装了gitk):

% gitk

应启动GUI然后切换到它。

注意:由于多种原因,使用open作为this answer建议不是一般解决方案。

更新:为了更好地解释为什么open方法不能令人满意,这里是一个示例bash会话(带有诙谐的评论)。

% cd /my_repo
% gitk

等待GUI出现...现在任何一天......哦等等 - 它已经打开了。我只是没注意到因为它在我的终端后面打开了一个窗口。我想知道我要坐多久等待......

% open gitk
The file /my_repo/gitk does not exist.

啊,当然。

% which gitk
/usr/bin/gitk
% open /usr/bin/gitk

什么......它打开了一个新的终端窗口来运行gitk,它在我的主目录中这样做了,而不是/ my_repo,所以gitk抱怨当前目录实际上不是一个存储库...

3 个答案:

答案 0 :(得分:3)

您是否需要同步调用它?如果没有,您可以使用&异步启动它,然后使用osascript -e 'tell application "gitk" to activate'激活它。

答案 1 :(得分:2)

如果你正在专门处理gitk,你可以编辑gitk文件来实现这一点,我在苹果堆栈交换上发布了一个答案:https://apple.stackexchange.com/a/74917/35956

您可以使用终端

中的以下命令找到gitk文件
which gitk

在我的gitk文件中,我发现了一条接近顶部的线(第3行)

exec wish "$0" -- "$@"

我把它改成了

exec wish "$0" -- "$@" & exec osascript -e "tell application \"Wish\" to activate"

当我从命令行执行gitk时,gitk窗口到达前台,另一个副作用就是它以异步方式执行

答案 2 :(得分:1)

你可以用bash函数包装@chris页面的答案并将其放在你的.bashrc中

function gitk() {
  command gitk "$@"&
  command osascript -e "delay .5" -e "tell application \"wish\" to activate"
}

应该有办法通过循环并在超时时寻找'愿望'来摆脱延迟。

注意:'Wish'是我的Mac上显示的gitk窗口标题。