From f4ba95b2c53487067391117f43fc6c289099e6ed Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Thu, 24 Oct 2024 11:47:20 -0500 Subject: [PATCH] add quick-terminal-animate-duration option --- .../Features/QuickTerminal/QuickTerminalController.swift | 4 ++-- macos/Sources/Ghostty/Ghostty.Config.swift | 8 ++++++++ src/config/Config.zig | 4 ++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/macos/Sources/Features/QuickTerminal/QuickTerminalController.swift b/macos/Sources/Features/QuickTerminal/QuickTerminalController.swift index 959f17d4a..8e9039253 100644 --- a/macos/Sources/Features/QuickTerminal/QuickTerminalController.swift +++ b/macos/Sources/Features/QuickTerminal/QuickTerminalController.swift @@ -197,7 +197,7 @@ class QuickTerminalController: BaseTerminalController { // Run the animation that moves our window into the proper place and makes // it visible. NSAnimationContext.runAnimationGroup({ context in - context.duration = 0.2 + context.duration = ghostty.config.quickTerminalAnimateDuration context.timingFunction = .init(name: .easeIn) position.setFinal(in: window.animator(), on: screen) }, completionHandler: { @@ -287,7 +287,7 @@ class QuickTerminalController: BaseTerminalController { } NSAnimationContext.runAnimationGroup({ context in - context.duration = 0.2 + context.duration = ghostty.config.quickTerminalAnimateDuration context.timingFunction = .init(name: .easeIn) position.setInitial(in: window.animator(), on: screen) }, completionHandler: { diff --git a/macos/Sources/Ghostty/Ghostty.Config.swift b/macos/Sources/Ghostty/Ghostty.Config.swift index 29639c39e..6cc543b84 100644 --- a/macos/Sources/Ghostty/Ghostty.Config.swift +++ b/macos/Sources/Ghostty/Ghostty.Config.swift @@ -343,6 +343,14 @@ extension Ghostty { let str = String(cString: ptr) return QuickTerminalScreen(fromGhosttyConfig: str) ?? .main } + + var quickTerminalAnimateDuration: Double { + guard let config = self.config else { return 0.2 } + var v: Double = 0.2 + let key = "quick-terminal-animate-duration" + _ = ghostty_config_get(config, &v, key, UInt(key.count)) + return v + } #endif var resizeOverlay: ResizeOverlay { diff --git a/src/config/Config.zig b/src/config/Config.zig index 9097051ad..dfba718b7 100644 --- a/src/config/Config.zig +++ b/src/config/Config.zig @@ -1270,6 +1270,10 @@ keybind: Keybinds = .{}, /// by the operating system. @"quick-terminal-screen": QuickTerminalScreen = .main, +/// Duration (in seconds) of the quick terminal enter and exit animation. +/// Set it to 0 to disable animation. +@"quick-terminal-animate-duration": f64 = 0.2, + /// Whether to enable shell integration auto-injection or not. Shell integration /// greatly enhances the terminal experience by enabling a number of features: ///