Как сделать, чтобы щелкнуть по значку в доке == открыть новый экземпляр

16

У меня в приложении есть несколько приложений, в которых может быть открыто несколько экземпляров (например, Chrome, iTerm, Sublime и т. Д.)

Когда я нажимаю на один из значков, я хочу, чтобы открылось новое окно (это то, что происходит, если в данный момент не открыто ни одного окна). Однако, если экземпляр уже открыт, он просто приводит меня к этому экземпляру.

Это особенно раздражает, когда экземпляр находится на другом экземпляре рабочего стола и вызывает изменение моего рабочего стола.

Есть ли параметр, который вы можете установить, чтобы при щелчке значка он открывал новое окно, а не перенаправлял вас в уже открытое окно?

JD Исаакс
источник
2
Я мог бы показать вам, как сделать это с небольшим количеством AppleScript, который вы можете оставить в Dock.
Ян С.
Или вы можете просто нажать Ctrl + N.
CoffeeRain
3
@CoffeeRain Ctrl-N? Что это? Ничего не делает в iTerm и Chrome. Я думаю, что вы имели в виду Cmd-N - но это работает, только если приложение находится на переднем плане.
Ян С.
@IanC. Извините, да, я имел в виду Cmd-N.
CoffeeRain

Ответы:

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

Вы можете использовать кнопку Run в редакторе, чтобы проверить, работает ли он. Если вы хотите открыть другой профиль, замените «По умолчанию» в строке 12 на имя профиля, который вы хотите открыть.

Теперь сохраните этот AppleScript. В диалоговом окне «Сохранить» в разделе «Формат файла» внизу выберите «Приложение» из списка.

Я сохранил мой как «Новый iTerm.app» на моем рабочем столе.

Теперь каждый раз, когда я нажимаю «Новый iTerm.app» на моем рабочем столе, я получаю новое окно iTerm. Я могу перетащить «Новый iTerm.app» в свою док-станцию, и это будет иконка 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.

Вы можете переместить «Новый iTerm.app» в вашу /Applicationsпапку, если хотите. Перетащите его из папки, в которой вы решили оставить его, обратно в док, и теперь вы можете щелкнуть по нему в доке, чтобы при каждом щелчке открывать новое окно iTerm.

Если вы хотите отличить его от работающего значка док-станции iTerm.app, вы можете вставить его в графический редактор, например Pixelmator, и добавить в него большой красный цвет, +чтобы он был четко обозначен как значок, который нужно нажать для нового iTerm. вместо значка нажмите, чтобы увидеть выход, откройте приложение iTerm.

Вот еще несколько скриптов для некоторых других приложений, чтобы вы начали настраивать вещи:

Google Chrome (новое окно)

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

Google Chrome (новая вкладка)

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. Вы всегда можете взглянуть на инструмент командной строки OS X, который поставляется вместе с ST2 . Вы можете вызвать это из простого скрипта в 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, так что это было хорошее упражнение, чтобы проверить то, что я узнал.
Ян С.
Может ли это использоваться для получения имени запущенного в данный момент приложения?
Уильям
Есть ли способ проверить, запущено ли приложение, а его нет на текущем рабочем столе? Я хотел бы новое окно, только если существующее окно находится на другом рабочем столе.
adamdport