El capitan 中以编程方式“自动隐藏菜单栏”

Posted

技术标签:

【中文标题】El capitan 中以编程方式“自动隐藏菜单栏”【英文标题】:Programmatically 'auto hide menubar' in El capitan 【发布时间】:2015-10-08 11:31:43 【问题描述】:

我真的很喜欢 El Capitan 中的“自动隐藏菜单栏”选项,但有时我喜欢(私人)有时我不喜欢(工作)。有没有办法通过更改它在 plist 文件中的值来以编程方式显示/隐藏它?如果是这样,在哪个 plist 文件中找到了该设置?任何帮助表示赞赏。

【问题讨论】:

【参考方案1】:

正如Rich Trouton on apple.stackexchange.com所回答的那样

以下是使用默认设置隐藏和取消隐藏菜单栏的方法:

隐藏:

defaults write NSGlobalDomain _HIHideMenuBar -bool true

显示:

defaults write NSGlobalDomain _HIHideMenuBar -bool false

运行后,注销并重新登录。或者,您可以以登录用户身份运行以下命令来重新启动 Finder 并显示更改:

killall Finder

MacOs 塞拉利昂

正如 trevordmiller 在下面的评论中指出的那样,在 Sierra 中,您似乎必须先关闭终端才能使更改生效。

【讨论】:

知道如何让它在 Sierra 中工作吗?似乎 _HIHideMenuBar 已被重命名或删除,因为上述内容不起作用。我一直在尝试查找 Sierra 的所有 NSGlobalDomain 选项的列表,但没有任何运气。 经过进一步测试,我已经确认这在 Sierra 中确实有效,但只有在终端关闭之后 - 仅 killall Finder 是不够的 @trevordmiller 这是 Apple 的一个奇怪的限制。我已将您的信息添加到答案中以供将来参考。 @trevordmiller 您可能已经了解到您杀死 Finder 的原因是因为上述首选项配置仅在应用程序重新启动后才适用。当您重新启动终端时,它可以工作;当您重新启动 Finder 时,它可以工作;如果您可以重新启动您希望隐藏/显示的每个应用程序,它就可以工作。就个人而言,我最好使用自动隐藏并尝试找到一种以编程方式激活菜单栏上的项目的方法......【参考方案2】:

从 10.12.5 开始,我发现 @trevordmiller 只是部分正确;每个应用程序似乎都需要单独重新启动才能注册新设置。换句话说,如果我使用:

defaults write NSGlobalDomain _HIHideMenuBar -bool false
killall Finder

这仅在 Finder 处于活动状态时显示菜单栏。要在其他应用程序中显示它,我必须重新启动它们。 Killall Finder 除了重新启动 Finder 应用程序并为其注册设置外,不需要任何其他方式。重启任何终端应用程序也是如此。

【讨论】:

【参考方案3】:

来自 AppKit 发行说明:

NSApplication(自 WWDC Seed 以来的新功能)

10.11 支持一种新的菜单栏行为,在正常的非全屏交互期间隐藏菜单栏。菜单栏显示自己 当鼠标移动到每个顶部的热点区域时自动 展示。当此模式启用时, NSApplication.presentationOptions 属性将包括 NSApplicationPresentationAutoHideMenuBar 值。

10.11 之前,HIToolbox 提供的 SetSystemUIMode API,以及 AppKit 提供的 NSApplication 的 setPresentationOptions API,做了 不允许显式启用自动隐藏菜单栏 隐藏 Dock。 -setPresentationOptions 现在允许选项 包含 AutoHideMenuBar 但不包含 HideDock 或 自动隐藏坞站。为了确保与现有应用程序的兼容性, SetSystemUIMode API 将只允许在 10.11 和 稍后通过 kUIModeNormal 和 kUIOptionAutoShowMenuBar;如果此组合由 在 Yosemite 或更早版本上链接的应用程序,AutoShowMenuBar 选项 被忽略

您正在寻找这个位。根据需要翻转它。

typedef NS_OPTIONS(NSUInteger, NSApplicationPresentationOptions) 
/* Flags that comprise an application's presentationOptions */
    NSApplicationPresentationAutoHideMenuBar            = (1 <<  2), 
 NS_ENUM_AVAILABLE_MAC(10_6);

【讨论】:

在制作应用程序时肯定会起作用,但我想通过终端命令来实现这一点。抱歉,应该在问题中提供更多详细信息。【参考方案4】:

为时已晚。如果它对其他人有帮助,那么捷径可能会派上用场。

打开Automator -> 选择Service -> Service接收选定的文本 -> 在no input strong>任何应用程序 -> 添加 Run Shell Script 动作 -> 添加以下行。

bool=$(defaults read NSGlobalDomain _HIHideMenuBar)
if [ "$bool" == 0 ]; then
    defaults write NSGlobalDomain _HIHideMenuBar -bool true
else
    defaults write NSGlobalDomain _HIHideMenuBar -bool false
fi

保存。 (这些步骤创建了一个在系统启动时运行的服务。)

提供快捷方式,

转到系统偏好设置 -> 键盘 -> 快捷方式 -> 服务 -> 滚动到最后找到 General 部分 -> 设置服务的首选快捷方式。

【讨论】:

【参考方案5】:
❯ /usr/bin/defaults write NSGlobalDomain _HIHideMenuBar -bool [true|false]

但是您必须关闭 Finder 应用程序的实例,然后再次启动它:

# `-g` don't bring app to foreground, `-a` specify app name
❯ killall Finder && open -ga /System/Library/CoreServices/Finder.app/

作为热键触发脚本来打开/关闭(隐藏/取消隐藏):

if (( `/usr/bin/defaults read NSGlobalDomain _HIHideMenuBar` == 0 ));
then
    /usr/bin/defaults write NSGlobalDomain _HIHideMenuBar -bool true \
    && killall Finder \
    && open -ga /System/Library/CoreServices/Finder.app/
else
    /usr/bin/defaults write NSGlobalDomain _HIHideMenuBar -bool false \
    && killall Finder \
    && open -ga /System/Library/CoreServices/Finder.app/
fi
可用于 Alfred 工作流程、Hammerspoon、Keyboard Maestro、Automator 等。

【讨论】:

以上是关于El capitan 中以编程方式“自动隐藏菜单栏”的主要内容,如果未能解决你的问题,请参考以下文章

sh 创建可启动的El Capitan ISO

如何以编程方式打开选择

markdown 全新安装 - OS X 10.11 El Capitan

sh 验证/修复OS X El Capitan上的磁盘权限

markdown 如何修复OS X El Capitan中的Homebrew权限问题?

text OS X:创建与VirtualBox兼容的El Capitan ISO