Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions GhosttyTabs.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -269,6 +269,7 @@
D1320AA0D1320AA0D1320AA1 /* AppIconDockTilePlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1320AA0D1320AA0D1320AA4 /* AppIconDockTilePlugin.swift */; };
D1320AA0D1320AA0D1320AA2 /* CmuxDockTilePlugin.plugin in Copy Dock Tile Plugin */ = {isa = PBXBuildFile; fileRef = D1320AA0D1320AA0D1320AA5 /* CmuxDockTilePlugin.plugin */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
D1BEF00002A1B2C3D4E5F719 /* open in Copy CLI */ = {isa = PBXBuildFile; fileRef = D1BEF00001A1B2C3D4E5F719 /* open */; };
D1F0C5E2A0B1C2D3E4F50001 /* FocusResizeSettingsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1F0C5E2A0B1C2D3E4F50000 /* FocusResizeSettingsTests.swift */; };
D9FEC58D5BACCF76459F1BBE /* AuthEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43430FA5929121E2EAAB3091 /* AuthEnvironment.swift */; };
DA7A10CA710E000000000003 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = DA7A10CA710E000000000001 /* Localizable.xcstrings */; };
DA7A10CA710E000000000004 /* InfoPlist.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = DA7A10CA710E000000000002 /* InfoPlist.xcstrings */; };
Expand Down Expand Up @@ -642,6 +643,7 @@
D1320AA0D1320AA0D1320AA4 /* AppIconDockTilePlugin.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppIconDockTilePlugin.swift; sourceTree = "<group>"; };
D1320AA0D1320AA0D1320AA5 /* CmuxDockTilePlugin.plugin */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CmuxDockTilePlugin.plugin; sourceTree = BUILT_PRODUCTS_DIR; };
D1BEF00001A1B2C3D4E5F719 /* open */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = Resources/bin/open; sourceTree = SOURCE_ROOT; };
D1F0C5E2A0B1C2D3E4F50000 /* FocusResizeSettingsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FocusResizeSettingsTests.swift; sourceTree = "<group>"; };
D2C075029771815DD5DA1332 /* NotificationAndMenuBarTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationAndMenuBarTests.swift; sourceTree = "<group>"; };
DA7A10CA710E000000000001 /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = "<group>"; };
DA7A10CA710E000000000002 /* InfoPlist.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = InfoPlist.xcstrings; sourceTree = "<group>"; };
Expand Down Expand Up @@ -1048,6 +1050,7 @@
F8000001A1B2C3D4E5F60718 /* SocketControlPasswordStoreTests.swift */,
F9000001A1B2C3D4E5F60718 /* GhosttyEnsureFocusWindowActivationTests.swift */,
F1C1AA20B7E84D10A1C10001 /* InactivePaneFirstClickFocusTests.swift */,
D1F0C5E2A0B1C2D3E4F50000 /* FocusResizeSettingsTests.swift */,
FA000001A1B2C3D4E5F60718 /* WorkspaceStressProfileTests.swift */,
A5008380 /* BrowserFindJavaScriptTests.swift */,
C2B6A97D1F2E4C71A8B9D002 /* BrowserOmnibarPerformanceSupportTests.swift */,
Expand Down Expand Up @@ -1593,6 +1596,7 @@
F8000000A1B2C3D4E5F60718 /* SocketControlPasswordStoreTests.swift in Sources */,
F9000000A1B2C3D4E5F60718 /* GhosttyEnsureFocusWindowActivationTests.swift in Sources */,
F1C1AA21B7E84D10A1C10001 /* InactivePaneFirstClickFocusTests.swift in Sources */,
D1F0C5E2A0B1C2D3E4F50001 /* FocusResizeSettingsTests.swift in Sources */,
FA000000A1B2C3D4E5F60718 /* WorkspaceStressProfileTests.swift in Sources */,
A5008381 /* BrowserFindJavaScriptTests.swift in Sources */,
A5008383 /* CommandPaletteSearchEngineTests.swift in Sources */,
Expand Down
69 changes: 69 additions & 0 deletions Resources/Localizable.xcstrings
Original file line number Diff line number Diff line change
Expand Up @@ -52627,6 +52627,75 @@
}
}
},
"settings.app.focusResize": {
"extractionState": "manual",
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Resize Focused Pane"
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "フォーカスペインのリサイズ"
}
},
"uk": {
"stringUnit": {
"state": "translated",
"value": "Змінити розмір активної панелі"
}
}
}
},
"settings.app.focusResize.subtitle": {
"extractionState": "manual",
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Automatically resizes the focused pane to take more space when switching between split panes"
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "分割ペインの切り替え時にフォーカスしたペインを自動的にリサイズしてスペースを広げます"
}
},
"uk": {
"stringUnit": {
"state": "translated",
"value": "Автоматично змінює розмір активної панелі для виділення більше місця при перемиканні між розділеними панелями"
}
}
}
},
"settings.app.focusResizeRatio": {
"extractionState": "manual",
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Focus Resize Amount"
}
},
"ja": {
"stringUnit": {
"state": "translated",
"value": "フォーカスリサイズ量"
}
},
"uk": {
"stringUnit": {
"state": "translated",
"value": "Масштаб зміни розміру"
}
}
}
},
"settings.app.paneFirstClickFocus": {
"extractionState": "manual",
"localizations": {
Expand Down
16 changes: 16 additions & 0 deletions Sources/App/WorkspaceRuntimeSettings.swift
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,22 @@ enum TerminalScrollBarSettings {
}
}

enum FocusResizeSettings {
static let enabledKey = "focusResize.enabled"
static let ratioKey = "focusResize.ratio"
static let defaultEnabled = false
static let defaultRatio: Double = 0.75

static func isEnabled(defaults: UserDefaults = .standard) -> Bool {
defaults.object(forKey: enabledKey) as? Bool ?? defaultEnabled
}

static func ratio(defaults: UserDefaults = .standard) -> Double {
let value = defaults.object(forKey: ratioKey) != nil ? defaults.double(forKey: ratioKey) : defaultRatio
return min(max(value, 0.5), 0.9)
}
}

enum UITestLaunchManifest {
static let argumentName = "-cmuxUITestLaunchManifest"

Expand Down
11 changes: 11 additions & 0 deletions Sources/KeyboardShortcutSettingsFileStore.swift
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ final class CmuxSettingsFileStore {
"app.minimalMode",
"app.keepWorkspaceOpenWhenClosingLastSurface",
"app.focusPaneOnFirstClick",
"app.focusResize",
"app.focusResizeRatio",
"app.preferredEditor",
"app.openMarkdownInCmuxViewer",
"app.iMessageMode",
Expand Down Expand Up @@ -435,6 +437,13 @@ final class CmuxSettingsFileStore {
if let value = jsonBool(section["focusPaneOnFirstClick"]) {
snapshot.managedUserDefaults[PaneFirstClickFocusSettings.enabledKey] = .bool(value)
}
if let value = jsonBool(section["focusResize"]) {
snapshot.managedUserDefaults[FocusResizeSettings.enabledKey] = .bool(value)
}
if let value = jsonDouble(section["focusResizeRatio"]) {
let clamped = min(max(value, 0.5), 0.9)
snapshot.managedUserDefaults[FocusResizeSettings.ratioKey] = .double(clamped)
}
if let value = jsonString(section["preferredEditor"]) {
snapshot.managedUserDefaults[PreferredEditorSettings.key] = .string(value)
}
Expand Down Expand Up @@ -1242,6 +1251,8 @@ final class CmuxSettingsFileStore {
"minimalMode": false,
"keepWorkspaceOpenWhenClosingLastSurface": !LastSurfaceCloseShortcutSettings.defaultValue,
"focusPaneOnFirstClick": PaneFirstClickFocusSettings.defaultEnabled,
"focusResize": FocusResizeSettings.defaultEnabled,
"focusResizeRatio": FocusResizeSettings.defaultRatio,
"preferredEditor": "",
"openMarkdownInCmuxViewer": CmdClickMarkdownRouteSettings.defaultValue,
"reorderOnNotification": WorkspaceAutoReorderSettings.defaultValue,
Expand Down
Loading