Pamiętaj o rozmiarach i położeniu okna podczas odłączania i ponownego podłączania drugiego monitora

99

Oto coś, co jest do bani:

  1. Podłącz monitor zewnętrzny do laptopa (w moim przypadku Mac OS X Leopard).
  2. Ułóż okna tak, aby IDE znajdowało się na jednym ekranie, a przeglądarka na innym. (Itd. Itp. Zmiana rozmiaru, zmiana kolejności, zamieszanie, zamieszanie, zamieszanie.)
  3. Odłącz monitor, aby pobiec na spotkanie lub cokolwiek innego.
  4. Idź 1.

Chciałbym zastąpić krok 2 słowem „komputer pamięta dokładnie, jak to miałem i po prostu odkłada to w ten sposób”.

(Osobiście potrzebuję tylko rozwiązania dla komputerów Mac, ale zbieranie rozwiązań dla innych systemów tutaj może być przydatne dla innych. Jestem pewien, że jest to powszechny problem).

dreeves
źródło

Odpowiedzi:

56

Zobacz Stay by Cordless Dog. Wierzę, że robi dokładnie to, czego szukasz.

Tony Arnold
źródło
2
Próbowałem tego. Nie działa w systemie Windows X11, ale poza tym wydaje się być tak reklamowany. Dzięki za wskaźnik! Być może jest to najbliższe rozwiązanie dla komputerów Mac.
dreeves
Okna X11 nie są „prawdziwymi” instancjami NSWindow (przynajmniej nie były ostatnio sprawdzane), więc nic dziwnego, że Stay nie chce mieć z nimi nic wspólnego :) Cieszę się, że udało się inaczej.
1
Wygląda to dobrze, ale nie działa z aplikacjami pełnoekranowymi w Lionie. Mam Safari w trybie pełnoekranowym, gdy mam 1 ekran, a po podłączeniu drugiego ekranu chcę wyjść z trybu pełnoekranowego i przenieść Safari na drugi ekran. Stay nie przenosi żadnej aplikacji pełnoekranowej.
1
Wyglądało to na dobre dopasowanie. Ale z 3 zewnętrznymi wyświetlaczami często miał problemy z pozycjami i po prostu rozwiązał problem do 50%. Więc nadal musiałem wykonywać dużo pracy ręcznej. Właśnie go odinstalowałem. Aha, i to tylko 30-dniowy okres próbny!
Ernst Ernst
15

Slate to bardzo potężna darmowa aplikacja na komputery Mac, która robi dokładnie to, co chcesz. Po podłączeniu dodatkowego monitora automatycznie wykrywa nowy monitor , a wszystkie okna zostaną przeniesione i zmienione tak, jak lubisz. Możesz zdefiniować niestandardowe pozycje i rozmiary dla wszystkich swoich aplikacji, w tym na pełnym ekranie, na połowie ekranu i na podstawie siatki.

Jedną z najfajniejszych rzeczy w Slate jest to, że możesz definiować różne układy na podstawie liczby podłączonych monitorów . Na przykład, jeśli używasz laptopa samodzielnie, możesz chcieć, aby wszystkie aplikacje wypełniały cały ekran. Ale gdy masz większy monitor dodatkowy, możesz podzielić ekran między przeglądarkę, pocztę i muzykę. Slate robi to łatwo.

Możesz także zdefiniować skróty klawiaturowe dla określonych układów i działań, takich jak przesuwanie i zmiana rozmiaru okien o określony procent.

Poniżej znajduje się mój plik konfiguracyjny. Trzymam wszystkie moje aplikacje na pełnym ekranie na wszystkich moich monitorach, ale możesz to zmienić, aby były w połowie lub w innym rozmiarze:

# Monitor Aliases
alias mon-laptop    0    # variable for my laptop monitor
alias mon-hp        1    # my external HP monitor

# Window Position Regions
alias hp-full        move screenOriginX;screenOriginY screenSizeX;screenSizeY         ${mon-hp}
alias hp-left        move screenOriginX;screenOriginY screenSizeX/2;screenSizeY         ${mon-hp}
alias hp-right       move screenOriginX+screenSizeX/2;screenOriginY screenSizeX/2;screenSizeY         ${mon-hp}
alias laptop-full        move screenOriginX;screenOriginY screenSizeX;screenSizeY         ${mon-laptop}
alias laptop-left        move screenOriginX;screenOriginY screenSizeX/2;screenSizeY         ${mon-laptop}
alias laptop-right       move screenOriginX+screenSizeX/2;screenOriginY screenSizeX/2;screenSizeY         ${mon-laptop}
alias laptop-righttop    move screenOriginX+screenSizeX/2;screenOriginY screenSizeX/2;screenSizeY/2       ${mon-laptop}
alias laptop-rightbottom move screenOriginX+screenSizeX/2;screenOriginY+screenSizeY/2    screenSizeX/2;screenSizeY/2       ${mon-laptop}

# Window layouts for when I have 2 monitors
layout 2monitor 'Google Chrome':REPEAT ${hp-full}
layout 2monitor 'iCal':REPEAT ${hp-full}
layout 2monitor 'Coda':REPEAT ${hp-full}
layout 2monitor 'Mail':REPEAT ${laptop-full}
layout 2monitor 'Rdio':REPEAT ${laptop-full}
layout 2monitor 'Spotify':REPEAT ${laptop-full}
layout 2monitor 'Evernote':REPEAT ${laptop-full}

# Single monitor window layouts
layout 1monitor 'Google Chrome':REPEAT ${laptop-full}
layout 1monitor 'iCal':REPEAT ${laptop-full}
layout 1monitor 'Coda':REPEAT ${laptop-full}
layout 1monitor 'Mail':REPEAT ${laptop-full}
layout 1monitor 'Rdio':REPEAT ${laptop-full}
layout 1monitor 'Spotify':REPEAT ${laptop-full}
layout 1monitor 'Evernote':REPEAT ${laptop-full}

# Keyboard shortcuts for each layout
bind l:shift;ctrl layout 2monitor
bind g:shift;ctrl grid padding:5 0:2,1 1:2,2

# Auto-detect when a monitor is plugged in or out
default 2monitor count:2
default 1monitor count:1

Oto lista funkcji ze strony GitHub firmy Slate:

  • Wysoce konfigurowalny
  • Powiąż klawisze, aby:
    • przenosić i / lub zmieniać rozmiar okien
    • kierunkowe skupianie okien
    • aktywuj gotowe układy
    • tworzyć, usuwać i aktywować migawki bieżącego stanu okien
  • Ustaw domyślne układy dla różnych konfiguracji monitora, które będą aktywowane po wykryciu tej konfiguracji.
  • Wskazówki do okien: intuicyjny sposób zmiany ostrości okna
  • [Beta] Lepszy, bardziej konfigurowalny przełącznik aplikacji.

Oto świetny samouczek, jak najlepiej wykorzystać Slate.

Ben
źródło
Czy pamięta, w jaki sposób zostały ustawione okna, kiedy monitory zewnętrzne były ostatnio podłączone i po prostu je przywracały? Aplikacja „Stay” prawie to robi, ale wciąż nie zapamiętuje okien (szczególnie Chrome), więc wciąż szukam czegoś lepszego.
dreeves
@dreeves Tak, działa dla mnie. Po prostu pomyślnie to zrobiłem ręcznie, używając elementów menu Slate „Take Snapshot” i „Activate Snapshot”; kliknięcie ich przed i po uśpieniu komputera spowoduje zapisanie i przywrócenie wszystkich pozycji okna. Z dokumentacji wynika, że ​​Slate może automatycznie wykonać „Aktywuj migawkę” za pomocą swojej defaultdyrektywy . Nie wiem, czy możesz zautomatyzować część „Take Snapshot”.
Rory O'Kane,
2
Chcę zauważyć, że w przypadku użycia PO mogą kliknąć po prostu zapisz migawkę i przywróć migawkę w menu. Tak długo, jak istnieje tylko jedna konfiguracja okna, powinna działać dobrze, bez ingerowania w cokolwiek innego.
Muhd,
3
Łupek nie jest już utrzymywany, sugerują teraz skorzystanie z Hammerspoon.
pewnościąakey
8

Rozwiązałem to za pomocą małego AppleScript i małego darmowego narzędzia Quicksilver.

  1. Zapisz ten mały AppleScript w miejscu, które nie zmieni się na twoim komputerze:

    try
        tell application "Adium"
            activate
            tell window "contacts"
                set the bounds to {1281, 200, 1460, 850}
            end tell
            tell chat windows
                set the bounds to {1281, 800, 1800, 1200}
            end tell
        end tell
    end try
    
    try
        tell application "iTunes"
            activate
            set the bounds of the first window to {1750, 520, 2700, 1150}
        end tell
    end try
    
    try
        tell application "Terminal"
            activate
            set the bounds of the first window to {2450, 320, 3180, 950}
        end tell
    end try
    
    try
        tell application "Firefox"
            activate
            set the bounds of the first window to {1460, 20, 2800, 950}
        end tell
    end try
    
  2. Będziesz musiał dostosować aplikacje, które chcesz na monitorze, a okno ogranicza je tak, jak lubisz. Jestem programistą i powyższa konfiguracja polega na tym, jak uruchamiam mój drugi monitor.

  3. Zainstaluj Quicksilver .

    Postanowiłem, aby nie było to widoczne w Docku i po prostu działałem jako mały demon paska zadań

  4. Skonfiguruj kluczowe polecenie w Quicksilver, a następnie przeciągnij i upuść AppleScript z kroku 1 do okna jako czynność do wykonania. Związałem to z CommandShiftA. Działa świetnie!

użytkownik3439894
źródło
3
Nie jest szczególnie skalowalny, jeśli masz do zarządzania dużą liczbę aplikacji. Nie jest też łatwe do zarządzania! Twarde kodowanie naprawdę nie jest zabawne.
fatuhoku,
Czy możesz ustawić pulpit, na którym aplikacja będzie wyświetlana?
niebezpiecznedave
3

Przed odłączeniem monitora zamknij wszystko, co nie jest całkowicie na głównym monitorze. Aplikacje na ogół zapisują swój stan (w tym umiejscowienie okna) po zamknięciu i czytają go po otwarciu, więc jeśli drugi monitor jest obecny w obu tych czasach, wszystko powinno być w porządku.

Możesz skorzystać z aplikacji, które pozwalają na otwarcie więcej niż jednej instancji na raz, ale zapisz stan tylko przy zamknięciu. Zamknij instancję wielu monitorów (co powoduje zapisanie stanu). Odłącz drugi monitor. Jeśli masz uruchomioną drugą instancję, należy ją zmienić na głównym monitorze lub uruchomić inną. Nie zamykaj tej instancji przed ponownym podłączeniem drugiego monitora i uruchomieniem innej instancji (która po uruchomieniu odczyta konfigurację wielu monitorów). Następnie możesz zamknąć instancję z jednym monitorem (zapisując ten stan), a następnie instancję z wieloma monitorami (nadpisując stan z jednego monitora).

Bardziej złożona opcja może obejmować ustalenie, gdzie zapisany jest stan, utworzenie kopii zapasowej i napisanie pliku wsadowego / skryptu w celu przywrócenia go przed otwarciem aplikacji, co umożliwi utworzenie łącza umożliwiającego wykonanie tego automatycznie po uruchomieniu aplikacji .

Wreszcie może istnieć takie narzędzie dla Twojej platformy, lub napisanie takiego narzędzia może nie być zbyt skomplikowane. W systemie Windows istnieje program o nazwie ShiftWindow, który może zmieniać położenie okien podczas uruchamiania aplikacji lub na określonym skrócie klawiszowym. Obawiam się, że nie znam MacOS wystarczająco dobrze, aby stwierdzić, czy istnieje podobne narzędzie. Jest to prawdopodobnie idealne rozwiązanie, zaraz po tym, jak system operacyjny bezpośrednio obsługuje taką funkcję.


źródło
1
Dzięki! Nie była to odpowiedź, na którą liczyłem, ale dobry trop!
dreeves
3

Właśnie śledziłem http://cordlessdog.com/stay/ , działa świetnie dla mnie, z niewielkim opóźnieniem

Po zakończeniu instalacji na komputerze Mac możesz go uruchomić i przechowywać okna w dowolny sposób. Tak więc za każdym razem, gdy odłączysz wyświetlacze i połączysz z powrotem, przywrócisz wszystkie okna.

Być może będziesz musiał dodać stay jako aplikację startową, ponieważ będziesz musiał uruchamiać ją za każdym razem, gdy uruchomisz ponownie komputer Mac.

kvm006
źródło
2

Naprawiłem to bez żadnej zewnętrznej aplikacji.

Wszystko, co musisz zrobić, to upewnić się, że Twój laptop to „Desktop 1”, a monitor zewnętrzny „Desktop 2”

możesz to zrobić, przenosząc biały pasek menu na ekran laptopa w Preferencjach systemowych> Wyświetlacze> Układ

Moosa Ahmed
źródło
1

Przynajmniej w systemie Windows wiele aplikacji zostanie przywróconych, jeśli zmaksymalizujesz je przed przełączeniem monitorów. Zostaw je w spokoju podczas spotkania, a następnie przywróć je po ponownym połączeniu.

To wciąż niekompletna poprawka (i kłopot), ale to jedyna rzecz, jaką wiem, aby zrobić, jeśli chcę mieć szansę na wskrzeszenie moich starannie umieszczonych okien. ShiftWindow brzmi intrygująco ...

A jeśli przejdziesz z dwóch monitorów na jeden, Alt + Spacja + M, a następnie klawisze strzałek to ratowanie życia (ponownie Windows, przepraszam), jeśli „zgubisz” swoje okna.


źródło
1

http://www.irradiationsoftware.com/twoup/index.html

Znalazłem to za pośrednictwem Lifehackera i działa świetnie dla mnie. Używam pro wersji SizeUp w przeciwieństwie do darmowego TwoUp i jest idealny.


źródło
Mówisz, że to rozwiązuje problem, który postawiłem? Strona, do której prowadzisz link, najwyraźniej nie wspomina o tym.
dreeves
1
Nie, to wcale nie rozwiązuje problemu. SizeUp przyspiesza przesuwanie okna tam, gdzie chcesz, ale nadal musisz ręcznie przełączać się między poszczególnymi oknami i informować SizeUp, gdzie chcesz je przenieść.
Rory O'Kane,
1

Jestem użytkownikiem systemu Windows i szukałem sposobu wyłączenia nowej funkcji systemu Windows 7, aby przenieść wszystkie okna z dala od odłączonego monitora zewnętrznego. Znalazłem pokwitowanie (dla kart graficznych ATI), aby ustawić wszystkie wartości DMMEnableDDCPolling w rejestrze na 0. To wyłącza automatyczne sprawdzanie, czy monitor jest wyłączony. Teraz, jeśli monitor zostanie odłączony i ponownie podłączony, wszystkie okna pozostają w tej samej pozycji.

Oto odpowiedź, która pomogła mi: https://superuser.com/questions/120983/how-to-disable-monitor-auto-detection-in-windows-7 (odpowiedź Alexa)

Społeczność
źródło
1
To nie ma nic wspólnego z komputerem Mac?
5
Nie .. ale pytanie oznaczono również jako „windows” (chociaż może OP odnosiło się do okien programu ;)). W każdym razie w systemie Windows jest kilka przydatnych narzędzi do tego zadania. Ja osobiście korzystam z ZMover Basty i działa dobrze. Inną alternatywą jest WindowManager DeskSoft . Ale to oczywiście nie pomoże użytkownikom OSX.
Ville,