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

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

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

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

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

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

Ответы (2)

Вы можете что-то запутать вместе с 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» на рабочем столе.

Теперь каждый раз, когда я нажимаю «Новый iTerm.app» на рабочем столе, я получаю новое окно iTerm. Я могу перетащить «New iTerm.app» в свой Dock, и это будет значок Dock, на который я могу щелкнуть в любое время, когда захочу открыть новое окно iTerm. Но значок является общим значком AppleScript.

Давайте изменим его на значок iTerm. Выберите «Новый iTerm.app» на рабочем столе и нажмите Cmd-I, чтобы открыть экран свойств приложения.

Теперь перейдите /Applicationsв окно Finder, найдите iTerm в списке установленных приложений, выберите его и нажмите Cmd-I, чтобы открыть экран свойств приложения iTerm.

Щелкните значок в информационном окне iTerm, чтобы вокруг него появилась мягкая синяя тень. Нажмите Cmd-C, чтобы скопировать значок в буфер обмена.

Теперь щелкните значок в информационном окне «Новый iTerm.app» и нажмите Cmd-V, чтобы вставить значок iTerm в приложение «Новый iTerm.app».

Копирование значка из iTerm в новый iTerm

Теперь у него должен быть значок iTerm.

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

Если вы хотите отличить его от запущенного значка iTerm.app Dock, вы можете вставить значок в редактор изображений, такой как 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
Отличный ответ с четкими примерами, охватывающими различные варианты использования и детали! Спасибо!
@AdamDavis Я только начинаю работать с AppleScript, так что это было хорошее упражнение, чтобы проверить то, чему я научился.
Можно ли это использовать для получения имени запущенного в данный момент приложения?
Есть ли способ проверить, запущено ли приложение И НЕ находится ли оно на текущем рабочем столе? Я хотел бы новое окно, только если существующее окно находится на другом рабочем столе.

Я хотел бы расширить комментарий от @CoffeeRain и сделать его более ясным в качестве правильного ответа. Вы можете добиться этого без приложения запуска с помощью Mission Control, настроенного на наличие более одного виртуального рабочего стола в Big Sur и более поздних версиях.

Чтобы открыть новое окно на текущем рабочем столе:

  1. Откройте настройки->управление полетом и отключите "При переключении на приложение..."
  2. Теперь предположим, что вы открыли свое приложение на рабочем столе1 и находитесь на рабочем столе2. Щелкните значок приложения в доке и нажмите cmd+n. Это откроет новое окно приложения на рабочем столе2.
Спасибо @bmike за ваше редактирование
Есть ли способ устранить дополнительное действие по нажатию команды + n? Это очень раздражает.
Ну это, не совсем то, что вы хотите, но хоть что-то. Я создал ярлык (в ярлыках. приложение), чтобы связать некоторые сочетания клавиш, чтобы открыть мое приложение (скажем, управление + опция + b). Теперь, чтобы открыть это приложение, мне нужно нажать control+option+b, а затем command+n. Он очень быстро становится автоматическим для вас и достаточно комфортным