Запомните размеры и расположение окон при отключении и повторном подключении второго монитора


97

Вот то, что отстой:

  1. Подключите внешний монитор к ноутбуку (в моем случае Mac OS X Leopard).
  2. Расположите окна так, чтобы на одном экране была IDE, а на другом - браузер. (И т. Д. Изменение размера, перестановка, суета, суета, суета.)
  3. Отключите монитор, чтобы бежать на встречу или что-то еще.
  4. Перейти к 1.

Я хотел бы заменить шаг 2 на «компьютер точно помнит, как у меня это было, и просто возвращает его обратно».

(Мне лично нужно только решение для Mac, но сбор решений для других систем здесь может быть полезен для других. Я уверен, что это общая проблема.)

Ответы:


55

Посмотрите на Stay by Cordless Dog. Я считаю, что это именно то, что вы ищете.


2
Я попробовал это. Это не работает для окон X11, но в остальном кажется таким, как рекламируется. Спасибо за указатель! Может быть, это самое близкое из возможных решений для Mac на данный момент.
dreeves

Окна X11 не являются «настоящими» экземплярами NSWindow (по крайней мере, их не было в прошлый раз, когда я проверял), поэтому неудивительно, что Stay не хочет иметь с ними ничего общего :) Рад, что все получилось иначе!

1
Это выглядит хорошо, но не работает с полноэкранными приложениями в Lion. У меня Safari в полноэкранном режиме, когда у меня есть 1 дисплей, и после того, как я прикрепил 2-й дисплей, я хочу выйти из полноэкранного режима и переместить Safari на второй экран. Пребывание не движется ни одно полноэкранное приложение.

1
Казалось, хорошо подходит. Но с 3 внешними дисплеями у него часто возникали проблемы с позициями и просто решали проблему до 50%. Так что мне все еще приходилось делать много ручной работы. Я просто удалил это. Ох, и это только 30-дневная пробная версия!
Эрнст Эрнст

15

Slate - очень мощное бесплатное приложение для Mac, которое делает именно то, что вы хотите. Когда вы подключаете дополнительный монитор, он автоматически обнаруживает новый монитор , и все ваши окна будут перемещаться и изменяться в размере так, как вам нравится. Вы можете определить собственные позиции и размеры для всех ваших приложений, включая полноэкранный, полуэкранный и на основе сетки.

Одна из самых крутых особенностей Slate - это то, что вы можете определять различные макеты в зависимости от того, сколько мониторов вы подключили . Например, если вы используете свой ноутбук самостоятельно, вы можете захотеть, чтобы все ваши приложения занимали весь экран. Но если у вас есть дополнительный монитор большего размера, вы можете разделить экран между браузером, почтой и музыкой. Сланец делает это легко.

Вы также можете определить сочетания клавиш для определенных раскладок и действий, таких как перемещение и изменение размеров окон на определенный процент.

Ниже мой файл конфигурации. Я держу все свои приложения на полном экране на всех моих мониторах, но вы можете изменить его, чтобы сделать их наполовину или другого размера:

# 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

Вот список возможностей со страницы Slate на GitHub:

  • Высоко настраиваемый
  • Привязать нажатия клавиш к:
    • переместить и / или изменить размер окна
    • направленные окна
    • активировать предустановленные макеты
    • создавать, удалять и активировать снимки текущего состояния окон
  • Установите макеты по умолчанию для разных конфигураций монитора, которые будут активироваться при обнаружении этой конфигурации.
  • Подсказки окна: интуитивно понятный способ изменить фокус окна
  • [Бета] Лучший, более настраиваемый, переключатель приложений.

Вот отличный урок о том, как максимально использовать Slate.


Может ли он вспомнить, как были расположены окна, когда внешние мониторы были подключены в последний раз, и просто восстановить их? Приложение «Stay» почти делает это, но оно не запоминает окна (особенно Chrome), поэтому я все еще ищу что-то лучшее.
dreeves

@dreeves Да, это работает для меня. Я просто успешно сделал это вручную, используя пункты меню Slate «Сделать снимок» и «Активировать снимок»; Если вы щелкнете по ним до и после того, как переведите компьютер в спящий режим, вы сохраните и восстановите все позиции окна. Из документов видно , что Slate может делать «Активировать снимок» автоматически с помощью своей defaultдирективы . Я не знаю, можете ли вы автоматизировать часть «Снимок».
Рори О'Кейн

2
Я хочу отметить, что в случае использования ОП они могут просто нажать кнопку «Сохранить снимок» и восстановить снимок в меню. Пока есть только одна конфигурация окна, которую вы хотите, она должна работать без каких-либо проблем.
Muhd

2
Сланец больше не поддерживается, они предлагают использовать Hammerspoon сейчас.
конечно же,

8

Я решил эту проблему с помощью небольшого AppleScript и небольшой бесплатной утилиты Quicksilver.

  1. Сохраните этот небольшой AppleScript в месте, которое не изменится на вашем компьютере:

    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. Вам нужно будет настроить, какие приложения вы хотите видеть на своем мониторе, и окно будет соответствовать вашим предпочтениям. Я программист, и вышеописанная конфигурация - это то, как я запускаю свой второй монитор.

  3. Установите Quicksilver .

    Я решил сделать его невидимым в Dock, а просто запустить как маленький демон на панели задач

  4. Установите ключевую команду в Quicksilver и перетащите ваш AppleScript из шага 1 в окно в качестве действия, которое нужно выполнить. Я связал это с CommandShiftA. Работает отлично!


3
Не особенно масштабируемый, если у вас есть достаточное количество приложений для управления. И это не легко управлять! Жесткие границы действительно неинтересны.
фатухоку

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

3

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

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

Более сложный вариант может включать определение места сохранения состояния, его резервное копирование и написание пакетного файла / сценария для его восстановления перед открытием приложения, что позволит вам создать ссылку для автоматического выполнения этого при запуске приложения. ,

Наконец, может быть такая утилита для вашей платформы, или ее написание может быть не слишком сложным. Для Windows существует программа ShiftWindow, которая может изменять положение окон либо при запуске приложения, либо по определенной горячей клавише. Боюсь, я недостаточно хорошо знаю MacOS, чтобы сказать, существует ли подобная утилита. Вероятно, это идеальное решение, уступающее только тому, чтобы ОС поддерживала такую ​​вещь напрямую.


1
Спасибо! Не тот ответ, на который я надеялся, а хороший результат!
погружается

2

Я просто следовал http://cordlessdog.com/stay/ , отлично работает для меня, хотя и с небольшим отставанием

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

Возможно, вам придется добавить остаться в качестве вашего запуска приложения, потому что вам придется запускать его каждый раз, когда вы перезагружаете свой Mac.


1

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

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

И если перейти от двух мониторов к одному, Alt + пробел + M, то стрелки-стрелки спасут жизнь (опять Windows, извините), если вы «потеряете» свои окна.


1

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

Я нашел это через Lifehacker, и он прекрасно работает для меня. Я использую профессиональную версию SizeUp в отличие от бесплатной TwoUp, и она идеальна.


Вы говорите, что это решает проблему, которую я поставил, хотя? Страница, на которую вы ссылаетесь, похоже, ничего об этом не упоминает.
dreeves

1
Нет, это совсем не решает проблему. SizeUp позволяет быстрее перемещать окно туда, куда вы хотите, но вам все равно придется вручную переключаться между каждым окном и сообщать SizeUp, куда вы хотите переместить каждое из них.
Рори О'Кейн

1

Я пользователь Windows и искал, как отключить новую функцию Windows 7, чтобы отодвинуть все окна от неподключенного внешнего монитора. Я нашел квитанцию ​​(для видеокарт ATI), чтобы установить все значения DMMEnableDDCPolling в реестре на 0. Это отключает автоматическую проверку, если монитор выключен. Теперь, если монитор отключен и подключен снова, все окна остаются в том же положении.

Вот ответ, который мне помог: https://superuser.com/questions/120983/how-to-disable-monitor-auto-detection-in-windows-7 (ответ от Алекса)


1
Это не имеет ничего общего с Mac?

4
Нет ... но вопрос был помечен также как "окна" (хотя, возможно, ОП ссылался на окна программы ;)). В любом случае, для Windows есть несколько полезных утилит для этой задачи. Я лично использую ZMover Басты, и он работал хорошо. Другой альтернативой является WindowManager от DeskSoft . Но это, конечно, не поможет пользователям OSX.
Вилле
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.