config: quick terminal auto hide

Introduce a setting allowing to customize the behavior of the quick terminal
when it loses focus. By default, the quick terminal will automatically hide.
However, you can now configure it to remain open by setting
`quick-terminal-autohide: false`.

Resolves #2558
This commit is contained in:
Damien MEHALA
2024-12-21 23:51:15 +01:00
committed by Damien Mehala
parent dd6460bc77
commit 196af6f2ca
3 changed files with 19 additions and 2 deletions

View File

@ -107,7 +107,9 @@ class QuickTerminalController: BaseTerminalController {
self.previousApp = nil self.previousApp = nil
} }
animateOut() if (derivedConfig.quickTerminalAutoHide) {
animateOut()
}
} }
func windowWillResize(_ sender: NSWindow, to frameSize: NSSize) -> NSSize { func windowWillResize(_ sender: NSWindow, to frameSize: NSSize) -> NSSize {
@ -395,15 +397,18 @@ class QuickTerminalController: BaseTerminalController {
private struct DerivedConfig { private struct DerivedConfig {
let quickTerminalScreen: QuickTerminalScreen let quickTerminalScreen: QuickTerminalScreen
let quickTerminalAnimationDuration: Double let quickTerminalAnimationDuration: Double
let quickTerminalAutoHide: Bool
init() { init() {
self.quickTerminalScreen = .main self.quickTerminalScreen = .main
self.quickTerminalAnimationDuration = 0.2 self.quickTerminalAnimationDuration = 0.2
self.quickTerminalAutoHide = true
} }
init(_ config: Ghostty.Config) { init(_ config: Ghostty.Config) {
self.quickTerminalScreen = config.quickTerminalScreen self.quickTerminalScreen = config.quickTerminalScreen
self.quickTerminalAnimationDuration = config.quickTerminalAnimationDuration self.quickTerminalAnimationDuration = config.quickTerminalAnimationDuration
self.quickTerminalAutoHide = config.quickTerminalAutoHide
} }
} }
} }

View File

@ -232,7 +232,7 @@ extension Ghostty {
guard let ptr = v else { return defaultValue } guard let ptr = v else { return defaultValue }
return String(cString: ptr) return String(cString: ptr)
} }
var macosTitlebarProxyIcon: MacOSTitlebarProxyIcon { var macosTitlebarProxyIcon: MacOSTitlebarProxyIcon {
let defaultValue = MacOSTitlebarProxyIcon.visible let defaultValue = MacOSTitlebarProxyIcon.visible
guard let config = self.config else { return defaultValue } guard let config = self.config else { return defaultValue }
@ -366,6 +366,14 @@ extension Ghostty {
_ = ghostty_config_get(config, &v, key, UInt(key.count)) _ = ghostty_config_get(config, &v, key, UInt(key.count))
return v return v
} }
var quickTerminalAutoHide: Bool {
guard let config = self.config else { return true }
var v = true
let key = "quick-terminal-autohide"
_ = ghostty_config_get(config, &v, key, UInt(key.count))
return v
}
#endif #endif
var resizeOverlay: ResizeOverlay { var resizeOverlay: ResizeOverlay {

View File

@ -1404,6 +1404,10 @@ keybind: Keybinds = .{},
/// runtime. /// runtime.
@"quick-terminal-animation-duration": f64 = 0.2, @"quick-terminal-animation-duration": f64 = 0.2,
/// Automatically hide the quick terminal when focus shifts to another window.
/// Set it to false for the quick terminal to remain open even when it loses focus.
@"quick-terminal-autohide": bool = true,
/// Whether to enable shell integration auto-injection or not. Shell integration /// Whether to enable shell integration auto-injection or not. Shell integration
/// greatly enhances the terminal experience by enabling a number of features: /// greatly enhances the terminal experience by enabling a number of features:
/// ///