macOSで ⌥⌘H のほかを隠す」が
効かないアプリがある理由
(AppKit)

macOSには、⌥⌘H(Option + Command + H)という、アクティブなアプリだけを残して他をすべて隠すショートカットがあります。
しかし、一部のアプリでは何も起きないことがあります。
たまたまWezTermというターミナルアプリでできなかったので、その理由を調べてみました。

関連記事

1. ⌥⌘H は何をしているのか

このショートカットは、メニューバーのアプリ名メニューにある「ほかを非表示(Hide Others)」という項目と対応しています1
SafariやFinderのメニューを開いてみると、⌥⌘H というキー表示を確認できます。

1.1. AppKitのキーバインド

ただし、⌥⌘H は、macOS が全アプリに強制的に適用するグローバルショートカットではありません。
AppKit という macOS 標準の UI フレームワークが持つ標準アクション hideOtherApplications: に対応するデフォルトのキーバインドです。
OSレイヤーではなく、フレームワークレイヤーの機能なので、AppKit を使っていないアプリでは動作しません。

⌥⌘H「ほかを非表示」のしくみ Safari ファイル 編集 表示 Safariについて 環境設定… ほかを非表示 ⌥⌘H AppKit hideOtherApplications: 他アプリのウィンドウを隠す OSのグローバル機能ではなく、AppKit フレームワーク層の標準アクション

AppKit は旧称 Cocoa とも呼ばれ、macOS ネイティブアプリを作るための標準的な仕組みです2
AppKit に準拠したアプリは、アプリ名メニューに「ほかを非表示」が自動的に挿入されます。
その項目が存在するから、⌥⌘H も機能する3

Safari、メモ、Finder のような純正アプリはもちろん、多くのサードパーティアプリも AppKit を使っています。
普段使うアプリのほとんどが AppKit 準拠のため、「全アプリで動く」という印象が生まれます。

2. なぜアプリによって動かないのか

一方、クロスプラットフォームを前提に作られたアプリは、AppKit の標準メニュー構造をそのまま使わないことがあります。

たとえば、WezTerm はその典型で、アプリ名メニューに「ほかを非表示」の項目がありません4
項目自体が存在しないため、⌥⌘H を押しても何も起きない。

もちろん、クロスプラットフォーム設計であっても、AppKit の標準アクションを意図的に組み込んでいれば動作します5
単純に「クロスプラットフォームだから効かない」という二分ではなく、hideOtherApplications: を実装しているかどうかが分かれ目です。

つまり、そのアプリのメニューに「ほかを非表示」または「Hide Others」があるか確認してください。
表示されていれば ⌥⌘H は機能します6

  1. この操作の実体は NSApplication の hideOtherApplications: メソッドです。送信元のアプリ以外をすべて隠す挙動が定義されています。 – hideOtherApplications() | Apple Developer Documentation
  2. AppKit は、アプリのメインイベントループやウィンドウ、メニューなど UI 全体を管理するフレームワークです。NSApplication クラスが中心的な役割を担います。 – NSApplication | Apple Developer Documentation
  3. macOS のシステム設定からアプリ別にショートカットを割り当てることもできますが、対象のメニュー項目がアプリに存在しない場合は設定しても機能しません。 – Create keyboard shortcuts for apps on Mac – Apple Support
  4. WezTerm は Rust で実装された GPU アクセラレーション対応のターミナルエミュレータで、macOS・Windows・Linux・BSD に対応するクロスプラットフォーム設計です。 – wezterm/wezterm – GitHub
  5. アプリの前面に関係なく起動するグローバルショートカットを実装するには、Carbon API や CGEventTap といった別の仕組みが必要です。AppKit の標準アクションとはレイヤーが異なります。 – How to properly realize global hotkeys on macOS? – Apple Developer Forums
  6. もし別のキーで同じ操作を割り当てたい場合は、システム設定のキーボードショートカット設定からアプリ別に追加できます。ただしメニュー項目が存在しないアプリには設定しても反応しません。 – Create keyboard shortcuts for apps on Mac – Apple Support