2207 Commits

Author SHA1 Message Date
Mitchell Hashimoto
c7865f0aad nix: remove unused libs 2023-08-07 10:55:56 -07:00
Mitchell Hashimoto
a348adf26b build: dynamic link first (mode_first) 2023-08-07 10:49:50 -07:00
Thorsten Ball
39055ebf40 macOS: explicitly name the NSMainNibFile in plist
According to [this answer][0] here and [this blogpost][1], if the
`NSMainNibFile` is not specified in the `*.plist` file, then
`NSApplicationMain` will look through the bundle to get the first nib
file it finds.

I like the explicitness of naming it and it probably also saves a
miniscule amount of CPU/IO when we can skip finding the file.

[0]: https://stackoverflow.com/questions/42886400/how-does-nsapplicationmain-find-the-main-nib-file
[1]: https://jameshfisher.com/2017/03/20/how-is-mainmenu-xib-loaded/
2023-08-07 19:48:04 +02:00
Mitchell Hashimoto
d356d5ea38 build: add libxml2/libbuid for fontconfig dynamic link for CI 2023-08-07 10:33:00 -07:00
Mitchell Hashimoto
68cd53e82d build: always add /usr/lib/{triple} to search path for Linux
This is a common location for dynamic libraries. We already searched it
for Flatpak but we need to do this more generally.
2023-08-07 10:20:20 -07:00
Mitchell Hashimoto
b28c7a5557 Merge pull request #238 from mitchellh/ignore-restore-mode
CSI r for top/bot margin must have no intermediates
2023-08-07 09:54:46 -07:00
Mitchell Hashimoto
5e100a3b6b CSI r for top/bot margin must have no intermediates
We were incorrectly interpreting the restore mode CSI (`ESC [ ? r`) as
set top and bottom margin. We need to verify that there are no
intermediates.
2023-08-07 09:45:44 -07:00
Mitchell Hashimoto
24ef5d1b1c tests for insert mode (4) 2023-08-07 08:07:14 -07:00
Mitchell Hashimoto
1ec395fa4f Merge pull request #235 from mitchellh/insert-mode
terminal: implement insert mode (mode = 4)
2023-08-07 07:45:50 -07:00
Mitchell Hashimoto
5c6d3c7df2 terminal: implement insert mode (mode = 4) 2023-08-07 07:44:13 -07:00
Mitchell Hashimoto
407fc3da24 Merge pull request #233 from mitchellh/mrn/flatpak-fix-icons
flatpak: install icon files to `/apps` path
2023-08-06 10:00:26 -07:00
Mitchell Hashimoto
f77b114423 Merge pull request #232 from mitchellh/cursor-vis
renderer: hide cursor is state explicit asks for invisible cursor
2023-08-06 09:59:47 -07:00
Mitchell Hashimoto
85e32f9a15 renderer: hide cursor is state explicit asks for invisible cursor
This was a regression. The previous logic would always show the cursor
if we were using a non-blinking cursor. But, if the terminal state is
explicitly requesting an invisible cursor (mode 25) then we need to hide
the cursor.
2023-08-06 09:55:13 -07:00
Thorsten Ball
89227a1aac flatpak: install icon files to /apps path
I couldn't get icons to work for the flatpak version, so I looked at the
reference here: https://docs.flatpak.org/en/latest/freedesktop-quick-reference.html

That says the path format is `share/icons/hicolor/<resolution>/apps/<icon>`.

That also matches what I have on my Ubuntu machines: icons are, for
example, located in these two locations:

- `/usr/share/icons/hicolor/128x128/apps`
- `~/.local/share/icons/hicolor/128x128/apps`

Note the `/apps`.
2023-08-06 18:54:45 +02:00
Mitchell Hashimoto
7178cdc4a5 fix keybind example in README 2023-08-05 22:51:24 -07:00
Mitchell Hashimoto
b9307309fc Merge pull request #230 from mitchellh/glfw-ctx
renderer/opengl: need to release OpenGL context with glfw
2023-08-05 22:43:36 -07:00
Mitchell Hashimoto
2065dd77d7 renderer/opengl: need to release OpenGL context with glfw 2023-08-05 22:33:55 -07:00
Mitchell Hashimoto
178fef7a90 Merge pull request #229 from mitchellh/linux-jump
Allow setting "jump_to_prompt" binding in config, bind on Linux, and easier shell integration on Linux
2023-08-05 21:58:36 -07:00
Mitchell Hashimoto
247ddd227d update README with shell integration instructions 2023-08-05 21:43:51 -07:00
Mitchell Hashimoto
321be2d5ad termio: respect GHOSTTY_RESOURCES_DIR 2023-08-05 21:38:32 -07:00
Mitchell Hashimoto
2840062ad5 bind shift+<page-up/down> to jump_to_prompt back/forward, respectively 2023-08-05 21:32:30 -07:00
Mitchell Hashimoto
ef5d75e328 input: support assigning integer binding action values
This enables jump_to_prompt
2023-08-05 21:31:34 -07:00
Mitchell Hashimoto
5f5a23acc4 macos: help menu goes to the github repo 2023-08-05 15:03:17 -07:00
Mitchell Hashimoto
d9baf5e759 Merge pull request #226 from mitchellh/copy-paste
macos: enable copy/paste menu items in "Edit"
2023-08-05 14:53:42 -07:00
Mitchell Hashimoto
d895887361 macos: enable copy/paste menu items in "Edit" 2023-08-05 14:50:18 -07:00
Mitchell Hashimoto
0bb286eeb2 C API for invoking bindings 2023-08-05 14:46:47 -07:00
Mitchell Hashimoto
2f6159b16d macos: quit menu should say "Ghostty" 2023-08-05 13:04:06 -07:00
Mitchell Hashimoto
e604b9086c Merge pull request #225 from mitchellh/mrn/readd-edit-menu
macos: re-add Edit submenu to main menu
2023-08-05 12:00:28 -07:00
Mitchell Hashimoto
bbe171f314 macos: remove unimplemented menu items 2023-08-05 11:59:57 -07:00
Thorsten Ball
1908895303 macos: re-add Edit submenu to main menu
This menu got list in #215 and with it we lost the ability to use the
macOS emoji picker via the `Cmd+Ctrl Space` shortcut, for example.

This adds a standard Edit menu back to the main menu.
2023-08-05 20:51:43 +02:00
Mitchell Hashimoto
a09bfecce5 Merge pull request #224 from mitchellh/quit-without-focus
macos: Cmd-Q without any window focus works
2023-08-05 10:46:54 -07:00
Mitchell Hashimoto
2752995ec5 macos: Cmd-Q without any window focus works
Previously, this would crash. Once the crash was fixed, it would hang
because we would only show confirmation if the terminal window had
focus.

This introduces some medium complexity logic to work around this:

  1. If we are the key window, then show the confirmation dialog. Done.
  2. Otherwise, if any other window is a terminal window and is key,
     they're going to take it so we do nothing.
  3. Otherwise, if we are the first terminal window in the application
     windows list, we show it even if we're not focused.
2023-08-05 10:43:56 -07:00
Mitchell Hashimoto
b6d5848f13 update tester readme info 2023-08-05 08:11:37 -07:00
Mitchell Hashimoto
2e55b87e51 Merge pull request #222 from mitchellh/size
only send resize messages to renderer/io thread if changes happen
2023-08-04 19:58:40 -07:00
Mitchell Hashimoto
437c1ca261 only send resize messages to renderer/io thread if changes happen
Previously, we'd send renderer screen size updates and termio sigwnch
updates on every single resize event even if the screen size or grid
sizes didn't change. This is super noisy and given how many resize
events macOS sends, its also very expensive.

This commit makes it so that we only update the renderer if the screen
changed. If the screen size didn't change, the grid size couldn't have
changed either.

If the screen size did change, its still possible the grid size didn't
change since Ghostty supports fluid pixel-level resizing. We have to
send the screen size event to the renderer so all the GPU shader vars
are right but we do not have to send a termio event.

So, only if the grid size changed do we then notify the pty that the
terminal dimensions changed. Note that the resize event for ptys does
have a pixel-level x/y but I don't think the granularity is useful
beyond grid changes.
2023-08-04 19:50:21 -07:00
Mitchell Hashimoto
8ff81de30f apprt/gtk: fix build for macos non-native fullscreen changes 2023-08-04 18:19:48 -07:00
Mitchell Hashimoto
90cdcab190 Merge pull request #215 from mitchellh/mrn/non-native-fs
macos: add support for non-native fullscreen
2023-08-04 17:50:46 -07:00
Mitchell Hashimoto
7c98f991db macos: new tab menu/shortcut works even if no windows are present 2023-08-04 17:45:57 -07:00
Mitchell Hashimoto
8c01160afa macos: "+" button ensures tab is added to same window group 2023-08-04 17:39:40 -07:00
Mitchell Hashimoto
bb7c67b967 macos: implement newWindowForTab for "+" button 2023-08-04 17:35:57 -07:00
Mitchell Hashimoto
994d456223 set the title of the window 2023-08-04 17:24:28 -07:00
Mitchell Hashimoto
9105637697 macos: reorganize, rename, put files in groups 2023-08-04 17:17:18 -07:00
Mitchell Hashimoto
bf190ba442 macos: merge AppController and AppDelegate, organize groups 2023-08-04 17:05:52 -07:00
Thorsten Ball
b56ffa6285 Add config setting to turn non-native fullscreen on or off 2023-08-04 14:12:33 -07:00
Thorsten Ball
850bf3e945 macos: add support for non-native fullscreen mode
This adds support for what's commonly referred to as "non-native
fullscreen": a fullscreen-mode that doesn't use macOS' native fullscreen
mechanism and thus doesn't use animations and a separate space on which
to display the fullscreen window. Instead it's really fast and it allows
the user to `Cmd+tab` to other windows, with the fullscreen-ed window
staying in the background.

Another name for it is "traditional fullscreen" since it was the default
pre Mac OS X Lion, if I remember correctly.

Other applications that offer macOS non-native fullscreen:

- Kitty: https://sw.kovidgoyal.net/kitty/conf/#opt-kitty.macos_traditional_fullscreen
- wezterm: https://wezfurlong.org/wezterm/config/lua/config/native_macos_fullscreen_mode.html
- MacVim
- IINA: fc66b27d50/iina/MainWindowController.swift (L1401-L1423)
- mpv: https://mpv.io/manual/stable/#options-native-fs
- iTerm2

Adding this wasn't straightforward, as it turned out. Mainly because
SwiftUI's app lifecycle management doesn't allow one to use a custom
class for the windows it creates. And without custom classes we'd always
get a warning when entering/leaving fullscreen mode.

So what I did here is the following:

- remove SwiftUI app lifecycle management
- introduce `MainMenu.xib` to define the main menu via interface builder
- add `GhosttyAppController` to handle requests from the app
- add a `main.swift` file to boot up the app without a storyboard and
  without SwiftUI lifecycle management
- introduce the `FullScreenHandler` to manage non-native fullscreen -
  this is where the "magic" is

But since removing the SwiftUI lifecycle management also means removing
the top-level `App` that means I had to introduce the menu (which I
mentioned), but also tab and window management.

So I also added the `WindowService` which manages open tabs and windows.
It's based on the ideas presented in

    https://christiantietze.de/posts/2019/07/nswindow-tabbing-multiple-nswindowcontroller/

and essentially keeps tracks of windows.

Then there's some auxilliary changes: `CustomWindow` and `WindowController` and so on.

Now everything still works, in addition to non-native fullscreen:

* opening/closing of tabs
* opening/closing of windows
* splits
* `gotoTab`

Worthy of note: when toggling back from non-native fullscreen to
non-fullscreen I had to manually implement the logic to re-add the
window back to a tabgroup. The only other app that supports tabs with
non-native FS is iTerm2 and they have implemented their own tab
management to keep the tab bar even in non-native FS -- that's a bit too
much for me. Every other app has non-native apps and doesn't have to
wory about it.
2023-08-04 14:12:30 -07:00
Mitchell Hashimoto
4df462ce6f Merge pull request #221 from mitchellh/default-title
zsh window title integration, better general title defaults
2023-08-04 11:26:20 -07:00
Mitchell Hashimoto
363e911f77 shell-integration/zsh: enable title changes 2023-08-04 11:14:45 -07:00
Mitchell Hashimoto
b11734bd67 default the title to the ghostty emoji
This only happens if the shell hasn't reported a pwd AND title.
2023-08-04 11:11:15 -07:00
Mitchell Hashimoto
fb2f635c91 termio/exec: default window title to the pwd if not reported
We rely on the shell to report the window title. If the shell doesn't
report the window title then we default to the pwd.
2023-08-04 11:07:59 -07:00
Mitchell Hashimoto
63ce5d67ed HTML tweak 2023-08-03 14:50:10 -07:00