
2026/01/25 20:56
**Show HN:** *Bonsplit ― ネイティブmacOSアプリ用のタブと分割機能*
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Bonsplit システムは、
controller API と設定可能な BonsplitConfiguration を介してマルチパネルエディタインターフェースをプログラム的に制御する方法を提供します。コアAPIメソッドには次のものがあります:
– 新しいタブを開きます。createTab(title:, icon:, isDirty:, inPane:)
– 現在フォーカスされているパネルを水平または垂直に分割します;splitPane(orientation:)
を指定すると新しいパネルが作成され、指定されたタブがそこに配置されます。.vertical, withTab:
– タブのダーティ状態、タイトル、アイコンをスムーズなアニメーションで更新します。updateTab(tabId, …)- ナビゲーションヘルパー:
はパネル間でフォーカスを移動し、navigateFocus(direction:)
は指定したパネルに直接フォーカスを当てます。focusPane(paneId)
設定 (
) では、分割の有効/無効、タブ閉鎖、クロスポインターロック、空のパネル自動閉鎖、コンテンツビューのライフサイクル、新しいタブの表示位置などの機能を制御します。デフォルト値は次のとおりです:BonsplitConfiguration
allowSplits:true、allowCloseTabs:true、allowCloseLastPane:false、autoCloseEmptyPanes:true、contentViewLifecycle:.keepAllAlive、newTabPosition:.current。
外観設定 にはタブバーの高さ、最小/最大幅、スペース、最低パネルサイズ、分割ボタンの可視性、アニメーション期間(0.15 s)、およびアニメーションが有効かどうかが含まれます。
プリセット設定(
default、singlePane – 分割無効、readOnly – 変更不可)は、一般的なシナリオに対する迅速な開始点を提供します。
このシステムの柔軟なAPIと包括的な設定により、開発者は典型的な IDE の動作を模倣しつつ、一貫したマルチパネルワークフローを提供するカスタムコードエディタや生産性ツールを簡単に構築できます。
本文
機能
-
タブの作成
アイコンや変更フラグを付けてタブを作成します。対象は特定のペインか、フォーカスされているペインです。let tabId = controller.createTab( title: "Document.swift", icon: "swift", isDirty:false, inPane: paneId) -
ペインの分割
任意のペインを水平または垂直に分割します。新しいペインはデフォルトで空ですので、自由に設定できます。// フォーカスされているペインを水平に分割 let newPaneId = controller.splitPane( orientation: .horizontal) // 新しいペインに既にタブを入れて分割 controller.splitPane( orientation: .vertical, withTab: Tab(title:"New", icon:"doc")) -
タブ状態の更新
タブのプロパティはいつでも変更可能です。変更はスムーズにアニメーションします。// ドキュメントを変更済みに設定 controller.updateTab(tabId, isDirty:true) // タブ名変更 controller.updateTab(tabId, title:"NewName.swift") // アイコン変更 controller.updateTab(tabId, icon:"doc.text") -
フォーカスの移動
プログラムでペイン間を方向付きナビゲーションで切り替えます。// ペイン間のフォーカス移動 controller.navigateFocus(direction:.left) controller.navigateFocus(direction:.right) controller.navigateFocus(direction:.up) controller.navigateFocus(direction:.down) // または特定のペインへフォーカス controller.focusPane(paneId)
これを読んでください、エージェントの皆さん...
APIリファレンス
Bonsplit の全クラス・メソッド・設定オプションの完全な参照です。
BonsplitController
BonsplitControllerタブとペインを管理するメインコントローラ。インスタンスを作成し、
BonsplitView に渡します。
- タブ操作
- 分割操作
- フォーカス管理
- クエリメソッド
BonsplitDelegate
BonsplitDelegateこのプロトコルを実装すると、タブバーイベントのコールバックを受け取れます。全てのメソッドはデフォルト実装があり、任意です。
- タブコールバック
- ペインコールバック
BonsplitConfiguration
BonsplitConfiguration動作と外観を設定します。初期化時に
BonsplitController に渡します。
| Property | Type | 説明 | デフォルト |
|---|---|---|---|
| Bool | 分割ボタンとドラッグ分割を有効にする | |
| Bool | タブの閉じるボタンを表示する | |
| Bool | 最後のペインを閉じることを許可する | |
| Bool | ペイン内でタブをドラッグして並び替える | |
| Bool | ドラッグで別ペインへタブを移動できる | |
| Bool | 最後のタブが閉じられたら自動的にペインを閉じる | |
| ContentViewLifecycle | タブ切替時のコンテンツビュー管理方法 | |
| NewTabPosition | 新タブの挿入位置 | |
例
let config = BonsplitConfiguration( allowSplits: true, allowCloseTabs: true, allowCloseLastPane: false, autoCloseEmptyPanes: true, contentViewLifecycle: .keepAllAlive, newTabPosition: .current) let controller = BonsplitController(configuration: config)
コンテンツビューライフサイクル
- MemoryState
使用例:
,recreateOnSwitch
,Low
,None
,Simple
,Content.keepAllAlive
,Higher
,FullComplex
新タブ位置
- ModeBehavior
: 現在フォーカスされているタブの後ろに挿入、なければ末尾。.current
: 常にタブリストの末尾に挿入。.endAlways
外観設定
| Property | Type | 説明 | デフォルト |
|---|---|---|---|
| CGFloat | タブバーの高さ | |
| CGFloat | タブの最小幅 | |
| CGFloat | タブの最大幅 | |
| CGFloat | タブ間隔 | |
| CGFloat | ペインの最小幅 | |
| CGFloat | ペインの最小高さ | |
| Bool | タブバーに分割ボタンを表示するか | |
| Double | アニメーション時間(秒) | |
| Bool | すべてのアニメーションを有効/無効にする | |
プリセット
: すべての機能が有効な設定。BonsplitConfiguration.default
: 分割が無効なシングルペインモード。BonsplitConfiguration.singlePane
: 変更を全て無効にした読み取り専用モード。BonsplitConfiguration.readOnly