AppleScript: Jak utworzyć nowe okno Findera dla folderu, który jest już otwarty?

1

Problem, na zewnątrz AppleScript:

Aby być świadkiem problemu 1 , wykonaj następujące czynności:

  • Kliknij dwukrotnie folder istniejący na pulpicie. Spowoduje to otwarcie tego folderu w Finder.app.

  • Wróć do pulpitu i ponownie kliknij dwukrotnie ten sam folder.

  • Zamiast druga tworzone okno, wcześniej utworzone okno zostanie przeniesione na pierwszy plan.


Obejście, na zewnątrz AppleScript:

Więc co robisz, jeśli chcesz dwa Okna wyszukiwarki tego samego folderu?

Istnieje kluge:

Utwórz nowe okno Findera, otwierając dowolny inny folder. W tym nowym oknie, po przejściu do żądanego folderu, pomyślnie zmienisz to okno na żądany folder i będziesz mieć dwa okna tego folderu.

Aby przejść do żądanego folderu w nowym oknie Findera, każdy metoda zadziała:

  • Kliknij folder, jeśli jest zaznaczony zakładką w Pasek boczny (jeśli włączone, znajduje się po lewej stronie okna).

  • Kliknij folder, jeśli zdarzy się w folderze pasek ścieżki (jeśli włączone, znajduje się w dolnej części okna).

  • Użyj wbudowanego okna pasek wyszukiwania .

  • Lub po prostu przejdź do folderu ręcznie.


Problem w AppleScript:

Następujący kod AppleScript otworzy folder w nowym oknie Findera:

set targetFolder to POSIX file "/Users/Me/Desktop/MyFolder"

tell application "Finder"
    open targetFolder
    activate
end tell

W taki sam sposób, w jaki Finder zachowuje się nieprogramowo (jak zdefiniowano powyżej), jeśli uruchomisz ten kod po raz drugi (bez zamykania wcześniej utworzonego okna Findera), to wcześniej utworzone okno zostanie przeniesione na pierwszy plan.


Pożądane rozwiązanie AppleScript:

Oto pożądane zachowanie:

  • Jeśli targetFolder już istnieje w każdy otwórz okno Findera (w tym każde zminimalizowane okno Findera), chciałbym, aby AppleScript utworzył nowe okno za to samo targetFolder (tj. duplikat okna).

W idealnej sytuacji chciałbym utworzyć duplikat okna, bez uciekanie się do „sztuczki”, którą wytyczyłem powyżej (tj. otwarcie dowolnego inny najpierw folder, przed otwarciem żądanego folderu). Jednak zrozumiem, jeśli nie jest to możliwe (tj. Jeśli metoda programowa musi powielać metodę ręczną).


1 Rozumiem, że to zachowanie w żaden sposób nie jest błędem ani „prawdziwym” problemem. Apple wyraźnie zaprogramował tę akcję celowo; prawdopodobnie ustalili, że większość ludzi nie potrzebuje lub nie chce używać zbędnych okien Findera.


OS X El Capitan, wersja 10.11.6.


rubik's sphere
źródło

Odpowiedzi:

3

Myślę, że ten kod robi to, co chcesz.

Kod:

set targetFolder to POSIX file "/Users/Me/Desktop/MyFolder"

tell application "Finder"
    set finderFolder to item targetFolder
    set lstTargets to target of every Finder window
    if {finderFolder} is in lstTargets then
        set target of (make new Finder window) to targetFolder
    end if
end tell
unlocked2412
źródło
To rozwiązanie dokładnie czego pragnę. To moje idealne rozwiązanie; skrypt otwiera folder bez konieczności otwierania innego folderu. Zachowuje także mój preferowany Finder „Wyświetl jako” metoda (co się zdarza Lista widok). W końcu zdałem sobie sprawę, że if statement nie jest nawet wymagane, aby złapać przypadek folderu już otwartego, ponieważ twój set target of metoda działa poprawnie, niezależnie od tego. Dziękuję Ci!
rubik's sphere
0

To rozwiązanie daje ci miejsce, do którego chcesz się udać, ale korzysta z obejścia. Próbowałem ustawić właściwość „target” podczas tworzenia okna, ale nie miało to żadnego skutku. Zostawiłem tę część w skrypcie, ale skomentowałem ją w celach informacyjnych.

set targetFolder to ((path to desktop) as text) & "testFolder:"

tell application "Finder"
    set aWin to make new Finder window --with properties {target:targetFolder}
    set aWin's target to targetFolder
end tell

Wypróbowałem to także wywołując w wierszu poleceń skrypt do powłoki, ale miał taki sam efekt, jak wymieniony powyżej w „Problemie”.

Hurston
źródło
0

Użyj reveal polecenie, aby uniknąć zachowania open dowództwo:

set targetFolder to POSIX file "/Users/Me/Desktop/MyFolder"
tell application "Finder"
    reveal targetFolder
    activate
end tell

Uwaga: zawsze otwiera okno w widoku kolumny

jackjr300
źródło