macOSにKDE風タイリングを:KTAppleを作った
KDE PlasmaのKWinタイリングをmacOSに持ち込む「KTApple」をリリースした。ビジュアルタイルエディタ、Shift+Dropウィンドウ配置、ギャップドラッグリサイズ。SIP無効化不要、Homebrew一発でインストールできる。
macOSのウィンドウ管理に不満があった
macOSのウィンドウ管理はずっと中途半端だと思っていた。
フルスクリーンはあるが、画面を分割して複数のウィンドウを整理するには標準機能では力不足だ。Stage Managerは直感的じゃないし、Rectangle等のサードパーティツールも「スナップゾーンが固定」という制約がある。
一方、Linuxデスクトップで使っているKDE PlasmaのKWinタイリングは違う。タイルのレイアウトを自分で自由に定義でき、ドラッグするだけでウィンドウが吸い付く。これをmacOSでやりたかった。
それで作ったのが KTApple だ。
KTAppleとは
KDE PlasmaのKWinタイリング体験をmacOSに持ち込むウィンドウマネージャー。
ビジュアルエディタでタイルレイアウトを自由に組み、ドラッグ&ドロップでウィンドウを配置する。SIP(System Integrity Protection)の無効化は不要。
3つの主要機能
1. ビジュアルタイルエディタ
⌃⌥T でエディタを開き、タイルを視覚的に分割・リサイズ・管理できる。
レイアウトは正規化された 0.0〜1.0 の座標で比率を保存するので、異なる解像度のディスプレイに移動しても崩れない。
2. Shift+Drop ウィンドウ配置
ウィンドウをドラッグしながら Shift を押すとタイルがハイライト表示され、そこでドロップするとウィンドウがタイルに吸い付く。
「どのゾーンに落とすか」を事前に設定しておく必要がなく、その場でレイアウトを見ながら直感的に配置できる。
3. ギャップドラッグリサイズ
隣接するタイルの境界をドラッグすると、両側のウィンドウが同時にリアルタイムでリサイズされる。
インストール
Homebrewから一発でインストールできる:
brew tap m96-chan/homebrew-tap
brew install --cask --no-quarantine ktapple
または Releases から .dmg をダウンロードして /Applications に移動、その後アクセシビリティ権限を許可する:
xattr -cr /Applications/KTApple.app
技術的な話
Swift 6 + Accessibility API
Swift 6 で書いた。ウィンドウの移動・リサイズは macOS の Accessibility API(AXUIElement)を使う。これが SIP 無効化不要の理由で、標準の公開 API の範囲で動く。
ホットキーは Carbon toolbox、エディタ UI は SwiftUI で実装した。
タイルツリーモデル
内部構造は KWin を参考にしたタイルツリー。各ノードが比率・レイアウト方向・子タイル・割り当てウィンドウ ID を持つ。再帰的な構造なので、横分割・縦分割を自由に組み合わせた複雑なレイアウトも表現できる。
動作環境
- macOS 14.0 以上
- SIP 無効化不要
- アクセシビリティ権限が必要
まとめ
- KDE の KWin タイリングを macOS に持ち込む
- ビジュアルエディタでレイアウトを自由に定義
- Shift+Drop で直感的なウィンドウ配置
- ギャップドラッグでリアルタイムリサイズ
- SIP 不要、Homebrew でインストール可能
リポジトリ: github.com/m96-chan/KTApple