mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-09-05 19:08:17 +00:00
Add macos-dock-drop-folder-behavior configuration option
This adds a new configuration option that controls whether folders dropped onto the Ghostty dock icon open in a new tab (default) or a new window. The option accepts two values: - tab: Opens folders in a new tab in the main window (default) - window: Opens folders in a new window This is useful for users who prefer window-based workflows over tab-based workflows when opening folders via drag and drop.
This commit is contained in:

committed by
Mitchell Hashimoto

parent
d20376c1ff
commit
f9ad061ea8
@@ -402,11 +402,17 @@ class AppDelegate: NSObject,
|
||||
var config = Ghostty.SurfaceConfiguration()
|
||||
|
||||
if (isDirectory.boolValue) {
|
||||
// When opening a directory, create a new tab in the main
|
||||
// window with that as the working directory.
|
||||
// If no windows exist, a new one will be created.
|
||||
// When opening a directory, check the configuration to decide
|
||||
// whether to open in a new tab or new window.
|
||||
config.workingDirectory = filename
|
||||
_ = TerminalController.newTab(ghostty, withBaseConfig: config)
|
||||
|
||||
let behavior = ghostty.config.macosDockDropFolderBehavior
|
||||
if behavior == .window {
|
||||
_ = TerminalController.newWindow(ghostty, withBaseConfig: config)
|
||||
} else {
|
||||
// Default to tab behavior
|
||||
_ = TerminalController.newTab(ghostty, withBaseConfig: config)
|
||||
}
|
||||
} else {
|
||||
// When opening a file, we want to execute the file. To do this, we
|
||||
// don't override the command directly, because it won't load the
|
||||
|
@@ -282,6 +282,17 @@ extension Ghostty {
|
||||
return MacOSTitlebarProxyIcon(rawValue: str) ?? defaultValue
|
||||
}
|
||||
|
||||
var macosDockDropFolderBehavior: MacOSDockDropFolderBehavior {
|
||||
let defaultValue = MacOSDockDropFolderBehavior.tab
|
||||
guard let config = self.config else { return defaultValue }
|
||||
var v: UnsafePointer<Int8>? = nil
|
||||
let key = "macos-dock-drop-folder-behavior"
|
||||
guard ghostty_config_get(config, &v, key, UInt(key.count)) else { return defaultValue }
|
||||
guard let ptr = v else { return defaultValue }
|
||||
let str = String(cString: ptr)
|
||||
return MacOSDockDropFolderBehavior(rawValue: str) ?? defaultValue
|
||||
}
|
||||
|
||||
var macosWindowShadow: Bool {
|
||||
guard let config = self.config else { return false }
|
||||
var v = false;
|
||||
|
@@ -304,6 +304,12 @@ extension Ghostty {
|
||||
case hidden
|
||||
}
|
||||
|
||||
/// Enum for the macos-dock-drop-folder-behavior config option
|
||||
enum MacOSDockDropFolderBehavior: String {
|
||||
case tab
|
||||
case window
|
||||
}
|
||||
|
||||
/// Enum for auto-update-channel config option
|
||||
enum AutoUpdateChannel: String {
|
||||
case tip
|
||||
|
@@ -2631,6 +2631,20 @@ keybind: Keybinds = .{},
|
||||
/// editor, etc.
|
||||
@"macos-titlebar-proxy-icon": MacTitlebarProxyIcon = .visible,
|
||||
|
||||
/// Controls the behavior when dropping a folder onto the Ghostty dock icon
|
||||
/// on macOS.
|
||||
///
|
||||
/// Valid values are:
|
||||
///
|
||||
/// * `tab` - Open the folder in a new tab in the main window (default).
|
||||
/// * `window` - Open the folder in a new window.
|
||||
///
|
||||
/// The default value is `tab`.
|
||||
///
|
||||
/// This setting is only supported on macOS and has no effect on other
|
||||
/// platforms.
|
||||
@"macos-dock-drop-folder-behavior": MacOSDockDropFolderBehavior = .tab,
|
||||
|
||||
/// macOS doesn't have a distinct "alt" key and instead has the "option"
|
||||
/// key which behaves slightly differently. On macOS by default, the
|
||||
/// option key plus a character will sometimes produce a Unicode character.
|
||||
@@ -7082,6 +7096,12 @@ pub const WindowNewTabPosition = enum {
|
||||
end,
|
||||
};
|
||||
|
||||
/// See macos-dock-drop-folder-behavior
|
||||
pub const MacOSDockDropFolderBehavior = enum {
|
||||
tab,
|
||||
window,
|
||||
};
|
||||
|
||||
/// See window-show-tab-bar
|
||||
pub const WindowShowTabBar = enum {
|
||||
always,
|
||||
|
Reference in New Issue
Block a user