如何在Dock ==中单击图标以打开新实例


16

我的扩展坞中有几个可以打开多个实例的应用程序(例如Chrome,iTerm,Sublime等)

当我单击其中一个图标时,我想打开一个新窗口(如果当前未打开任何窗口,则会发生这种情况)。但是,如果一个实例已经打开,它将带我进入该实例。

当该实例位于整个其他桌面实例上并导致我的桌面发生更改时,这尤其烦人。

是否可以进行设置,以便在单击图标时打开一个新窗口,而不是将您重定向到一个已打开的窗口?


2
我可以向您展示如何使用可保留在Dock中的AppleScript来执行此操作。
伊恩·C

或者您可以按ctrl + n。
CoffeeRain 2012年

3
@CoffeeRain Ctrl-N吗?那是什么?在iTerm和Chrome中不执行任何操作。我认为您的意思是Cmd-N-但这仅在应用程序位于前台时有效。
伊恩·C(

@IanC。抱歉,是的,我的意思是Cmd-N。
CoffeeRain 2012年

Answers:


17

您可以将某些内容与一些AppleScript和一些聪明的图标图像粘贴一起存储。这是iTerm / iTerm2的处理方法。

打开AppleScript编辑器,然后粘贴以下AppleScript:

set myapp to "iTerm"
on appIsRunning(appName)
    tell application "System Events" to (name of processes) contains appName
end appIsRunning
if appIsRunning(myapp) then
    # What you do here will depend on the program. This works for
    # iTerm but you'll need to look up the actions for other programs
    # since this bit is iTerm-specific.
    tell application "iTerm"
        set myterm to (make new terminal)
        tell myterm
            launch session "Default"
        end tell
    end tell
else
    tell application myapp
        activate
    end tell
end if

您可以使用编辑器中的“运行”按钮来测试其是否正常工作。如果要打开其他配置文件,请在第12行将“默认”更改为要打开的配置文件的名称。

现在保存此AppleScript。在底部“文件格式”下的“保存”对话框中,从列表中选择“应用程序”。

我将“我的iTerm.app”保存为我的桌面。

现在,每次我在桌面上单击“ New iTerm.app”时,都会得到一个新的iTerm窗口。我可以将“ New iTerm.app”拖到我的Dock中,这将是一个Dock图标,我可以随时单击以打开新的iTerm窗口。但是该图标是通用的AppleScript图标。

让我们将其更改为iTerm图标。在桌面上选择“ New iTerm.app”,然后单击Cmd-I来显示该应用程序的属性屏幕。

现在,/Applications在Finder窗口中导航到,在已安装的应用程序列表中找到iTerm,将其选中,然后单击Cmd-I打开iTerm应用程序的属性屏幕。

单击iTerm信息窗口中的图标,以使其周围带有柔和的蓝色阴影。按Cmd-C将图标复制到剪贴板。

现在,单击“ New iTerm.app”信息窗口中的图标,然后按Cmd-V将iTerm图标粘贴到“ New iTerm.app”应用程序上。

将图标从iTerm复制到新iTerm

现在,它应该具有一个iTerm图标。

/Applications如果愿意,可以将“ New iTerm.app”移动到您的文件夹中。将其从您决定保留的文件夹中拖回并停靠,现在您可以在Dock中单击它,每次单击都会打开一个新的iTerm窗口。

如果您希望将其与正在运行的iTerm.app Dock图标区分开来,则可以考虑将其粘贴到Pixelmator之类的图像编辑器中并为其添加大红色+,以便将其明确标识为要按下新iTerm的图标窗口,而不是要按下以查看退出的iTerm应用程序的图标。

以下是一些其他应用程序的脚本,可帮助您开始自定义内容:

谷歌浏览器(新窗口)

set myapp to "Google Chrome"
on appIsRunning(appName)
    tell application "System Events" to (name of processes) contains appName
end appIsRunning
if appIsRunning(myapp) then
    tell application "Google Chrome"
        make new window
    end tell
else
    tell application myapp
        activate
    end tell
end if

谷歌浏览器(新标签)

set myapp to "Google Chrome"
on appIsRunning(appName)
    tell application "System Events" to (name of processes) contains appName
end appIsRunning
if appIsRunning(myapp) then
    tell application "Google Chrome"
        make new tab at end of tabs of window 1
    end tell
else
    tell application myapp
        activate
    end tell
end if

崇高文字2

不幸的是,ST2似乎没有AppleScript可访问的扩展。您可以随时查看ST2附带的OS X命令行工具。您可以从Dock中的简单脚本中调用它,以在ST2中打开一个新窗口。所以:

set myapp to "Sublime Text 2"
on appIsRunning(appName)
    tell application "System Events" to (name of processes) contains appName
end appIsRunning
if appIsRunning(myapp) then
    # Assumes you've installed the subl command line tool for ST2
    # in to /usr/local/bin. Adjust accordingly.
    do shell script "/usr/local/bin/subl --new-window"
else
    tell application myapp
        activate
    end tell
end if

2
答案很明确,示例涵盖了不同的用例和细节!谢谢!
亚当·戴维斯

@AdamDavis我只是从AppleScript开始,所以这是测试我所学知识的不错的练习。
伊恩·C(

可以用来获取当前正在运行的应用程序的名称吗?
威廉

有没有一种方法可以检查该应用程序是否正在运行,并且不在当前桌面上?仅当现有窗口在另一个桌面上时,我才会喜欢一个新窗口。
adamdport's
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.