Poniższe informacje pokazują, jak używać hsscreens i AppleScript, aby programowo przełączać te dwa ustawienia, korzystając z mojego MacBooka Pro, który zwykle znajduje się po lewej stronie mojego wyświetlacza Thunderbolt, oraz mojego wyświetlacza Thunderbolt. jest obecnie zaaranżowana. Efektem końcowym jest aplikacja AppleScript, która po uruchomieniu po prostu przełącza się między tymi dwoma układami. Tę aplikację można uruchomić na wszystkie normalne sposoby, w jakie można uruchomić każdą inną aplikację.
Na poniższym obrazku widać normalne i odwrócone rozmieszczenie ekranów i paska menu, pokazujące różnice między moim MacBookiem Pro a wyświetlaczem Thunderbolt.
Ta aplikacja AppleScript, wraz z binarnym plikiem wykonywalnym hsscreens
, programowo przełącza między dwoma układami pokazanymi na powyższym obrazku, przesuwając wyświetlacz MacBooka Pro w prawo lub w lewo od wyświetlacza Thunderbolt, zachowując Pasek menu na wyświetlaczu MacBooka Pro.
Aby to zakodować , musiałem określić, jakie jest obecne ustawienie , a następnie odpowiednio postępować. Aby to zrobić, dwukrotnie użyłem hmscreens -info
w terminalu, raz w każdym układzie .
Patrząc na otrzymane informacje, zobaczyłem informację, dla której mogłem grep
ustawić flagę , z którą chcesz się przełączać.
Wyjście hmscreens -info
w normalnym układzie ekranów:
$ hmscreens -info
Identyfikator ekranu: 68822100
Rozmiar: {1440, 900}
Pozycja globalna: {{0, 0}, {1440, 900}}
Przestrzeń kolorów: NSCalibratedRGBColorSpace
BitsPerPixel: 32
Rozdzielczość (dpi): {144, 144}
Częstotliwość odświeżania: 0
Wykorzystuje Quartz Extreme: TAK
ID ekranu: 68695180
Rozmiar: {2560, 1440}
Pozycja globalna: {{1440, -540}, {4000, 900}}
Przestrzeń kolorów: NSCalibratedRGBColorSpace
BitsPerPixel: 32
Rozdzielczość (dpi): {72, 72}
Częstotliwość odświeżania: 0
Wykorzystuje Quartz Extreme: TAK
$
Dane wyjściowe hmscreens -info
w odwróconym układzie wyświetlaczy:
$ hmscreens -info
Identyfikator ekranu: 68822100
Rozmiar: {1440, 900}
Pozycja globalna: {{0, 0}, {1440, 900}}
Przestrzeń kolorów: NSCalibratedRGBColorSpace
BitsPerPixel: 32
Rozdzielczość (dpi): {144, 144}
Częstotliwość odświeżania: 0
Wykorzystuje Quartz Extreme: TAK
ID ekranu: 68695180
Rozmiar: {2560, 1440}
Pozycja globalna: {{-2560, -540}, {0, 900}}
Przestrzeń kolorów: NSCalibratedRGBColorSpace
BitsPerPixel: 32
Rozdzielczość (dpi): {72, 72}
Częstotliwość odświeżania: 0
Wykorzystuje Quartz Extreme: TAK
$
Jeśli było to dla mnie oczywiste, musiałem użyć informacji z Global Position:
, aby określić bieżący układ wyświetlaczy. Od razu zauważyłem, że -2560
jest unikalnym elementem między wyjściem a sposobem określenia bieżącego układu . Jeśli grep
ed dla -2560
i znalazłem to, to znajdowałem się w odwróconym układzie , a nie w normalnym układzie . Więc to jest to, czego użyłem do określenia aktualnego układu i przełączania się między tymi dwoma układami . (Uwaga: -2560
nie było jedyną unikalną rzeczą, po prostu na tym się skupiłem jako pierwszy i uznałem, że łatwy sposób na przeanalizowanie informacji, aby ustawić flagę przełączania .
Zapisz poniższy kod AppleScript jako aplikację i umieść kopię binarnego pliku wykonywalnego hmscreens
w <appname>.app/Contents/Resources
folder. W ten sposób aplikacja np. / Applications / Toggle Displays Arrangements.app
jest samowystarczalny i niezależny od zewnętrznej lokalizacji binarnego pliku wykonywalnego hmscreens
.
Oczywiście musisz określić, po co grep
lub użyć innej metody, aby ustawić flagę przełączania i zmodyfikować kod poniżej odpowiednio do twoich szczególnych potrzeb (jeśli są inne niż ten przypadek użycia lub inny przypadek użycia).
Kod AppleScript :
ustaw hms na (ścieżka do mnie jako tekst) & "Zawartość: Zasoby: hmscreens"
ustaw screenIDs na akapity (czy w skrypcie powłoki w formacie POSIX ścieżki hms & "-screenIDs")
jeśli (liczba screenIDs) jest większa niż 1 wtedy
ustaw normalOrentation na "1"
próbować
ustaw normalOrentation, aby wykonywał skrypt powłoki w postaci cytowanej ścieżki POSIX hms & "-info | grep '\\ - 2560'"
koniec próby
jeśli normalOrentation ma wartość „1”, to
ustaw othersPosition na „left”
jeszcze
ustaw othersPosition na „właściwą”
koniec, jeśli
ustaw secondScreen na element 1 z screenIDs
do skryptu powłoki cytuje postać POSIX ścieżki hms & "-setMainID" & secondScreen & "-othersStartingPosition" & othersPosition
jeszcze
Powiedz mi
Aktywuj
okno dialogowe wyświetlacza "Do komputera podłączony jest tylko jeden ekran!" buttons {"OK"} domyślny przycisk 1 z opisem ikony
koniec powiedz
koniec, jeśli
Poniższy obrazek przedstawia podświetlanie składni kodu AppleScript.