Skip to content

Commit

Permalink
feat: add support for middle position quick terminal (#3100)
Browse files Browse the repository at this point in the history
# Description

This commit introduces the ability to launch the quick terminal in the
middle position.

![Screen Recording 2024-12-24 at 14 59
46](https://github.com/user-attachments/assets/6c733caf-34c7-4e80-ba16-24b41f98d2f0)

## Note to reviewer
- The quick terminal is currently centered. Should we consider adding a
top offset to better align with the screenshot in [the issue](#2494 )?
Should it be configurable?
- On large monitors, half the visible frame might be excessively large.
To mitigate, I am planning to implement #2384 but we should probably
agree on a good default maximum width/height in middle position.
- I also figured out, reloading the configuration does not update the
quick terminal configuration. That is also an issue I will try to fix.

Resolves #2494

I agree to relicense my commit to MIT.
  • Loading branch information
mitchellh authored Dec 25, 2024
2 parents c8d72ab + 44459e9 commit fddedd7
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 0 deletions.
19 changes: 19 additions & 0 deletions macos/Sources/Features/QuickTerminal/QuickTerminalPosition.swift
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ enum QuickTerminalPosition : String {
case bottom
case left
case right
case center

/// Set the loaded state for a window.
func setLoaded(_ window: NSWindow) {
Expand All @@ -25,6 +26,14 @@ enum QuickTerminalPosition : String {
width: screen.frame.width / 4,
height: screen.frame.height)
), display: false)

case .center:
window.setFrame(.init(
origin: window.frame.origin,
size: .init(
width: screen.frame.width / 2,
height: screen.frame.height / 3)
), display: false)
}
}

Expand Down Expand Up @@ -61,6 +70,10 @@ enum QuickTerminalPosition : String {

case .left, .right:
finalSize.height = screen.frame.height

case .center:
finalSize.width = screen.frame.width / 2
finalSize.height = screen.frame.height / 3
}

return finalSize
Expand All @@ -80,6 +93,9 @@ enum QuickTerminalPosition : String {

case .right:
return .init(x: screen.frame.maxX, y: 0)

case .center:
return .init(x: (screen.visibleFrame.maxX - window.frame.width) / 2, y: screen.visibleFrame.maxY - window.frame.width)
}
}

Expand All @@ -97,6 +113,9 @@ enum QuickTerminalPosition : String {

case .right:
return .init(x: screen.visibleFrame.maxX - window.frame.width, y: window.frame.origin.y)

case .center:
return .init(x: (screen.visibleFrame.maxX - window.frame.width) / 2, y: (screen.visibleFrame.maxY - window.frame.height) / 2)
}
}
}
2 changes: 2 additions & 0 deletions src/config/Config.zig
Original file line number Diff line number Diff line change
Expand Up @@ -1377,6 +1377,7 @@ keybind: Keybinds = .{},
/// * `bottom` - Terminal appears at the bottom of the screen.
/// * `left` - Terminal appears at the left of the screen.
/// * `right` - Terminal appears at the right of the screen.
/// * `center` - Terminal appears at the center of the screen.
///
/// Changing this configuration requires restarting Ghostty completely.
@"quick-terminal-position": QuickTerminalPosition = .top,
Expand Down Expand Up @@ -5283,6 +5284,7 @@ pub const QuickTerminalPosition = enum {
bottom,
left,
right,
center,
};

/// See quick-terminal-screen
Expand Down

0 comments on commit fddedd7

Please sign in to comment.