FreeBSD Manual Pages
FISH-TERMINAL-COMPATIBILITY(1) fish-shell FISH-TERMINAL-COMPATIBILITY(1) fish writes various control sequences to the terminal. Some must be imple- mented to enable basic functionality, while others enable optional features and may be ignored by the terminal. The terminal must be able to parse Control Sequence Introducer (CSI) commands, Operating System Commands (OSC) and optionally Device Control Strings (DCS). These are defined by ECMA-48. If a valid CSI, OSC or DCS sequence does not represent a command implemented by the terminal, the terminal must ignore it. For historical reasons, OSC sequences may be terminated with \x07 instead of \e\\. Control sequences are denoted in a fish-like syntax. Special characters other than \ are not escaped. Spaces are only added for readability and are not part of the sequence. Placeholders are written as Ps for a number or Pt for an arbitrary printable string. NOTE: fish does not rely on your system's terminfo database. In this docu- ment, terminfo (TI) codes are included for reference only. REQUIRED COMMANDS +----------+-------+---------------------+ | Sequence | TI | Description | +----------+-------+---------------------+ | \r | n/a | Move cursor to the | | | | beginning of the | | | | line | +----------+-------+---------------------+ | \n | cud1 | Move cursor down | | | | one line. | +----------+-------+---------------------+ | \e[ Ps A | cuu | Move cursor up Ps | | | | columns, or one | | | | column if no para- | | | | meter. | +----------+-------+---------------------+ | \e[ Ps C | cuf | Move cursor to the | | | | right Ps columns, | | | | or one column if no | | | | parameter. | +----------+-------+---------------------+ | \x08 | cub1 | Move cursor one | | | | column to the left. | +----------+-------+---------------------+ | \e[ Ps D | cub | Move cursor to the | | | | left Ps times. | +----------+-------+---------------------+ | \e[H | cup | Set cursor position | | | | (no parameters | | | | means: move to row | | | | 1, column 1). | +----------+-------+---------------------+ | \e[K | el | Clear to end of | | | | line. | +----------+-------+---------------------+ | \e[J | ed | Clear to the end of | | | | screen. | +----------+-------+---------------------+ | \e[2J | clear | Clear the screen. | +----------+-------+---------------------+ | \e[0c | | Request Primary De- | | | | vice Attribute. | | | | The terminal must | | | | respond with a CSI | | | | command that starts | | | | with the ? parame- | | | | ter byte (so a se- | | | | quence starting | | | | with \e[?) and has | | | | c as final byte. | | | | | | | | Failure to imple- | | | | ment this will | | | | cause a brief pause | | | | at startup followed | | | | by a warning. For | | | | the time being, | | | | both can be turned | | | | off by turning off | | | | the query-terminal | | | | feature flag. | +----------+-------+---------------------+ | n/a | am | Soft wrap text at | | | | screen width. | +----------+-------+---------------------+ | n/a | xenl | Printing to the | | | | last column does | | | | not move the cursor | | | | to the next line. | | | | Verify this by run- | | | | ning printf | | | | %0"$COLUMNS"d 0; | | | | sleep 3 | +----------+-------+---------------------+ OPTIONAL COMMANDS +---------------------+-------------+---------------------------------+ | Sequence | TI | Description | +---------------------+-------------+---------------------------------+ | \t | it | Move the cursor to | | | | the next tab stop | | | | ( 8 columns). | | | | This is mainly rel- | | | | evant if your | | | | prompt includes | | | | tabs. | +---------------------+-------------+---------------------------------+ | \e[m | sgr0 | Turn off | | | | bold/dim/italic/un- | | | | derline/reverse at- | | | | tribute modes and | | | | select default col- | | | | ors. | +---------------------+-------------+---------------------------------+ | \e[1m | bold | Enter bold mode. | +---------------------+-------------+---------------------------------+ | \e[2m | dim | Enter dim mode. | +---------------------+-------------+---------------------------------+ | \e[3m | sitm | Enter italic mode. | +---------------------+-------------+---------------------------------+ | \e[4m | smul | Enter underline | | | | mode. | +---------------------+-------------+---------------------------------+ | \e[4:2m | Su | Enter double under- | | | | line mode. | +---------------------+-------------+---------------------------------+ | \e[4:3m | Su | Enter curly under- | | | | line mode. | +---------------------+-------------+---------------------------------+ | \e[4:4m | Su | Enter dotted under- | | | | line mode. | +---------------------+-------------+---------------------------------+ | \e[4:5m | Su | Enter dashed under- | | | | line mode. | +---------------------+-------------+---------------------------------+ | \e[7m | rev | Enter reverse video | | | | mode (swap fore- | | | | ground and back- | | | | ground colors). | +---------------------+-------------+---------------------------------+ | \e[23m | ritm | Exit italic mode. | +---------------------+-------------+---------------------------------+ | \e[24m | rmul | Exit underline | | | | mode. | +---------------------+-------------+---------------------------------+ | \e[38;5; Ps m | setaf | Select foreground | | | | color Ps from the | | | | 256-color-palette. | +---------------------+-------------+---------------------------------+ | \e[48;5; Ps m | setab | Select background | | | | color Ps from the | | | | 256-color-palette. | +---------------------+-------------+---------------------------------+ | \e[58:5: Ps m | Su | Select underline | | (note: colons not | | color Ps from the | | semicolons) | | 256-color-palette. | +---------------------+-------------+---------------------------------+ | \e[ Ps m | setaf setab | Select fore- | | | | ground/background | | | | color. This uses a | | | | color in the afore- | | | | mentioned | | | | 256-color-palette, | | | | based on the range | | | | that contains the | | | | parameter: 30-37 | | | | maps to foreground | | | | 0-7, 40-47 maps to | | | | background 0-7, | | | | 90-97 maps to fore- | | | | ground 8-15 and | | | | 100-107 maps to | | | | background 8-15. | +---------------------+-------------+---------------------------------+ | \e[38;2; Ps ; Ps ; | | Select foreground | | Ps m | | color from 24-bit | | | | RGB colors. | +---------------------+-------------+---------------------------------+ | \e[48;2; Ps ; Ps ; | | Select background | | Ps m | | color from 24-bit | | | | RGB colors. | +---------------------+-------------+---------------------------------+ | \e[49m | | Reset background | | | | color to the termi- | | | | nal's default. | +---------------------+-------------+---------------------------------+ | \e[58:2:: Ps : Ps : | Su | Select underline | | Ps m (note: colons | | color from 24-bit | | not semicolons) | | RGB colors. | +---------------------+-------------+---------------------------------+ | \e[59m | Su | Reset underline | | | | color to the de- | | | | fault (follow the | | | | foreground color). | +---------------------+-------------+---------------------------------+ | \e[ Ps S | indn | Scroll up the con- | | | | tent (not the view- | | | | port) Ps lines | | | | (called SCROLL UP / | | | | SU by ECMA-48 and | | | | "scroll forward" by | | | | terminfo). When | | | | fish detects sup- | | | | port for this fea- | | | | ture, status | | | | test-terminal-fea- | | | | tures scroll-con- | | | | tent-up will return | | | | 0, which enables | | | | the ctrl-l binding | | | | to use the | | | | scrollback-push | | | | special input func- | | | | tion. | +---------------------+-------------+---------------------------------+ | \e[= Ps u, \e[? Ps | n/a | Enable the kitty | | u | | keyboard protocol. | +---------------------+-------------+---------------------------------+ | \e[6n | n/a | Request cursor po- | | | | sition report. The | | | | response must be of | | | | the form \e[ Ps ; | | | | Ps R where the | | | | first parameter is | | | | the row number and | | | | the second parame- | | | | ter is the column | | | | number. Both start | | | | at 1. | | | | | | | | This is used for | | | | truncating multi- | | | | line autosugges- | | | | tions at the | | | | screen's bottom | | | | edge, by the | | | | scrollback-push | | | | special input func- | | | | tion, and inside | | | | terminals that im- | | | | plement the OSC 133 | | | | click_events fea- | | | | ture. | +---------------------+-------------+---------------------------------+ | \e[ \x20 q | Se | Reset cursor style | | | | to the terminal's | | | | default. This is | | | | not used as of to- | | | | day but may be in | | | | future. | +---------------------+-------------+---------------------------------+ | \e[ Ps \x20 q | Ss | Set cursor style | | | | (DECSCUSR); Ps is | | | | 2, 4 or 6 for | | | | block, underscore | | | | or line shape. | +---------------------+-------------+---------------------------------+ | \e[ Ps q | n/a | Request terminal | | | | name and version | | | | (XTVERSION). This | | | | is only used for | | | | temporary | | | | workarounds for in- | | | | compatible termi- | | | | nals. | +---------------------+-------------+---------------------------------+ | \e[?25h | cvvis | Enable cursor visi- | | | | bility (DECTCEM). | +---------------------+-------------+---------------------------------+ | \e[?1004h | n/a | Enable focus re- | | | | porting. | +---------------------+-------------+---------------------------------+ | \e[?1004l | n/a | Disable focus re- | | | | porting. | +---------------------+-------------+---------------------------------+ | \e[?1049h | n/a | Enable alternate | | | | screen buffer. | +---------------------+-------------+---------------------------------+ | \e[?1049l | n/a | Disable alternate | | | | screen buffer. | +---------------------+-------------+---------------------------------+ | \e[?2004h | | Enable bracketed | | | | paste. | +---------------------+-------------+---------------------------------+ | \e[?2004l | | Disable bracketed | | | | paste. | +---------------------+-------------+---------------------------------+ | \e[?2031h | | Enable unsolicited | | | | color theme report- | | | | ing <https://con- | | | | tour-termi- | | | | nal.org/vt-exten- | | | | sions/color- | | | | palette-update-no- | | | | tifications/>. | | | | When enabled, the | | | | terminal should | | | | send \e[?997;1n or | | | | \e[?997;2n whenever | | | | its color theme has | | | | changed. This | | | | prompts fish to | | | | query for | | | | background color. | +---------------------+-------------+---------------------------------+ | \e[?2031l | | Disable unsolicited | | | | color theme report- | | | | ing. | +---------------------+-------------+---------------------------------+ | \e]0; Pt \e\\ | ts | Set terminal window | | | | title (OSC 0). Used | | | | in fish_title. | +---------------------+-------------+---------------------------------+ | \e]2; Pt \e\\ | ts | Set terminal tab | | | | title (OSC 1). Used | | | | in fish_tab_title. | +---------------------+-------------+---------------------------------+ | \e]7;file:// Pt / | | Report working di- | | Pt \e\\ | | rectory (OSC 7). | | | | Since the terminal | | | | may be running on a | | | | different system | | | | than a (remote) | | | | shell, the hostname | | | | (first parameter) | | | | will not be local- | | | | host. | +---------------------+-------------+---------------------------------+ | \e]8;; Pt \e\\ | | Create a hyperlink | | | | (OSC 8) | | | | <https://gist.github.com/egmon- | | | | tkob/eb114294ef- | | | | bcd5adb1944c9f3cb5feda>. | | | | This is used in | | | | fish's man pages. | +---------------------+-------------+---------------------------------+ | \e]11;?\e\\ | n/a | Query background color. | | | | | | | | A valid response would be of | | | | the form \e]11;rgb: Pt / Pt / | | | | Pt \e\\ or \e]11;rgba: Pt / Pt | | | | / Pt / Pt\e\\ where the first | | | | three parameters consist of one | | | | to four hex digits each, repre- | | | | senting red, blue and green | | | | components. | | | | | | | | This is used to populate | | | | fish_terminal_color_theme, | | | | which is used to select a theme | | | | variant optimized for the ter- | | | | minal's color theme. | +---------------------+-------------+---------------------------------+ | \e]52;c; Pt \e\\ | | Copy to clipboard (OSC 52). | | | | Used by fish_clipboard_copy. | +---------------------+-------------+---------------------------------+ | \e]133;A; | | Mark prompt start (OSC 133), | | click_events=1\e\\ | | with kitty's click_events ex- | | | | tension. The click_events ex- | | | | tension enables mouse clicks to | | | | move the cursor or select pager | | | | items, assuming that cursor po- | | | | sition reporting is available. | +---------------------+-------------+---------------------------------+ | \e]133;B\e\\ | | Mark prompt end (OSC 133). | +---------------------+-------------+---------------------------------+ | \e]133;C; cmd- | | Mark command start (OSC 133), | | line_url= Pt \e\\ | | with kitty's cmdline_url exten- | | | | sion whose parameter is the | | | | URL-encoded command line. | +---------------------+-------------+---------------------------------+ | \e]133;D; Ps \e\\ | | Mark command end (OSC 133); Ps | | | | is the exit status. | +---------------------+-------------+---------------------------------+ | \eP+q Pt \e\\ | | Request terminfo capability | | | | (XTGETTCAP). The parameter is | | | | the capability's hex-encoded | | | | terminfo code. | | | | | | | | The response must be of the | | | | form \eP1+q Pt \e\\ ("boolean") | | | | or \eP1+q Pt = Pt \e\\ | | | | ("string"). In either variant, | | | | the first parameter must be the | | | | same as the request parameter. | | | | | | | | fish queries the following | | | | string capabilities: | | | | | | | | • indn | | | | | | | | The response's second | | | | parameter is ignored. | | | | | | | | • query-os-name (for | | | | status terminal-os) | | | | | | | | Terminals running on | | | | Unix should respond | | | | with the hex encoding | | | | of $(uname -s) as sec- | | | | ond parameter. | +---------------------+-------------+---------------------------------+ DCS COMMANDS AND GNU SCREEN DCS parsing is optional because fish temporarily switches to the alter- nate screen before printing any DCS commands. However, since GNU screen neither allows turning on the alternate screen buffer by de- fault, nor treats DCS commands in a compatible way, fish's initial prompt may be garbled by a DCS payload like +q696e646e. For the time being, fish works around this by checking for presence of the STY envi- ronment variable. If that doesn't work for some reason, you can add this to your ~/.screenrc: altscreen on Or add this to your config.fish: function GNU-screen-workaround --on-event fish_prompt commandline -f repaint functions --erase GNU-screen-workaround end UNICODE CODEPOINTS By default, fish outputs the following non-ASCII characters: as well as control pictures (U+2400 through U+241F), and locale-spe- cific ones in translated strings. AUTHOR fish-shell developers COPYRIGHT fish-shell developers 4.3 Feb 27, 2026 FISH-TERMINAL-COMPATIBILITY(1)
REQUIRED COMMANDS | OPTIONAL COMMANDS | DCS COMMANDS AND GNU SCREEN | UNICODE CODEPOINTS | AUTHOR | COPYRIGHT
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=fish-terminal-compatibility&sektion=1&manpath=FreeBSD+Ports+15.0.quarterly>
