307 Commits

Author SHA1 Message Date
Mitchell Hashimoto
90dcf1b7a8 Revert "termio: clear screen always sends form feed (0x0C)"
This reverts commit abc383854604189378bfe61239c14f263f7a14de.

See #623
2023-10-07 13:58:07 -07:00
Mitchell Hashimoto
b927760149 terminal: HPR, VPR 2023-10-07 09:32:58 -07:00
Mitchell Hashimoto
f5a5de15cc terminal: HPA, VPA 2023-10-07 09:22:13 -07:00
Mitchell Hashimoto
abc3838546 termio: clear screen always sends form feed (0x0C)
Fixes #555
2023-09-29 21:42:58 -07:00
Tim Culverhouse
0231c61a50 termio: reset mouse shape on terminal reset
Reset the mouse shape to `.default` when a full reset is done on the
terminal. Prevents the terminal from appearing to be in a persistent
hang
2023-09-27 20:51:31 -05:00
Mitchell Hashimoto
1dcb23de0f termio/exec: need to defer deinit for DCS command 2023-09-27 14:52:13 -07:00
Mitchell Hashimoto
8208947290 termio/exec: hook up xtgettcap 2023-09-27 14:27:56 -07:00
Mitchell Hashimoto
823f47f695 termio: hook up dcs callbacks 2023-09-27 13:32:00 -07:00
Mitchell Hashimoto
032fcee9ff terminal: DCS handler, XTGETTCAP parsing 2023-09-27 12:07:31 -07:00
Tim Culverhouse
779186adc0 config: add term config option
Add a configuration key for the TERM environment variable. Default this
to "ghostty". Most TEs are using their name as the default TERM value.
Most modern termulators aren't even providing "xterm-" as an alias
anymore, after some drama between kitty / ncurses.

Notably, this also has issues for tcell-based applications (I've
submitted a PR to tcell to fix) because it fails if the TERM value
doesn't match the _primary_ name of the terminal in the terminfo file.

Providing a config option allows users to modify-with-persistence if
they have issues, but Ghostty should be known as Ghostty by default!
2023-09-26 12:53:41 -05:00
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