147 Commits

Author SHA1 Message Date
Mitchell Hashimoto
e1d66da1b6 Merge pull request #536 from mitchellh/protected-mode
DEC Protected Mode (DECSCA, DECSEL, DECSED)
2023-09-25 11:57:05 -07:00
Mitchell Hashimoto
35f89bd28c terminal: eraseDisplay protected 2023-09-25 11:16:06 -07:00
Tim Culverhouse
3d5180a177 terminal: use ST instead of BEL terminator for XTVERSION
The XTVERSION response should use a string terminator instead of a bell.
Most terminals can handle the bell, however specifically tmux does not
like it.

Fixes: #534
2023-09-25 13:08:31 -05:00
Mitchell Hashimoto
f1c771615f terminal: eraseLine protected, tests 2023-09-25 10:56:59 -07:00
Mitchell Hashimoto
5528580a29 terminal: DECSED, DECSEL parsing, tests 2023-09-25 10:56:59 -07:00
Mitchell Hashimoto
8137a66ef6 terminal: CSI Ps " q for setting DEC protected mode 2023-09-25 10:56:59 -07:00
Mitchell Hashimoto
92e98d34b5 terminal: CSI E and F 2023-09-21 08:21:32 -07:00
Tim Culverhouse
2d769b03ae terminal: use larger buffer for xtversion response
Commit fbe030d85a80 ("terminal: respond to XTVERSION query") introduced
responding to XTVERSION queries. The implementation uses the
.write_small method, which has a limit of 38 bytes. This works well if
your branch is named "main", since the branch is part of the
version_string variable. If you start using longer branch names, you can
quickly run into the limit.

The XTVERSION response is:

  "\x1bP>|ghostty d.d.d-<branch>+<12-digit-hash>\x07"

Which has an overhead of 32 bytes, meaning the natural branch limit is 6
bytes (6 characters, assuming you use ASCII branch names). Github has a
limit of 256 chars, so let's set a max XTVERSION buffer of 256+32 = 288

Fixes: fbe030d85a80 ("terminal: respond to XTVERSION query")
2023-09-21 03:04:23 -05:00
Tim Culverhouse
fbe030d85a terminal: respond to XTVERSION query
XTVERSION (CSI > 0 q) is used by some libraries to identify the terminal
+ version. Respond to this query with `ghostty {version_string}`. There
is no formal format for this response. A roundup of a few tested
terminals show two primary formats. This patch opts to save one byte and
use the `name SP version` semantics.

foot: foot(version)
xterm: XTerm(version)
contour: contour version
wezterm: wezterm version

Reference: https://github.com/dankamongmen/notcurses/blob/master/TERMINALS.md#notes-for-terminal-authors
Signed-off-by: Tim Culverhouse <tim@timculverhouse.com>
2023-09-20 19:06:28 -05:00
Mitchell Hashimoto
59267c4c4d termio/exec: remove GHOSTTY_MAC_APP on Mac 2023-09-20 14:25:48 -07:00
Mitchell Hashimoto
14724290d8 config: change osc-color-report-format enum 2023-09-14 13:15:09 -07:00
Mitchell Hashimoto
19ef4a22a9 terminal: stylistic changes for OSC terminators, 10/11 params 2023-09-14 13:12:41 -07:00
cryptocode
dc14ca86ca Review updates:
* Change state names to more human readable query_default_fg/bg
* Single-line state prongs
* String terminator is not an enum
* Removed `endWithStringTerminator` and added nullabe arg to `end`
* Fixed a color reporting bug, fg/bg wasn't correctly picked
2023-09-14 21:46:23 +02:00
cryptocode
a3696a9185 Implement OSC 10 and OSC 11 default color queries
These OSC commands report the default foreground and background colors.

Most terminals return the RGB components scaled up to 16-bit components, because some
legacy software are unable to read 8-bit components. The PR follows this conventions.

iTerm2 allow 8-bit reporting through a config option, and a similar option is
added here. In addition to picking between scaled and unscaled reporting, the user
can also turn off OSC 10/11 replies altogether.

Scaling is essentially c / 1 * 65535, where c is the 8-bit component, and reporting
is left-padded with zeros if necessary. This format appears to stem from the XParseColor
format.
2023-09-14 21:41:40 +02:00
Mitchell Hashimoto
cb2931cb27 rename cursor shape to mouse shape for OSC 22 2023-09-14 11:12:17 -07:00
Mitchell Hashimoto
7734bab8c4 terminal: cursor shape parsing, hook up to apprt callback 2023-09-14 10:12:38 -07:00
Mitchell Hashimoto
8d96c2beed termio/exec: changing default cursor config updates at runtime 2023-09-09 20:40:38 -07:00
Mitchell Hashimoto
160b1eeb5a termio/exec: ensure initial cursor blink mode is set to config 2023-09-09 20:40:22 -07:00
Mitchell Hashimoto
d9cfd00e9f Big Cursor State Refactor
This makes a few major changes:

  - cursor style on terminal is single source of stylistic truth
  - cursor style is split between style and style request
  - cursor blinking is handled by the renderer thread
  - cursor style/visibility is no longer stored as persistent state on
    renderers
  - cursor style computation is extracted to be shared by all renderers
  - mode 12 "cursor_blinking" is now source of truth on whether blinking
    is enabled or not
  - CSI q and mode 12 are synced like xterm
2023-09-09 20:19:37 -07:00
Mitchell Hashimoto
cdf81b610d terminal: mark prompt continuation lines, end prompt clear at first
prompt
2023-09-03 14:00:56 -07:00
Mitchell Hashimoto
d05381db83 remove some unreachables, log errors to avoid crashes
These are still TODO but we don't want to crash on bad input.
2023-08-31 14:55:27 -07:00
Will Pragnell
aa9e12dac2 termio/exec: don't leak zombie subprocesses 2023-08-30 21:37:38 -07:00
Mitchell Hashimoto
0204d94921 Merge pull request #349 from mitchellh/sync
Synchronized Output Sequence
2023-08-28 13:15:50 -07:00
Mitchell Hashimoto
0feac5d6cf termio/exec: disable synchronized output mode on resize 2023-08-28 11:43:28 -07:00
Mitchell Hashimoto
2cc1e43716 termio: handle all the synchronized output setting, timer 2023-08-28 11:35:40 -07:00
cryptocode
bdafd2dc8b Add comment explaining the purpose of the env variables 2023-08-28 20:25:44 +02:00
cryptocode
dfe21dcac4 Set TERM_PROGRAM and TERM_PROGRAM_VERSION environment variables.
WezTerm claims this is an emerging de-facto standard for terminal emulator identification:
a103b6d97a/config/src/config.rs (L1526-L1529)

One example of usage in the wild is neovim doing capability detection:
f050aaabbb/src/nvim/tui/tui.c (L206-L211)

Ghostty now reports this:

$echo $TERM_PROGRAM
ghostty

$echo $TERM_PROGRAM_VERSION
0.1.0-main+aa08f3c

I think it's really nice that the commit hash is included, as users can provide this in issue reports. WezTerm does the same.

I use these variables in my tui library in addition to $TERM and $COLORTERM for capability detection, which is what motivated this PR.
2023-08-28 20:16:46 +02:00
Mitchell Hashimoto
3b9d5d27ad terminal: implement DECRQM (request mode) 2023-08-28 08:50:11 -07:00
Mitchell Hashimoto
f2f2b1eaf1 termio/exec: initial subprocess screen size should be sub padding 2023-08-24 08:45:32 -07:00
Mitchell Hashimoto
ec5dcf0850 terminal/kitty-gfx: do not send response on transmit/display unless I 2023-08-23 22:37:01 -07:00
Mitchell Hashimoto
46ba3189f6 config: image-storage-limit to set maximum image memory per terminal 2023-08-23 16:58:16 -07:00
Mitchell Hashimoto
71f1f35cfc terminal/kitty-gfx: move cursor after image placement 2023-08-22 12:15:51 -07:00
Mitchell Hashimoto
660faf3ac3 terminal: clear screen, alt screen, etc. clear all kitty graphics 2023-08-21 15:34:46 -07:00
Mitchell Hashimoto
b2432a672f terminal/kitty-gfx: add debug function to dump image data 2023-08-21 08:28:20 -07:00
Mitchell Hashimoto
bbcb2f96c8 terminal/kitty-gfx: huge progress on chunked transfers, lots of issues 2023-08-20 22:03:21 -07:00
Mitchell Hashimoto
80c7f09a36 terminal/kitty-gfx: start terminal state, can load and add images 2023-08-20 22:03:21 -07:00
Mitchell Hashimoto
c7658df978 terminal/kitty-gfx: support "query", loading images, tests 2023-08-20 22:03:20 -07:00
Mitchell Hashimoto
824d586afc terminal: generalized APC handler 2023-08-20 22:03:20 -07:00
Mitchell Hashimoto
bddf8a8cb3 termio/exec: limit max apc string length 2023-08-20 22:03:19 -07:00
Mitchell Hashimoto
6e061fb344 termio/exec: process APC callbacks 2023-08-20 22:03:19 -07:00
Mitchell Hashimoto
3ca759bac6 core: send pixel-level surface sizing to the pty 2023-08-20 22:03:19 -07:00
Mitchell Hashimoto
e7ab16f0e1 terminal: CSI < u defaults param to "1" if not set (pop kitty keyboard) 2023-08-20 22:02:12 -07:00
Mitchell Hashimoto
fe1e879ec7 termio: disable kitty keyboard protocol for glfw
See comment.
2023-08-17 15:08:39 -07:00
Mitchell Hashimoto
af4ede40f1 terminal: implement CSI = u for setting kitty keyboard flags 2023-08-16 17:31:05 -07:00
Mitchell Hashimoto
a9d7e0eb7f terminal: parse kitty query, push, pop keyboard flags 2023-08-16 17:31:05 -07:00
Mitchell Hashimoto
d0bf6a914f termio: on restore mode we need to call setMode no matter what 2023-08-15 11:47:31 -07:00
Mitchell Hashimoto
06f82ad713 terminal: parse and handle save/restore mode (CSI ? s, CSI ? r) 2023-08-15 11:43:07 -07:00
Mitchell Hashimoto
951aa00c63 terminal: move to new modes struct 2023-08-15 11:30:33 -07:00
Mitchell Hashimoto
d27bc1f0fe termio: send VT220 device attributes on request, add secondary 2023-08-15 08:21:48 -07:00
Mitchell Hashimoto
4a384aa272 parse and respect mode 1036 2023-08-13 15:12:13 -07:00