4468 Commits

Author SHA1 Message Date
Mitchell Hashimoto
d912c144f2 Merge pull request #1987 from rockorager/main
inspector: fix mode prefix by prepending '?' only to private modes
2024-07-22 09:31:13 -07:00
Jon Parise
aa47047a6e bash: ghostty doesn't support OSC 133;P
Remove OSC 133;P marks in the basic prompts, and use OSC 133;A in the
multiline case.
2024-07-22 10:53:50 -04:00
Gregory Anders
b09e4e5d63 config: add cursor-invert-fg-bg option
When set, the cursor-invert-fg-bg option uses the inverted foreground
and background colors of the cursor's current cell to color the cursor,
rather than using a fixed color. This option has higher precedence than
the cursor-color and cursor-text options, but has lower precedence than
an OSC 12 command to change the cursor color.
2024-07-22 08:42:30 -05:00
Tim Culverhouse
8211e7e83a inspector: fix mode prefix by prepending '?' only to private modes
The inspector lists modes by their parameter when used to enable or
disable the mode. Private modes are enabled by using a '?' in the
sequence - however this '?' character was prepended to the ANSI modes.
2024-07-22 05:59:07 -05:00
Justin Su
64f9327a7d Add unit tests 2024-07-21 23:24:11 -04:00
multifred
72c672adb7 Fix multiple deprecated names for zig lib/std 2024-07-22 00:07:17 +02:00
Justin Su
a917d80a1d Merge branch 'ghostty-org:main' into adjust-line 2024-07-21 17:52:46 -04:00
Mitchell Hashimoto
4b5ad77b70 font: fontconfig always prefer monospace in pattern
Fixes #1984
2024-07-21 09:48:07 -07:00
Remi Gelinas
4f182c5578 docs: specify path must be absolute 2024-07-21 11:36:43 -04:00
Remi Gelinas
c6cf13ac89 feat: add absolute path assertion 2024-07-21 10:19:46 -04:00
karei
6e5bc62726 apprt/gtk: disable copy in context menu while without selection
Left a FIXME where the "Copy" button action is disabled.

Though very hackish this was the best way I found to do this currently.
Disable sensitivity on the button didn't do anything and trying to
remove the button altogether like on macOS, causes the menu to become
really buggy. Either by the context menu turning into a scrollable list
or by it becoming really janky and showing the user pre-update UI.
2024-07-21 11:10:26 +03:00
karei
57db35036e apprt/gtk: implement context menu
Implements context menu for GTK with:
- copy
- paste
- split right
- split down
- terminal inspector
2024-07-21 11:10:21 +03:00
Justin Su
97bd46de7f Add adjust_selection actions for beginning_of_line and end_of_line 2024-07-20 23:06:47 -04:00
Justin Su
3ad478044b Fix some words 2024-07-20 23:04:24 -04:00
Mitchell Hashimoto
9198adcba3 terminal: Pin.isBetween broken logic
Two bugs:

1. If our pin is the top page, and self.y == top.y, then x will tell us
   the answer. Before, we'd fall through.

2. If our pin is not the top or bottom, but the top == bottom, then we
   can't possibly be between. Before, we'd incorrectly check the linked
   list starting AFTER top.
2024-07-20 14:50:31 -07:00
Mitchell Hashimoto
a62b76eda3 core: add binding to write screen to file 2024-07-19 20:24:51 -07:00
Mitchell Hashimoto
55657465a7 add write_selection_file
Based on the work by @gigamaax
2024-07-19 20:20:49 -07:00
Mitchell Hashimoto
10198d88dc core: make the write scrollback file logic more generic 2024-07-19 20:16:17 -07:00
Mitchell Hashimoto
e3df08039a some bikeshedding 2024-07-19 20:03:20 -07:00
Mitchell Hashimoto
fa264ca160 Revert "apprt/gtk: add menu button for opening scrollback file"
This reverts commit 44dda62d68620937aa6de01ff0097df0b4ff9696.
2024-07-19 19:56:01 -07:00
karei
4e9639711c apprt/gtk: add menu button for opening scrollback file 2024-07-19 19:56:01 -07:00
karei
6fde429728 core: support opening scrollback file in default text editor 2024-07-19 19:56:00 -07:00
Mitchell Hashimoto
72c0f9dd32 adjust selection 2024-07-19 14:20:28 -07:00
Mitchell Hashimoto
72d8af5d0b rename to expand_selection 2024-07-19 14:19:21 -07:00
Cameron Dart
cdeeeb9f88 feat: keybinds for text selection on copy mode 2024-07-19 14:08:52 -07:00
Jon Parise
2bf1f80f77 bash: add primary and secondary marks to PS1 and PS2
These OSC 133 semantic prompt sequences mark the primary and secondary
parts of the prompt strings.

PS1 is marked as the primary (initial) prompt. This is the default, so
we could skip emitting these sequences, but they're added here for now
to be explicit and consistent with what other terminal emulators do in
their shell integrations.

If PS1 is a multiline prompt (i.e. it contains a newline), we mark the
last line as a secondary prompt (k=s). bash doesn't redraw the leading
lines of a multiline prompt on its own, so we can use this information
at runtime to prevent the preceding lines from being erased by ghostty
after a resize.

PS2 is always marked as a secondary prompt.
2024-07-19 07:44:41 -04:00
Mitchell Hashimoto
1eb18895bf Merge pull request #1964 from jparise/osc-133-secondary
terminal: differentiate OSC 133 continuation and secondary kinds
2024-07-18 21:39:23 -07:00
Mitchell Hashimoto
53d59eb93d Merge pull request #1971 from hauleth/fix/append-to-manpath-instead-of-overriding
fix: instead of overriding MANPATHs set by OS, append to them
2024-07-18 18:53:56 -07:00
Mitchell Hashimoto
f4c26dfaf5 shaper/coretext: use pointer address for cache comparison 2024-07-18 18:46:09 -07:00
Mitchell Hashimoto
1100145cf3 tweaks 2024-07-18 15:57:55 -07:00
Łukasz Niemier
255e50124c fix: instead of overriding MANPATHs set by OS, append to them
Quoting `man man`:

>  If MANPATH begins with a colon, it is appended to the default list;

Alternatively we can think about:

> if it ends with a colon, it is prepended to the default list;

To take preference over existing values, but that shouldn't be really a
problem, as there rather isn't much of another projects named `ghostty`.
2024-07-19 00:36:42 +02:00
Qwerasd
12e8d96b1a shaper/coretext: reset font cache on grid change
Not doing this caused issues with spacing of ligatures and
multi-substitutions when changing the font size with cmd +/-
2024-07-18 17:39:57 -04:00
Mitchell Hashimoto
bf2450479e Merge pull request #1969 from vancluever/gtk-mouse-shape-drag
apprt/gtk: set mouse shape on GL area widget instead of overlay
2024-07-18 09:34:12 -07:00
Mitchell Hashimoto
ffb31bbd03 Merge pull request #1967 from jparise/bash-prompt-end
bash: always send "end of command" prompt sequence
2024-07-18 09:34:01 -07:00
Mitchell Hashimoto
7a50d37bc2 Merge pull request #1962 from jparise/screen-clearprompt-continuation
terminal: test clearPrompt with a continuation
2024-07-18 09:30:26 -07:00
Chris Marchesi
d0446a8444 apprt/gtk: set mouse shape on GL area widget instead of overlay
In b7699b9a, mouse shape functionality was moved from the GL area widget
to the overlay that was newly created for the URL target information
that was included as part of #1928. This seems to have the side effect
of causing the pointer shape to revert to the default shape (here, the
basic arrow pointer) when dragging the mouse during selections.

This moves it back to the GL area, which seems to correct this. It
doesn't seem to need to be added to both - everything seems to function
correctly when a link is moused over, and then selection is made down to
the overlay area (not that this scenario is very likely, though).
2024-07-18 08:56:24 -07:00
Remi Gelinas
699fce0ee5 docs: add docstrings 2024-07-18 11:03:23 -04:00
Jon Parise
00fe956b3b bash: always send "end of command" prompt sequence
I noticed that both wezterm[0] and the OSC 133 reference script[1] (upon
which wezterm and our bash integration appear to be based) always send
the "end of prompt" sequence in their precmd functions (except during
their first execution, when no previous command has been executed).

This is a subtle logical difference: `$_ghostty_executing=""` (first
run) versus `$_ghostty_executing="0"` (reentrancy check). I'm not sure
how much a difference it makes except in rare edge case scenarios, but I
think it makes sense to be consistent and always report the end of the
current command.

[0] https://github.com/wez/wezterm/blob/main/assets/shell-integration/wezterm.sh#L479
[1] https://gitlab.freedesktop.org/Per_Bothner/specifications/-/blob/master/proposals/prompts-data/shell-integration.bash
2024-07-18 10:31:41 -04:00
Jon Parise
a4bc98a031 terminal: differentiate OSC 133 continuation and secondary kinds
OSC 133 defines distinct continuation (c) and secondary (s) prompt
kinds. They're both treated as prompt continuations but have different
semantic meanings: `c` allows the user to "go back" and edit previous
lines, while `s` does not.

We don't (yet) handle this "editable" distinction, but this change makes
our OSC parser slightly more correct.
2024-07-18 09:09:00 -04:00
Mitchell Hashimoto
a2f0dbcecf Merge pull request #1955 from ghostty-org/ibsr
terminal: implement in-band size reports (Mode 2048)
2024-07-17 19:54:24 -07:00
Jon Parise
9369a1a34b terminal: test clearPrompt with a continuation 2024-07-17 20:41:46 -04:00
Remi Gelinas
0197f6d15e fix: handle recursive config files 2024-07-17 17:27:31 -04:00
Remi Gelinas
a546da0417 feat: print every config error message 2024-07-17 17:03:09 -04:00
Remi Gelinas
368868f712 fix: handle relative paths in CLI 2024-07-17 16:51:16 -04:00
Remi Gelinas
3350e3c848 refactor: move config file loading into loadFile 2024-07-17 15:02:03 -04:00
Mitchell Hashimoto
6ac13034fe config: font-family CLI flags will clear font families set in files
This is a quality of life UX change. font-family is a repeatable
configuration where each subsequent value will be added as a fallback
font.

This introduces a UX gotcha where if a font was set in a config file,
the CLI args (which are loaded later) would _append_ to the font
families. This has never once been the behavior I've wanted. Previously,
you'd have to do `--font-family=""` which is clunky.

This change makes it so that CLI font-family flags will automatically
clear the families set in the configuration file.
2024-07-17 11:59:15 -07:00
Mitchell Hashimoto
306e9f8bb6 config: -e CLI flag automatically implies gtk-single-instance=false
`gtk-single-instance` should already be doing desktop-only detection and
in most cases it does. But there are some cases where it isn't and we
haven't quite tracked it down yet.

In any case, when `-e` is used from the CLI, we definitely do not want
to launch in single instance mode because `-e` is typically used in
scripts or for one-off instances. This forces gtk-single-instance to
false.
2024-07-17 11:17:15 -07:00
Mitchell Hashimoto
137ba66211 terminal: implement in-band size reports (Mode 2048)
https://gist.github.com/rockorager/e695fb2924d36b2bcf1fff4a3704bd83
2024-07-17 10:18:15 -07:00
Remi Gelinas
431c99313c feat(cli): add initial validate-config action 2024-07-17 12:27:12 -04:00
Mitchell Hashimoto
360e4f690f terminal/kitty: change graphics base64 decode to use simdutf 2024-07-16 20:21:09 -07:00