10

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

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

% gitk

应该启动 GUI,然后切换到它。

注意:出于多种原因,open按照此答案的建议使用不是通用解决方案。

更新:为了更好地解释为什么该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 抱怨当前目录实际上不是存储库...

4

3 回答 3

4

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

于 2012-07-02T22:01:17.250 回答
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 窗口出现在前台,另一个副作用是它异步执行

于 2012-12-14T20:11:48.247 回答
1

您可以将@chris 页面的答案包装在 bash 函数中,然后将其放入 .bashrc

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

应该有一种方法可以通过循环并寻找超时的“愿望”来消除延迟。

注意:“Wish”是在我的 Mac 上为 gitk 显示的窗口标题。

于 2012-11-25T17:25:16.427 回答