Spraw, aby pasek menu nigdy nie był wyświetlany na pełnym ekranie

69

Prawie każda aplikacja, z której korzystam na pełnym ekranie (w tym Firefox, MacVim i Terminal) ma zakładki u góry ekranu.

Problem polega na tym, że kiedy poruszam myszką, aby dotrzeć do kart, często przypadkowo dotykam górnej części ekranu, wyświetlając menu OSIENIA na kartach:

Ilustracja - przesunięcie myszy na górę ekranu w aplikacjach pełnoekranowych powoduje wyświetlenie paska menu

Czy jest jakiś sposób na zmianę tego zachowania? Wolałbym, żeby pasek menu pozostawał ukryty, gdy korzystam z aplikacji pełnoekranowej, nawet jeśli moja mysz dotyka górnej części ekranu.

MaiaVictor
źródło
5
Tak, to naprawdę denerwujące. Chciałbym tam, gdzie defaults writezmienną można edytować. Ale do tej pory nie słyszałem o niczym takim. Jest to szczególnie denerwujące, gdy używasz maszyny wirtualnej na pełnym ekranie. Ubuntu ma pasek menu na górze i tak mi się podoba. Ale ciągle uruchamiam pasek menu OSX. :(
gentmatt,
Jest JEDNA rzecz, którą możesz zrobić, ale poświęca się całkowicie przy użyciu paska menu - tj. Oprócz uporczywego ukrywania go, nie możesz nawet ręcznie go aktywować (za pomocą skrótu klawiaturowego Ctrl+ F2) lub, jak się wydaje, sterować dowolnym elementy paska menu za pomocą przypisanych skrótów klawiaturowych :(. Ale pozbywa się paska menu od razu, jeśli naprawdę chcesz się go pozbyć dla określonego programu. Pobierz „PresentYourApps” (jest w CNET), uruchom aplikację, dla której chcesz usunąć pasek menu, uruchom PreentYourApps i odpowiednio ustaw opcje dla tej aplikacji. Zmodyfikuje aplikację i uruchom ją ponownie
4
Ok dalsze info: co PresentYourApps "nie jest po prostu ustawić LSUIPresentationMode lub wartość„wniosek UI prezentacji trybu”w Info.plist dla aplikacji w pytaniu: dokumentacja tutaj i przewodnika w Lifehacker tutaj . Zamiast „4” użyj wartości liczbowej „3” dla trybu „Wszystkie ukryte”, co robią moje powyższe komentarze w tym prostszym graficznym interfejsie użytkownika - ale ponownie „Wszystko ukryte” denerwująco wyłącza WSZYSTKIE dostęp do paska menu, gdy jest w tym aplikacja, podczas gdy „Wszystkie ukryte” NIE ukrywa menu, ale mysz wywołuje je po naciśnięciu przycisku u góry ekranu, czego nie chcemy.
3
gdybyśmy mogli określić większe opóźnienie ... to jest naprawdę denerwujące
Lucas Pottersky
1
W celu obejścia tego problemu ktoś może napisać aplikację, która tworzy „ścianę”, aby zapobiec uderzeniu myszy w górny rząd pikseli na ekranie (chyba że przytrzymany jest klawisz, aby „zwolnić” mysz). Coś takiego byłoby pierwszym dopuszczalnym krokiem i powodem mojej nagrody.
kloneman

Odpowiedzi:

9

Pasek menu NIE może być ukryty na polecenie, kiedy tylko chcesz, ze względu na ograniczenia w Mac OS X. Apple może to zrobić we własnych programach, ale NIE umożliwiło to innym programistom w Mac OS X. Jednym z powodów jest to, że Menu Apple znajduje się na pasku menu i jest pomocne, jeśli aplikacja przestanie odpowiadać lub jeśli użytkownik będzie musiał się wylogować / wyłączyć urządzenie.

Istnieje aplikacja o nazwie Menu Eclipse, która umożliwia zmianę zachowań paska menu (oprócz ukrywania go).

Zeus
źródło
1
„Zaćmienie menu” nie ukrywa paska menu.
Pierścień Ø
1
pasek menu może być wyzwalany przez naciśnięcie klawisza lub dłuższą pauzę - to wciąż pozwoliłoby użytkownikowi wyjść z uszkodzonej aplikacji, nie zakłócając jednocześnie pracy w oparciu o karty
Toni Leigh
1
To nie może być w 100% prawda, ponieważ istnieje wiele gier pełnoekranowych, które nie pozwalają na dostęp do paska menu. Chociaż prawdopodobnie używają niestandardowych funkcji na pełnym ekranie.
Wowfunhappy
@Wowfunhappy Zakładam, że jest to wynikiem działania aplikacji w trybie gry.
Zeus
Okej, a co z Command+ Option+ Shift+ Esc? Gdy aplikacja przestanie odpowiadać, zamknięcie urządzenia nie robi nic, dopóki aplikacja nie zareaguje. Tak więc pasek menu nie powinien być koniecznością na pełnym ekranie.
Máxima Alekz
8
  • Zapisz następujący AppleScript w pliku o nazwie fullscreen.scpt:

    use framework "AppKit"
    use scripting additions
    
    repeat with runningApp in current application's NSWorkspace's sharedWorkspace's runningApplications()
        if runningApp's isActive()
            set frontApp to (localizedName of runningApp) as text
            exit repeat
        end if
    end repeat
    
    tell application "System Events"
        tell process frontApp to set isFullScreen to value of attribute "AXFullScreen" of first window
        if frontApp = "Finder"
            tell process frontApp to set value of attribute "AXFullScreen" of first window to not isFullScreen
        else if isFullScreen
            do shell script "lsappinfo setinfo -app " & quoted form of frontApp & " ApplicationType=Foreground"
            tell process frontApp to set value of attribute "AXFullScreen" of first window to false
    
            (*fix to make sure the menu bar is not stuck*)
            delay 0.42
            tell application "Finder" to activate
            tell process frontApp to set frontmost to true
        else
            do shell script "lsappinfo setinfo -app " & quoted form of frontApp & " ApplicationType=UIElement"
            tell process frontApp to set value of attribute "AXFullScreen" of first window to true
        end if
    end tell
    
  • Z terminalu skompiluj go do aplikacji za pomocą następującego polecenia:

    osacompile -o "/Applications/Full Screen.app" fullscreen.scpt
    
  • Otwórz Full Screen.app„s” Info.plist(np. vim '/Applications/Full Screen.app/Contents/Info.plist') I dodaj następujące elementy do dict:

        <key>NSUIElement</key>
        <true/>
    
  • Dodaj Full Screen.appjako wyjątek w System Preferences > Security & Privacy > Privacy > Accessibility.

  • Uruchom Automator i utwórz nowy Service.

  • Zmień „Usługa otrzymuje” na „ no inputza any application”.
  • Dodaj Library > Utilities > Launch Applicationakcję.
  • Skonfiguruj akcję, aby uruchomić wcześniej utworzoną Full Screenaplikację.
  • Zapisz usługę jako Full Screeni zamknij Automator.
  • Włącz System Preferences > Keyboard > Shortcuts > Services, przewiń w dół do dołu listy, a właśnie utworzona Full Screenusługa powinna się tam znaleźć. Powiąż z nim unikalny Commandskrót , na przykład Shift+ Command+ \lub Command+ F11.

Spowoduje to utworzenie skrótu, który spowoduje przejście aplikacji do pełnego ekranu podczas usuwania paska menu lub wyjście z pełnego ekranu z powrotem paska menu. Zapewnia alternatywny skrót do pełnego ekranu!

W przypadku pełnoekranowych programów uruchamiających specyficznych dla aplikacji sprawdź moją drugą odpowiedź .

Ostrzeżenia

Przy takim podejściu mogą wystąpić pewne wady i / lub niewłaściwe zachowanie:

  • Działa poprzez ustawienie ApplicationType=UIElement, które powoduje, że ikona aplikacji nie jest dodawana / podświetlana w Docku i powoduje, że aplikacja jest niedostępna przez Command+ Tab. Command+ TabProblem został zgłoszony w komentarzach , nie zauważyłem go, ponieważ Najczęściej przegląd Mission Control, aby przełączyć między pełnoekranowych aplikacji.
  • Może nie działać zgodnie z oczekiwaniami w przypadku niektórych konkretnych aplikacji, zauważyłem problemy z aplikacją Monitor aktywności (która i tak na ogół nie jest używana na pełnym ekranie) i jest raport o Chrome , którego nie próbowałem, odkąd korzystam z Firefoxa i to działa świetnie .
pepper_chico
źródło
To więcej niż wystarcza na nagrodę. Wspaniała robota! W przypadku przyszłych użytkowników edytuj, aby opisać wszelkie potencjalne ograniczenia, gdy je znajdziesz. Z czubka mojej głowy wydaje się, że chromowi to się bardzo nie podoba, a aplikacje znikają z karty cmd + podczas korzystania z tego skrótu.
kloneman
@cloneman Nicea, dzięki. Dodałem sekcję Ostrzeżenia .
pepper_chico
zawsze pojawia się błąd: ten skrypt zawiera nieskompilowane zmiany i nie można go uruchomić. (-2700)
Xin Meng
To rozwiązanie nie działa dla mnie, a ja korzystam z systemu macOS Sierra 10.12.6. Okno błędu mówi: Can't get window 1 of <<class prcs>> "Full Screen" of application "System Events". Invalid index.A następnie mówi także:System Events got an error: Can't get window 1 of process "Full Screen": Invalid index. (-1719)
rm.rf.etc
@ rm.rf.etc Nadal używam go w Sierra, działając dobrze.
pepper_chico
5

Najbliższym rozwiązaniem, jakie znalazłem, jest zrobienie, jak wspomniano wcześniej, wyłączenie „Monitory mają oddzielne spacje” w Kontroli misji. Ma to sens tylko w środowisku wielomonitorowym, ponieważ pasek menu nadal wyświetla się na monitorze głównym.

Jeśli sprawisz, że aplikacja przejdzie w tryb pełnoekranowy (kliknij zielony przycisk), wypełni cały ekran, ale wszystkie inne ekrany staną się czarne, a pasek menu zostanie przeniesiony na ekran aplikacji. Dlatego rozwiązaniem jest ręczne poszerzenie krawędzi aplikacji tak daleko lub wysoko, jak chcesz. Dawno, dawno temu, VMWare miało jakieś obejście pełnoekranowe, które nie korzystało z mechanizmu pełnoekranowego Apple.

Chyba że / dopóki Apple nie uzna tego za problem, który wymaga naprawy, ciężko będzie znaleźć niehackujące rozwiązanie. Jest to tak integralne z działaniem systemu operacyjnego (jak przycisk Home na iPhonie / iPadzie / iPodzie).

Bryan Scott
źródło
0

Jednym z możliwych rozwiązań nie jest całkowite pozbycie się menu, ale faktyczne utrzymanie menu zawsze (nie jest tak duże) i po prostu pozbycie się Docka, wykonując następującą sztuczkę.

Przejdź do terminala i wpisz:

defaults write com.apple.dock tilesize -int 1
killall Dock

Dzięki temu Twój dok będzie mały. Naciśnij ⌘ ⌥ D, aby ukryć dok.

Pomysł skradziony stąd .

Alex
źródło
Głosowanie w dół tej odpowiedzi poniżej zera jest naprawdę wredne. Może pomóc ludziom z podobnym problemem, ale teraz go zignorują, zakładając, że to rozwiązanie w ogóle nie działa. Moim celem była optymalizacja pod kątem miejsca na ekranie, nie powodując irytacji za pomocą zakładek w przeglądarce i edytorów kodu. Żadna z powyższych odpowiedzi nie działała dla mnie, ale całkowite pozbycie się Docka sprawiło, że byłem szczęśliwy.
Alex
-1

Spróbuj użyć skrótów klawiszowych do przełączania kart w przeglądarce / ide, aby nigdy nie przesunąć myszy na górę, aby wyświetlić pasek menu

Dankiv Vitalij
źródło