Закрытие приложений Mac OS X после закрытия последнего окна

45

Я знаю, что это просто любимая мозоль, но я ненавижу то, что Preview.app Mac OS X остается открытым, когда у него нет открытых окон. Есть ли способ закрыть его, когда закрыто его последнее окно?

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

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

wfaulk
источник

Ответы:

22

Попробуйте RedQuits:

RedQuits поможет вам, если вы когда-нибудь пытались закрыть приложение с помощью красной кнопки и задавались вопросом, почему оно все еще открыто. С RedQuits все программы теперь закрываются, когда для этой программы остается только одно окно. Если вы хотите выйти и закрыть все открытые окна программы, просто снимите флажок «Выход только тогда, когда для этого приложения осталось 1 окно». в настройках.

msaied
источник
3
Что забавно, так это то, что сам RedQuits не выходит при нажатии красной кнопки, говорится в инструкции. Все просто, что приятно, но без белого списка.
Михаил Озерянский
RedQuits закрывает приложение, если вы нажмете красную кнопку выхода, но не при закрытии последнего окна с помощью Cmd + W.
Сампо
23

Короче говоря: нет.

- Ответ останавливается здесь. Все, что следует, является моей попыткой объяснить, почему.

Что вы испытываете, так это философия Mac о том, как должны вести себя приложения. Те , кто будут закрыты после последнего окна пропадает не ведут к Руководству интерфейса Mac (хотя есть много там). // Редактировать: это не совсем правильно, см. Сообщения ниже.

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

До тех пор это помогает привыкнуть к Command-Q (клавиша Apple и q), чтобы закрыть каждое приложение - и Command-W только для активного окна.

волк
источник
1
Мое личное мнение как комментарий: Работаю с обеими платформами каждый день: я к этому привык. Не имеет особого значения, и, как всегда, в этом есть две стороны. Во время работы приложения каждый последующий запуск выполняется очень быстро. Те приложения, которые я использую время от времени, могут быть закрыты сразу после их использования. Я привык к Apple-Q / Apple-W на Mac гораздо быстрее, чем Alt-F4 / Strg-F4 на Windowsers.
Вольф
28
Можно также нажать Q, используя Command-Tab для переключения приложений (таким образом, удерживая Command), чтобы выйти из приложения, которое в данный момент выделено в этом переключателе приложений.
Арджан
+1 за комментарий Арджана. Это удивительный способ закрыть огромное количество приложений одновременно. Вы делаете это всякий раз, когда вам нужно освободить память.
Дэн Розенстарк
2
Что меня действительно по-настоящему раздражало, так это то, что свернутые приложения появлялись в переключателе приложений, но не могли быть восстановлены при их выборе. Это я нашел очень противоречивым. Совсем недавно - буквально через годы использования - я столкнулся с нажатием ALT, в то время как переключение на (свернутое) приложение восстановит его. Hooooray !!!
Вольф
15
Честно говоря, меня не все интересует, является ли симптом нормальным. Меня интересует, как избавиться от симптома.
wfaulk
3

Я написал приложение AppleScript, чтобы сделать это для вас.

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

Чтобы изменить белый список во время его работы, щелкните значок в доке, чтобы снова появилось диалоговое окно выбора.

Чтобы выйти, щелкните правой кнопкой мыши значок Dock и выберите «Выход»

AppleScript источник и приложение: http://files.me.com/kioarthurdane/6kjl9k

dotHTM
источник
Похоже, хорошая идея, но она не работает. Мне пришлось изменить «имя» на «отображаемое имя» в refreshWindowedProcess (), чтобы он не спрашивал «где это приложение», но даже тогда, похоже, оно никогда не завершает работу.
wfaulk
Какую версию OS X вы используете? Я написал свой сценарий под Snow Leopard, не уверенный, произошли ли серьезные изменения в AppleScript.
dotHTM
Неважно, OmniGraffle Pro только что сделал это со мной. Очень забавно, что те случаи, когда имя в Finder не является настоящим именем файла ... Я посмотрю, смогу ли я написать исправление для этого, используя вместо этого идентификаторы пакета.
dotHTM
Обновлено с использованием идентификаторов пакетов вместо имени приложения (которое может отличаться от имени приложения). В источнике есть комментарий о двух закомментированных строках, в которых будет представлен список окон в каждом идентификаторе пакета. Я заметил, что многие приложения сообщают о том, что открыто хотя бы одно окно, хотя видимое окно не открыто. NetNewsWire - одно из таких приложений, имеющих длинный список окон даже после того, как главное окно «закрыто». Список совпадений - это еще одно приложение, которое сохраняет свое единственное окно всегда открытым.
dotHTM
Подсчет Windows = 0 кажется наиболее очевидным способом определения вашего состояния для выхода, но, похоже, это не подходит для всех приложений. Придумай свои условия, чтобы добавить в мой код. Поскольку не во всех приложениях есть словарь AS, будет сложно проверить эти приложения на наличие каких-либо других условий (не говоря уже о том, что на создание отдельного правила для каждого из них уходит много времени). Я более склонен согласиться с другими ответами на эти вопросы: «Это часть культуры Mac - иметь приложение, работающее без монитора», если оно не работает, если оно не выполняет какие-либо действия, оно не будет занимать много ЦП или физической ОЗУ.
dotHTM
3

Функция автоматического завершения, представленная в 10.7, частично предназначена для некоторых приложений.

Если вы откроете Preview, откроете хотя бы одно окно, закроете все окна и переключитесь на другое приложение, Preview будет скрыто от переключателя Dock и приложения. Если вы посмотрите на Activity Monitor, процесс все еще работает и использует память, но могут быть некоторые изменения в управлении процессом.

В Руководстве по программированию для Mac App сказано, что процессы на самом деле завершены, поэтому я могу что-то упустить.

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

[...]

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

LRI
источник
1
Предварительный просмотр, конечно, автоматически не исчезает для меня в этих условиях на 10.7.4.
wfaulk
Я пропустил ваш комментарий ранее, но он делает для меня в 10.8.2. Открывали ли вы хотя бы одно окно (например, открываете и закрываете окно настроек) перед тем, как скрыть предпросмотр?
Lri
2

Другое бесплатное маленькое и простое приложение, Quitter , отображает значок X на панели задач, который действует так же, как кнопка закрытия в Windows.

Andreas
источник
4
Добро пожаловать, и спасибо за размещение ответа! Вы должны раскрыть свою принадлежность к связанному продукту / блогу. Обычно это не проблема, когда все находится над доской :)
JoshP
0

Переопределите следующий метод в NSApplicationDelegate(который обычно возвращает NO):

-(BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSapplication*)sender
{
return YES;
}
Пьер Дюфрен
источник
Это вопрос о том, как пользователи могут сделать это с существующими приложениями, а не о том, как программист может заставить свою программу это делать. Спасибо за ваши усилия, хотя.
wfaulk