Jak zrobić, klikając ikonę w doku == otwórz nowe wystąpienie

16

Mam kilka aplikacji w mojej stacji dokującej, które mogą mieć wiele otwartych instancji (np. Chrome, iTerm, Sublime itp.)

Kiedy klikam jedną z ikon, chcę otworzyć nowe okno (tak się dzieje, jeśli żadne okno nie jest obecnie otwarte). Jednak jeśli instancja jest już otwarta, po prostu przenosi mnie do tej instancji.

Jest to szczególnie denerwujące, gdy instancja znajduje się na innej instancji pulpitu i powoduje zmianę pulpitu.

Czy istnieje ustawienie, które można ustawić, aby po kliknięciu ikony otwierało nowe okno zamiast przekierowywać do już otwartego okna?

JD Isaacks
źródło
2
Mogę pokazać, jak to zrobić, używając odrobiny kodu AppleScript, który można przechowywać w Docku.
Ian C.
Lub możesz po prostu nacisnąć Ctrl + n.
CoffeeRain
3
@CoffeeRain Ctrl-N? Co to jest? Nie robi nic w iTerm i Chrome. Myślę, że miałeś na myśli Cmd-N - ale to działa tylko wtedy, gdy aplikacja jest na pierwszym planie.
Ian C.
@IanC. Przepraszam, tak, miałem na myśli Cmd-N.
CoffeeRain

Odpowiedzi:

17

Możesz połączyć coś za pomocą AppleScript i sprytnego wklejania obrazu ikony. Oto jak zrobiłbyś to dla iTerm / iTerm2.

Otwórz edytor AppleScript i wklej następujący kod 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

Możesz użyć przycisku Uruchom w edytorze, aby sprawdzić, czy działa. Jeśli chcesz otworzyć inny profil, zmień „Domyślny” w wierszu 12 na nazwę profilu, który chcesz otworzyć.

Teraz zapisz ten AppleScript. W oknie dialogowym Zapisz w „Format pliku” u dołu wybierz z listy „Aplikacja”.

Zapisałem mój jako „Nowy iTerm.app” na moim pulpicie.

Teraz za każdym razem, gdy klikam „Nowy iTerm.app” na pulpicie, otrzymuję nowe okno iTerm. Mogę przeciągnąć „Nowy iTerm.app” do mojego Docku, a będzie to ikona Docka, którą mogę kliknąć w dowolnym momencie, gdy chcę otworzyć nowe okno iTerm. Ale ikona jest ogólną ikoną AppleScript.

Zmieńmy go na ikonę iTerm. Wybierz „Nowy iTerm.app” na pulpicie i kliknij Cmd-I, aby wyświetlić ekran właściwości aplikacji.

Teraz przejdź do /Applicationsokna Findera, znajdź iTerm na liście zainstalowanych aplikacji, wybierz je i kliknij Cmd-I, aby otworzyć ekran właściwości aplikacji iTerm.

Kliknij ikonę w oknie informacyjnym iTerm, aby uzyskać wokół niej delikatny niebieski cień. Naciśnij Cmd-C, aby skopiować ikonę do schowka.

Teraz kliknij ikonę w oknie informacyjnym „New iTerm.app” i naciśnij Cmd-V, aby wkleić ikonę iTerm do aplikacji „New iTerm.app”.

Kopiowanie ikony z iTerm do nowego iTerm

Powinien mieć teraz ikonę iTerm.

Jeśli chcesz, możesz przenieść „Nowy iTerm.app” do swojego /Applicationsfolderu. Przeciągnij go z folderu, w którym chcesz go przechowywać, z powrotem do doku, a teraz możesz go kliknąć w Docku, aby za każdym kliknięciem otwierać nowe okno iTerm.

Jeśli chcesz odróżnić ją od działającej ikony Docku iTerm.app, możesz rozważyć wklejenie ikony do edytora obrazów, takiego jak Pixelmator, i dodanie do niej dużej czerwieni +, dzięki czemu będzie ona wyraźnie oznaczona jako ikona, aby nacisnąć nowy iTerm okno zamiast ikony, aby nacisnąć, aby zobaczyć zamykanie, otwórz aplikację iTerm.

Oto kilka skryptów dla innych aplikacji, które pomogą Ci zacząć dostosowywać:

Google Chrome (nowe okno)

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 (nowa karta)

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

Podniosły tekst 2

Niestety wydaje się, że ST2 nie ma dostępnych rozszerzeń AppleScript. Zawsze możesz rzucić okiem na narzędzie wiersza polecenia OS X, które jest dostarczane z ST2 . Możesz to nazwać prostym skryptem w Docku, aby otworzyć nowe okno w ST2. Więc:

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
Ian C.
źródło
2
Świetna odpowiedź z jasnymi przykładami obejmującymi różne przypadki użycia i szczegóły! Dzięki!
Adam Davis,
@AdamDavis Zaczynam od AppleScript, więc przetestowanie tego, czego się nauczyłem, było fajnym ćwiczeniem.
Ian C.
Czy można tego użyć, aby uzyskać nazwę aktualnie uruchomionej aplikacji?
William
Czy istnieje sposób, aby sprawdzić, czy aplikacja działa ORAZ NIE jest ona na bieżącym komputerze? Chciałbym nowe okno tylko wtedy, gdy istniejące okno znajduje się na innym pulpicie.
adamdport