212 Commits

Author SHA1 Message Date
Gregory Anders
bf06c05c09 termio: implement DECRQSS
Only SGR, DECSCUSR, DECSTBM, and DECSLRM are handled, as these are the
only ones that Ghostty supports (as far as I can tell) and are the only
ones that seem actually useful.
2023-12-14 17:26:53 -06:00
Tim Culverhouse
c9f2f806ec terminal: implement mode 1047 (alternate screen)
Implement handling of mode 1047, which enters the alternate screen. This
is not used often, typically applications will favor 1049 (enter alt
screen, save cursor, clear alt screen).
2023-12-05 10:37:11 -06:00
Mitchell Hashimoto
0d82b120da termio: set configured default cursor style on startup
Fixes #958
2023-12-01 19:39:16 -08:00
Mitchell Hashimoto
516edf1506 termio: only change mouse shape if it is changing
Fixes #976
2023-12-01 19:35:18 -08:00
Krzysztof Wolicki
0750698b62 Update to latest master,
update libxev dependency,
change mach_glfw to an updated fork until upstream updates
2023-11-30 21:41:33 +01:00
Mitchell Hashimoto
810242b472 termio: clear_screen binding does not trigger scrollback preservation
Fixes #970
2023-11-30 12:32:35 -08:00
Mitchell Hashimoto
ec3b570b3e terminal: know about autorepeat mode
Ignore it because xterm does
2023-11-21 18:48:05 -08:00
Mitchell Hashimoto
34cfe0abab xterm audit: DECOM (origin mode) 2023-11-21 18:32:00 -08:00
Tim Culverhouse
469c88c0c6 osc: fix OSC4 response
When reporting colors via OSC4, the index must also be reported.
2023-11-21 10:00:14 -06:00
Mitchell Hashimoto
f2513e0825 Merge pull request #876 from gpanders/notifications
Add support for desktop notifications
2023-11-17 21:57:09 -08:00
Krzysztof Wolicki
44a48f62f1 change unmodified vars to consts in anticipation of zig changes 2023-11-17 15:46:46 +01:00
Gregory Anders
5290070be9 clipboard: add Clipboard variant for primary clipboard
In practice, the primary and selection clipboards are treated exactly
the same, but this allows OSC 52 sequences to use either 's' or 'p' as
the clipboard target.
2023-11-16 16:35:48 -06:00
Gregory Anders
689199251a core: use arrays instead of WriteReq for desktop notifications 2023-11-15 11:21:30 -06:00
Gregory Anders
3f4ea2f763 core: support OSC 9 and OSC 777 for showing desktop notifications 2023-11-15 10:25:02 -06:00
Mitchell Hashimoto
822c67b3e0 termio/exec: fall back to default command if specified command not found
Fixes #880

If a command is specified but it can't be found, then we try to fallback
to a default command like "sh" and log the issue. This prevents Ghostty
from simply exiting.
2023-11-14 16:58:27 -08:00
Mitchell Hashimoto
c8ffc903be termio: Fix deadlock when writer mailbox is full
Fixes #865
Related to #861

In #861, we fixed a deadlock that could happen if the writer mailbox was
full from the reader thread by waking up the writer thread for
processing.

Unfortunately, the writer thread ALSO handles messages that require the
terminal lock (i.e. resizing, focus state, etc.). If the mailbox
contains these messages, it cannot make forward progress on the writes
(which do not require a lock). This makes it possible still under heavy
write scenarios to fully deadlock the read/write threads.

This commit modifies the behavior so that while we are attempting to
queue a writer message after it fails, we release the lock. This is a
very slow path since we are releasing/acquiring locks under heavy
contention. We can improve it in the future but for now its okay because
this is also a rare situation that only happens under the heaviest loads
that also produce heavy writes.
2023-11-12 09:09:39 -08:00
Mitchell Hashimoto
d0a5faf57d Merge pull request #857 from gpanders/osc52-prompt
Implement user prompts for accessing clipboard via OSC 52
2023-11-11 15:16:12 -08:00
Mitchell Hashimoto
bde9b02db3 termio: wake up writer thread if the writer mailbox is full
Normally, we queue all the writes we need from a single `read()` syscall
and only wake up the writer thread at the end of processing that batch
of data.

But under very heavy load or large batches of data, it is possible for the
terminal sequences to generate enough writes to the pty to fill the
writer thread queue while we're still processing the data from `read()`.

This modifies our queuer to attempt to queue, but if the queue is full
we wake up the writer thread immediately then queue again (which should
succeed in every case -- eventually).
2023-11-10 22:01:07 -08:00
Gregory Anders
960a1bb091 gtk: implement OSC 52 prompts 2023-11-10 23:12:39 -05:00
Tim Culverhouse
2525382b27 terminal: initialize active palette with configured palette
PR #850 introduced several color palette OSC setting and querying
sequencing. In doing so, an active palette was introduced to enable
resetting back to the default (configured) palette. The active palette
was not initialized with the configured palette, thus any configured
theme by the terminal was not set at launch.

This behavior can be confirmed thanks to PR #852, which resets the
active palette on configuration reload. To observe the behavior:

1. Set the configured palette to something other than the default
2. Open ghostty. Observe the color palette
3. Reload the configuration
4. Press enter for a new shell prompt. Note the palette has changed

This patch sets the configured palette as the active palette at
initialization.
2023-11-10 08:08:49 -06:00
Gregory Anders
998d7668e9 core: update active palette on config reload
When the config is changed, update the active palette in addition to the
default palette, but only those colors which have not been changed with
OSC 4.
2023-11-09 19:06:58 -06:00
Mitchell Hashimoto
53a5734d09 terminal: change mask from u256 to StaticBitSet 2023-11-09 15:14:33 -08:00
Gregory Anders
171292a063 core: implement OSC 12 and OSC 112 to query/set/reset cursor color 2023-11-09 16:21:07 -06:00
Gregory Anders
33753f59c8 core: implement OSC 104, 110, and 111 to reset colors 2023-11-09 16:17:21 -06:00
Gregory Anders
1c0b79c40f core: separate default colors from modifiable colors
Default colors are those set by the user in the config file, or an
actual default value if unset. The actual colors are modifiable and can
be changed using the OSC 4, 10, and 11 sequences.
2023-11-09 14:08:14 -06:00
Gregory Anders
49feaedef6 core: move color parsing functions into RGB namespace 2023-11-09 14:06:06 -06:00
Gregory Anders
006e93bd08 core: implement setting colors with OSC 4, 10, and 11 2023-11-09 11:59:20 -06:00
Gregory Anders
3b7e21df26 termio: update foreground and background color on config change 2023-11-09 11:49:16 -06:00
Gregory Anders
f397353282 core: implement querying with OSC 4 2023-11-09 11:49:06 -06:00
Mitchell Hashimoto
18c852d47c config: switch shell-integration-features 2023-11-07 17:05:09 -08:00
Tim Culverhouse
4fac674016 shell-integration: implement "no-cursor" option
Implement a "no-cursor" option for shell integration. This option acts
like "detect" but doesn't set the cursor shape.
2023-11-07 16:31:07 -06:00
Tim Culverhouse
9a64697433 mouse: set mouse to text when bypassing mouse reporting
When shift is held, we are bypassing mouse reporting mode. Change the
cursor to text to indicate this to the user. On release, change back to
whatever we were before.
2023-11-06 14:36:59 -08:00
Tim Culverhouse
c96cedcf22 mouse: set mouse as text only when not reporting mouse events
The selection mode is only valid when mouse reporting events are on. If
we have any mouse reporting events turned on, reset the mouse shape back
to default (a pointer).
2023-11-06 14:36:59 -08:00
Tim Culverhouse
49fb5c8688 gtk(mouse): use "text" enum as default value
Use the .text field of the enum as the default value of the mouse shape
instead of renaming .default. Store the default value as the current
value for use in subsequent commits
2023-11-06 14:36:57 -08:00
Mitchell Hashimoto
268d39fe75 termio: cursor-style-blink being set disables DEC mode 12
Fixes #820

See the very long comment in termio/Exec.zig.
2023-11-06 12:06:11 -08:00
Mitchell Hashimoto
85a5a231f2 termio: cleanup 2023-11-05 17:52:46 -08:00
Mitchell Hashimoto
3dc2bbc9b0 os: add internal_os.pipe for cross-platfor pipe 2023-11-05 15:54:50 -08:00
Mitchell Hashimoto
7594bbd621 shuffle some source around 2023-11-05 15:27:46 -08:00
kcbanner
232df8de8f windows: add support for the glfw backend on Windows
Changes:
- Add WindowsPty, which uses the ConPTY API to create a pseudo console
- Pty now selects between PosixPty and WindowsPty
- Windows support in Command, including the ability to launch a process with a pseudo console
- Enable Command tests on windows
- Add some environment variable abstractions to handle the missing libc APIs on Windows
- Windows version of ReadThread
2023-11-05 23:15:49 +00:00
Mitchell Hashimoto
f705fe6cf2 termio: initialize pwd before subprocess starts
Fixes #807
2023-11-05 11:23:14 -08:00
Mitchell Hashimoto
9c56bd5dba config: command-arg to specify arguments to the executed command
Fixes #744
2023-10-27 15:38:50 -07:00
Mitchell Hashimoto
ecbd52015b termio: inspector forces byte-at-a-time processing 2023-10-24 21:35:56 -07:00
Mitchell Hashimoto
7b2af3a039 inspector: start termio log 2023-10-24 15:27:17 -07:00
Mitchell Hashimoto
12054087e1 terminal: scroll up full top/bottom region was off by one
Fixes #689

See test cases, verified with xterm.
2023-10-16 09:25:47 -07:00
Mitchell Hashimoto
7b81eba565 terminal: cursor position report respects left scroll region with origin 2023-10-15 21:58:13 -07:00
Mitchell Hashimoto
de1ed071ad termio: configure OSC parser with an allocator 2023-10-15 08:41:38 -07:00
Mitchell Hashimoto
5ce50d08a1 terminal: linefeed mode 2023-10-12 20:46:26 -07:00
Mitchell Hashimoto
f94f32be79 website 2023-10-11 22:01:37 -07:00
Mitchell Hashimoto
392da475e1 terminal: XTSHIFTESCAPE 2023-10-11 21:49:04 -07:00
Mitchell Hashimoto
d8f2a8dff0 termio: NEL is index then CR 2023-10-10 14:37:25 -07:00