| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908 |
- /**
- * @license MIT
- *
- * This contains the type declarations for the xterm.js library. Note that
- * some interfaces differ between this file and the actual implementation in
- * src/, that's because this file declares the *public* API which is intended
- * to be stable and consumed by external programs.
- */
- /// <reference lib="dom"/>
- declare module '@xterm/xterm' {
- /**
- * A string or number representing text font weight.
- */
- export type FontWeight = 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | number;
- /**
- * A string representing log level.
- */
- export type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'off';
- /**
- * An object containing options for the terminal.
- */
- export interface ITerminalOptions {
- /**
- * Whether to allow the use of proposed API. When false, any usage of APIs
- * marked as experimental/proposed will throw an error. The default is
- * false.
- */
- allowProposedApi?: boolean;
- /**
- * Whether background should support non-opaque color. It must be set before
- * executing the `Terminal.open()` method and can't be changed later without
- * executing it again. Note that enabling this can negatively impact
- * performance.
- */
- allowTransparency?: boolean;
- /**
- * If enabled, alt + click will move the prompt cursor to position
- * underneath the mouse. The default is true.
- */
- altClickMovesCursor?: boolean;
- /**
- * When enabled the cursor will be set to the beginning of the next line
- * with every new line. This is equivalent to sending '\r\n' for each '\n'.
- * Normally the termios settings of the underlying PTY deals with the
- * translation of '\n' to '\r\n' and this setting should not be used. If you
- * deal with data from a non-PTY related source, this settings might be
- * useful.
- */
- convertEol?: boolean;
- /**
- * Whether the cursor blinks.
- */
- cursorBlink?: boolean;
- /**
- * The style of the cursor when the terminal is focused.
- */
- cursorStyle?: 'block' | 'underline' | 'bar';
- /**
- * The width of the cursor in CSS pixels when `cursorStyle` is set to 'bar'.
- */
- cursorWidth?: number;
- /**
- * The style of the cursor when the terminal is not focused.
- */
- cursorInactiveStyle?: 'outline' | 'block' | 'bar' | 'underline' | 'none';
- /**
- * Whether to draw custom glyphs for block element and box drawing
- * characters instead of using the font. This should typically result in
- * better rendering with continuous lines, even when line height and letter
- * spacing is used. Note that this doesn't work with the DOM renderer which
- * renders all characters using the font. The default is true.
- */
- customGlyphs?: boolean;
- /**
- * Whether input should be disabled.
- */
- disableStdin?: boolean;
- /**
- * A {@link Document} to use instead of the one that xterm.js was attached
- * to. The purpose of this is to improve support in multi-window
- * applications where HTML elements may be references across multiple
- * windows which can cause problems with `instanceof`.
- *
- * The type is `any` because using `Document` can cause TS to have
- * performance/compiler problems.
- */
- documentOverride?: any | null;
- /**
- * Whether to draw bold text in bright colors. The default is true.
- */
- drawBoldTextInBrightColors?: boolean;
- /**
- * The modifier key hold to multiply scroll speed.
- */
- fastScrollModifier?: 'none' | 'alt' | 'ctrl' | 'shift';
- /**
- * The scroll speed multiplier used for fast scrolling.
- */
- fastScrollSensitivity?: number;
- /**
- * The font size used to render text.
- */
- fontSize?: number;
- /**
- * The font family used to render text.
- */
- fontFamily?: string;
- /**
- * The font weight used to render non-bold text.
- */
- fontWeight?: FontWeight;
- /**
- * The font weight used to render bold text.
- */
- fontWeightBold?: FontWeight;
- /**
- * Whether to ignore the bracketed paste mode. When true, this will always
- * paste without the `\x1b[200~` and `\x1b[201~` sequences, even when the
- * shell enables bracketed mode.
- */
- ignoreBracketedPasteMode?: boolean;
- /**
- * The spacing in whole pixels between characters.
- */
- letterSpacing?: number;
- /**
- * The line height used to render text.
- */
- lineHeight?: number;
- /**
- * The handler for OSC 8 hyperlinks. Links will use the `confirm` browser
- * API with a strongly worded warning if no link handler is set.
- *
- * When setting this, consider the security of users opening these links,
- * at a minimum there should be a tooltip or a prompt when hovering or
- * activating the link respectively. An example of what might be possible is
- * a terminal app writing link in the form `javascript:...` that runs some
- * javascript, a safe approach to prevent that is to validate the link
- * starts with http(s)://.
- */
- linkHandler?: ILinkHandler | null;
- /**
- * What log level to use, this will log for all levels below and including
- * what is set:
- *
- * 1. trace
- * 2. debug
- * 3. info (default)
- * 4. warn
- * 5. error
- * 6. off
- */
- logLevel?: LogLevel;
- /**
- * A logger to use instead of `console`.
- */
- logger?: ILogger | null;
- /**
- * Whether to treat option as the meta key.
- */
- macOptionIsMeta?: boolean;
- /**
- * Whether holding a modifier key will force normal selection behavior,
- * regardless of whether the terminal is in mouse events mode. This will
- * also prevent mouse events from being emitted by the terminal. For
- * example, this allows you to use xterm.js' regular selection inside tmux
- * with mouse mode enabled.
- */
- macOptionClickForcesSelection?: boolean;
- /**
- * The minimum contrast ratio for text in the terminal, setting this will
- * change the foreground color dynamically depending on whether the contrast
- * ratio is met. Example values:
- *
- * - 1: The default, do nothing.
- * - 4.5: Minimum for WCAG AA compliance.
- * - 7: Minimum for WCAG AAA compliance.
- * - 21: White on black or black on white.
- */
- minimumContrastRatio?: number;
- /**
- * Whether to rescale glyphs horizontally that are a single cell wide but
- * have glyphs that would overlap following cell(s). This typically happens
- * for ambiguous width characters (eg. the roman numeral characters U+2160+)
- * which aren't featured in monospace fonts. This is an important feature
- * for achieving GB18030 compliance.
- *
- * The following glyphs will never be rescaled:
- *
- * - Emoji glyphs
- * - Powerline glyphs
- * - Nerd font glyphs
- *
- * Note that this doesn't work with the DOM renderer. The default is false.
- */
- rescaleOverlappingGlyphs?: boolean;
- /**
- * Whether to select the word under the cursor on right click, this is
- * standard behavior in a lot of macOS applications.
- */
- rightClickSelectsWord?: boolean;
- /**
- * Whether screen reader support is enabled. When on this will expose
- * supporting elements in the DOM to support NVDA on Windows and VoiceOver
- * on macOS.
- */
- screenReaderMode?: boolean;
- /**
- * The amount of scrollback in the terminal. Scrollback is the amount of
- * rows that are retained when lines are scrolled beyond the initial
- * viewport. Defaults to 1000.
- */
- scrollback?: number;
- /**
- * Whether to scroll to the bottom whenever there is some user input. The
- * default is true.
- */
- scrollOnUserInput?: boolean;
- /**
- * The scrolling speed multiplier used for adjusting normal scrolling speed.
- */
- scrollSensitivity?: number;
- /**
- * The duration to smoothly scroll between the origin and the target in
- * milliseconds. Set to 0 to disable smooth scrolling and scroll instantly.
- */
- smoothScrollDuration?: number;
- /**
- * The size of tab stops in the terminal.
- */
- tabStopWidth?: number;
- /**
- * The color theme of the terminal.
- */
- theme?: ITheme;
- /**
- * Whether "Windows mode" is enabled. Because Windows backends winpty and
- * conpty operate by doing line wrapping on their side, xterm.js does not
- * have access to wrapped lines. When Windows mode is enabled the following
- * changes will be in effect:
- *
- * - Reflow is disabled.
- * - Lines are assumed to be wrapped if the last character of the line is
- * not whitespace.
- *
- * When using conpty on Windows 11 version >= 21376, it is recommended to
- * disable this because native text wrapping sequences are output correctly
- * thanks to https://github.com/microsoft/terminal/issues/405
- *
- * @deprecated Use {@link windowsPty}. This value will be ignored if
- * windowsPty is set.
- */
- windowsMode?: boolean;
- /**
- * Compatibility information when the pty is known to be hosted on Windows.
- * Setting this will turn on certain heuristics/workarounds depending on the
- * values:
- *
- * - `if (backend !== undefined || buildNumber !== undefined)`
- * - When increasing the rows in the terminal, the amount increased into
- * the scrollback. This is done because ConPTY does not behave like
- * expect scrollback to come back into the viewport, instead it makes
- * empty rows at of the viewport. Not having this behavior can result in
- * missing data as the rows get replaced.
- * - `if !(backend === 'conpty' && buildNumber >= 21376)`
- * - Reflow is disabled
- * - Lines are assumed to be wrapped if the last character of the line is
- * not whitespace.
- */
- windowsPty?: IWindowsPty;
- /**
- * A string containing all characters that are considered word separated by
- * the double click to select work logic.
- */
- wordSeparator?: string;
- /**
- * Enable various window manipulation and report features.
- * All features are disabled by default for security reasons.
- */
- windowOptions?: IWindowOptions;
- /**
- * The width, in pixels, of the canvas for the overview ruler. The overview
- * ruler will be hidden when not set.
- */
- overviewRulerWidth?: number;
- }
- /**
- * An object containing additional options for the terminal that can only be
- * set on start up.
- */
- export interface ITerminalInitOnlyOptions {
- /**
- * The number of columns in the terminal.
- */
- cols?: number;
- /**
- * The number of rows in the terminal.
- */
- rows?: number;
- }
- /**
- * Contains colors to theme the terminal with.
- */
- export interface ITheme {
- /** The default foreground color */
- foreground?: string;
- /** The default background color */
- background?: string;
- /** The cursor color */
- cursor?: string;
- /** The accent color of the cursor (fg color for a block cursor) */
- cursorAccent?: string;
- /** The selection background color (can be transparent) */
- selectionBackground?: string;
- /** The selection foreground color */
- selectionForeground?: string;
- /**
- * The selection background color when the terminal does not have focus (can
- * be transparent)
- */
- selectionInactiveBackground?: string;
- /** ANSI black (eg. `\x1b[30m`) */
- black?: string;
- /** ANSI red (eg. `\x1b[31m`) */
- red?: string;
- /** ANSI green (eg. `\x1b[32m`) */
- green?: string;
- /** ANSI yellow (eg. `\x1b[33m`) */
- yellow?: string;
- /** ANSI blue (eg. `\x1b[34m`) */
- blue?: string;
- /** ANSI magenta (eg. `\x1b[35m`) */
- magenta?: string;
- /** ANSI cyan (eg. `\x1b[36m`) */
- cyan?: string;
- /** ANSI white (eg. `\x1b[37m`) */
- white?: string;
- /** ANSI bright black (eg. `\x1b[1;30m`) */
- brightBlack?: string;
- /** ANSI bright red (eg. `\x1b[1;31m`) */
- brightRed?: string;
- /** ANSI bright green (eg. `\x1b[1;32m`) */
- brightGreen?: string;
- /** ANSI bright yellow (eg. `\x1b[1;33m`) */
- brightYellow?: string;
- /** ANSI bright blue (eg. `\x1b[1;34m`) */
- brightBlue?: string;
- /** ANSI bright magenta (eg. `\x1b[1;35m`) */
- brightMagenta?: string;
- /** ANSI bright cyan (eg. `\x1b[1;36m`) */
- brightCyan?: string;
- /** ANSI bright white (eg. `\x1b[1;37m`) */
- brightWhite?: string;
- /** ANSI extended colors (16-255) */
- extendedAnsi?: string[];
- }
- /**
- * Pty information for Windows.
- */
- export interface IWindowsPty {
- /**
- * What pty emulation backend is being used.
- */
- backend?: 'conpty' | 'winpty';
- /**
- * The Windows build version (eg. 19045)
- */
- buildNumber?: number;
- }
- /**
- * A replacement logger for `console`.
- */
- export interface ILogger {
- /**
- * Log a trace message, this will only be called if
- * {@link ITerminalOptions.logLevel} is set to trace.
- */
- trace(message: string, ...args: any[]): void;
- /**
- * Log a debug message, this will only be called if
- * {@link ITerminalOptions.logLevel} is set to debug or below.
- */
- debug(message: string, ...args: any[]): void;
- /**
- * Log a debug message, this will only be called if
- * {@link ITerminalOptions.logLevel} is set to info or below.
- */
- info(message: string, ...args: any[]): void;
- /**
- * Log a debug message, this will only be called if
- * {@link ITerminalOptions.logLevel} is set to warn or below.
- */
- warn(message: string, ...args: any[]): void;
- /**
- * Log a debug message, this will only be called if
- * {@link ITerminalOptions.logLevel} is set to error or below.
- */
- error(message: string | Error, ...args: any[]): void;
- }
- /**
- * An object that can be disposed via a dispose function.
- */
- export interface IDisposable {
- dispose(): void;
- }
- /**
- * An event that can be listened to.
- * @returns an `IDisposable` to stop listening.
- */
- export interface IEvent<T, U = void> {
- (listener: (arg1: T, arg2: U) => any): IDisposable;
- }
- /**
- * Represents a specific line in the terminal that is tracked when scrollback
- * is trimmed and lines are added or removed. This is a single line that may
- * be part of a larger wrapped line.
- */
- export interface IMarker extends IDisposableWithEvent {
- /**
- * A unique identifier for this marker.
- */
- readonly id: number;
- /**
- * The actual line index in the buffer at this point in time. This is set to
- * -1 if the marker has been disposed.
- */
- readonly line: number;
- }
- /**
- * Represents a disposable that tracks is disposed state.
- */
- export interface IDisposableWithEvent extends IDisposable {
- /**
- * Event listener to get notified when this gets disposed.
- */
- onDispose: IEvent<void>;
- /**
- * Whether this is disposed.
- */
- readonly isDisposed: boolean;
- }
- /**
- * Represents a decoration in the terminal that is associated with a
- * particular marker and DOM element.
- */
- export interface IDecoration extends IDisposableWithEvent {
- /*
- * The marker for the decoration in the terminal.
- */
- readonly marker: IMarker;
- /**
- * An event fired when the decoration
- * is rendered, returns the dom element
- * associated with the decoration.
- */
- readonly onRender: IEvent<HTMLElement>;
- /**
- * The element that the decoration is rendered to. This will be undefined
- * until it is rendered for the first time by {@link IDecoration.onRender}.
- * that.
- */
- element: HTMLElement | undefined;
- /**
- * The options for the overview ruler that can be updated. This will only
- * take effect when {@link IDecorationOptions.overviewRulerOptions} were
- * provided initially.
- */
- options: Pick<IDecorationOptions, 'overviewRulerOptions'>;
- }
- /**
- * Overview ruler decoration options
- */
- interface IDecorationOverviewRulerOptions {
- color: string;
- position?: 'left' | 'center' | 'right' | 'full';
- }
- /*
- * Options that define the presentation of the decoration.
- */
- export interface IDecorationOptions {
- /**
- * The line in the terminal where
- * the decoration will be displayed
- */
- readonly marker: IMarker;
- /*
- * Where the decoration will be anchored -
- * defaults to the left edge
- */
- readonly anchor?: 'right' | 'left';
- /**
- * The x position offset relative to the anchor
- */
- readonly x?: number;
- /**
- * The width of the decoration in cells, defaults to 1.
- */
- readonly width?: number;
- /**
- * The height of the decoration in cells, defaults to 1.
- */
- readonly height?: number;
- /**
- * The background color of the cell(s). When 2 decorations both set the
- * foreground color the last registered decoration will be used. Only the
- * `#RRGGBB` format is supported.
- */
- readonly backgroundColor?: string;
- /**
- * The foreground color of the cell(s). When 2 decorations both set the
- * foreground color the last registered decoration will be used. Only the
- * `#RRGGBB` format is supported.
- */
- readonly foregroundColor?: string;
- /**
- * What layer to render the decoration at when {@link backgroundColor} or
- * {@link foregroundColor} are used. `'bottom'` will render under the
- * selection, `'top`' will render above the selection\*.
- *
- * *\* The selection will render on top regardless of layer on the canvas
- * renderer due to how it renders selection separately.*
- */
- readonly layer?: 'bottom' | 'top';
- /**
- * When defined, renders the decoration in the overview ruler to the right
- * of the terminal. {@link ITerminalOptions.overviewRulerWidth} must be set
- * in order to see the overview ruler.
- * @param color The color of the decoration.
- * @param position The position of the decoration.
- */
- overviewRulerOptions?: IDecorationOverviewRulerOptions;
- }
- /**
- * The set of localizable strings.
- */
- export interface ILocalizableStrings {
- /**
- * The aria label for the underlying input textarea for the terminal.
- */
- promptLabel: string;
- /**
- * Announcement for when line reading is suppressed due to too many lines
- * being printed to the terminal when `screenReaderMode` is enabled.
- */
- tooMuchOutput: string;
- }
- /**
- * Enable various window manipulation and report features
- * (`CSI Ps ; Ps ; Ps t`).
- *
- * Most settings have no default implementation, as they heavily rely on
- * the embedding environment.
- *
- * To implement a feature, create a custom CSI hook like this:
- * ```ts
- * term.parser.addCsiHandler({final: 't'}, params => {
- * const ps = params[0];
- * switch (ps) {
- * case XY:
- * ... // your implementation for option XY
- * return true; // signal Ps=XY was handled
- * }
- * return false; // any Ps that was not handled
- * });
- * ```
- *
- * Note on security:
- * Most features are meant to deal with some information of the host machine
- * where the terminal runs on. This is seen as a security risk possibly
- * leaking sensitive data of the host to the program in the terminal.
- * Therefore all options (even those without a default implementation) are
- * guarded by the boolean flag and disabled by default.
- */
- export interface IWindowOptions {
- /**
- * Ps=1 De-iconify window.
- * No default implementation.
- */
- restoreWin?: boolean;
- /**
- * Ps=2 Iconify window.
- * No default implementation.
- */
- minimizeWin?: boolean;
- /**
- * Ps=3 ; x ; y
- * Move window to [x, y].
- * No default implementation.
- */
- setWinPosition?: boolean;
- /**
- * Ps = 4 ; height ; width
- * Resize the window to given `height` and `width` in pixels.
- * Omitted parameters should reuse the current height or width.
- * Zero parameters should use the display's height or width.
- * No default implementation.
- */
- setWinSizePixels?: boolean;
- /**
- * Ps=5 Raise the window to the front of the stacking order.
- * No default implementation.
- */
- raiseWin?: boolean;
- /**
- * Ps=6 Lower the xterm window to the bottom of the stacking order.
- * No default implementation.
- */
- lowerWin?: boolean;
- /** Ps=7 Refresh the window. */
- refreshWin?: boolean;
- /**
- * Ps = 8 ; height ; width
- * Resize the text area to given height and width in characters.
- * Omitted parameters should reuse the current height or width.
- * Zero parameters use the display's height or width.
- * No default implementation.
- */
- setWinSizeChars?: boolean;
- /**
- * Ps=9 ; 0 Restore maximized window.
- * Ps=9 ; 1 Maximize window (i.e., resize to screen size).
- * Ps=9 ; 2 Maximize window vertically.
- * Ps=9 ; 3 Maximize window horizontally.
- * No default implementation.
- */
- maximizeWin?: boolean;
- /**
- * Ps=10 ; 0 Undo full-screen mode.
- * Ps=10 ; 1 Change to full-screen.
- * Ps=10 ; 2 Toggle full-screen.
- * No default implementation.
- */
- fullscreenWin?: boolean;
- /** Ps=11 Report xterm window state.
- * If the xterm window is non-iconified, it returns "CSI 1 t".
- * If the xterm window is iconified, it returns "CSI 2 t".
- * No default implementation.
- */
- getWinState?: boolean;
- /**
- * Ps=13 Report xterm window position. Result is "CSI 3 ; x ; y t".
- * Ps=13 ; 2 Report xterm text-area position. Result is "CSI 3 ; x ; y t".
- * No default implementation.
- */
- getWinPosition?: boolean;
- /**
- * Ps=14 Report xterm text area size in pixels. Result is "CSI 4 ; height ; width t".
- * Ps=14 ; 2 Report xterm window size in pixels. Result is "CSI 4 ; height ; width t".
- * Has a default implementation.
- */
- getWinSizePixels?: boolean;
- /**
- * Ps=15 Report size of the screen in pixels. Result is "CSI 5 ; height ; width t".
- * No default implementation.
- */
- getScreenSizePixels?: boolean;
- /**
- * Ps=16 Report xterm character cell size in pixels. Result is "CSI 6 ; height ; width t".
- * Has a default implementation.
- */
- getCellSizePixels?: boolean;
- /**
- * Ps=18 Report the size of the text area in characters. Result is "CSI 8 ; height ; width t".
- * Has a default implementation.
- */
- getWinSizeChars?: boolean;
- /**
- * Ps=19 Report the size of the screen in characters. Result is "CSI 9 ; height ; width t".
- * No default implementation.
- */
- getScreenSizeChars?: boolean;
- /**
- * Ps=20 Report xterm window's icon label. Result is "OSC L label ST".
- * No default implementation.
- */
- getIconTitle?: boolean;
- /**
- * Ps=21 Report xterm window's title. Result is "OSC l label ST".
- * No default implementation.
- */
- getWinTitle?: boolean;
- /**
- * Ps=22 ; 0 Save xterm icon and window title on stack.
- * Ps=22 ; 1 Save xterm icon title on stack.
- * Ps=22 ; 2 Save xterm window title on stack.
- * All variants have a default implementation.
- */
- pushTitle?: boolean;
- /**
- * Ps=23 ; 0 Restore xterm icon and window title from stack.
- * Ps=23 ; 1 Restore xterm icon title from stack.
- * Ps=23 ; 2 Restore xterm window title from stack.
- * All variants have a default implementation.
- */
- popTitle?: boolean;
- /**
- * Ps>=24 Resize to Ps lines (DECSLPP).
- * DECSLPP is not implemented. This settings is also used to
- * enable / disable DECCOLM (earlier variant of DECSLPP).
- */
- setWinLines?: boolean;
- }
- /**
- * The class that represents an xterm.js terminal.
- */
- export class Terminal implements IDisposable {
- /**
- * The element containing the terminal.
- */
- readonly element: HTMLElement | undefined;
- /**
- * The textarea that accepts input for the terminal.
- */
- readonly textarea: HTMLTextAreaElement | undefined;
- /**
- * The number of rows in the terminal's viewport. Use
- * `ITerminalOptions.rows` to set this in the constructor and
- * `Terminal.resize` for when the terminal exists.
- */
- readonly rows: number;
- /**
- * The number of columns in the terminal's viewport. Use
- * `ITerminalOptions.cols` to set this in the constructor and
- * `Terminal.resize` for when the terminal exists.
- */
- readonly cols: number;
- /**
- * Access to the terminal's normal and alt buffer.
- */
- readonly buffer: IBufferNamespace;
- /**
- * (EXPERIMENTAL) Get all markers registered against the buffer. If the alt
- * buffer is active this will always return [].
- */
- readonly markers: ReadonlyArray<IMarker>;
- /**
- * Get the parser interface to register custom escape sequence handlers.
- */
- readonly parser: IParser;
- /**
- * (EXPERIMENTAL) Get the Unicode handling interface
- * to register and switch Unicode version.
- */
- readonly unicode: IUnicodeHandling;
- /**
- * Gets the terminal modes as set by SM/DECSET.
- */
- readonly modes: IModes;
- /**
- * Gets or sets the terminal options. This supports setting multiple
- * options.
- *
- * @example Get a single option
- * ```ts
- * console.log(terminal.options.fontSize);
- * ```
- *
- * @example Set a single option:
- * ```ts
- * terminal.options.fontSize = 12;
- * ```
- * Note that for options that are object, a new object must be used in order
- * to take effect as a reference comparison will be done:
- * ```ts
- * const newValue = terminal.options.theme;
- * newValue.background = '#000000';
- *
- * // This won't work
- * terminal.options.theme = newValue;
- *
- * // This will work
- * terminal.options.theme = { ...newValue };
- * ```
- *
- * @example Set multiple options
- * ```ts
- * terminal.options = {
- * fontSize: 12,
- * fontFamily: 'Courier New'
- * };
- * ```
- */
- options: ITerminalOptions;
- /**
- * Natural language strings that can be localized.
- */
- static strings: ILocalizableStrings;
- /**
- * Creates a new `Terminal` object.
- *
- * @param options An object containing a set of options.
- */
- constructor(options?: ITerminalOptions & ITerminalInitOnlyOptions);
- /**
- * Adds an event listener for when the bell is triggered.
- * @returns an `IDisposable` to stop listening.
- */
- onBell: IEvent<void>;
- /**
- * Adds an event listener for when a binary event fires. This is used to
- * enable non UTF-8 conformant binary messages to be sent to the backend.
- * Currently this is only used for a certain type of mouse reports that
- * happen to be not UTF-8 compatible.
- * The event value is a JS string, pass it to the underlying pty as
- * binary data, e.g. `pty.write(Buffer.from(data, 'binary'))`.
- * @returns an `IDisposable` to stop listening.
- */
- onBinary: IEvent<string>;
- /**
- * Adds an event listener for the cursor moves.
- * @returns an `IDisposable` to stop listening.
- */
- onCursorMove: IEvent<void>;
- /**
- * Adds an event listener for when a data event fires. This happens for
- * example when the user types or pastes into the terminal. The event value
- * is whatever `string` results, in a typical setup, this should be passed
- * on to the backing pty.
- * @returns an `IDisposable` to stop listening.
- */
- onData: IEvent<string>;
- /**
- * Adds an event listener for when a key is pressed. The event value
- * contains the string that will be sent in the data event as well as the
- * DOM event that triggered it.
- * @returns an `IDisposable` to stop listening.
- */
- onKey: IEvent<{ key: string, domEvent: KeyboardEvent }>;
- /**
- * Adds an event listener for when a line feed is added.
- * @returns an `IDisposable` to stop listening.
- */
- onLineFeed: IEvent<void>;
- /**
- * Adds an event listener for when rows are rendered. The event value
- * contains the start row and end rows of the rendered area (ranges from `0`
- * to `Terminal.rows - 1`).
- * @returns an `IDisposable` to stop listening.
- */
- onRender: IEvent<{ start: number, end: number }>;
- /**
- * Adds an event listener for when data has been parsed by the terminal,
- * after {@link write} is called. This event is useful to listen for any
- * changes in the buffer.
- *
- * This fires at most once per frame, after data parsing completes. Note
- * that this can fire when there are still writes pending if there is a lot
- * of data.
- */
- onWriteParsed: IEvent<void>;
- /**
- * Adds an event listener for when the terminal is resized. The event value
- * contains the new size.
- * @returns an `IDisposable` to stop listening.
- */
- onResize: IEvent<{ cols: number, rows: number }>;
- /**
- * Adds an event listener for when a scroll occurs. The event value is the
- * new position of the viewport.
- * @returns an `IDisposable` to stop listening.
- */
- onScroll: IEvent<number>;
- /**
- * Adds an event listener for when a selection change occurs.
- * @returns an `IDisposable` to stop listening.
- */
- onSelectionChange: IEvent<void>;
- /**
- * Adds an event listener for when an OSC 0 or OSC 2 title change occurs.
- * The event value is the new title.
- * @returns an `IDisposable` to stop listening.
- */
- onTitleChange: IEvent<string>;
- /**
- * Unfocus the terminal.
- */
- blur(): void;
- /**
- * Focus the terminal.
- */
- focus(): void;
- /**
- * Input data to application side. The data is treated the same way input
- * typed into the terminal would (ie. the {@link onData} event will fire).
- * @param data The data to forward to the application.
- * @param wasUserInput Whether the input is genuine user input. This is true
- * by default and triggers additionalbehavior like focus or selection
- * clearing. Set this to false if the data sent should not be treated like
- * user input would, for example passing an escape sequence to the
- * application.
- */
- input(data: string, wasUserInput?: boolean): void;
- /**
- * Resizes the terminal. It's best practice to debounce calls to resize,
- * this will help ensure that the pty can respond to the resize event
- * before another one occurs.
- * @param x The number of columns to resize to.
- * @param y The number of rows to resize to.
- */
- resize(columns: number, rows: number): void;
- /**
- * Opens the terminal within an element. This should also be called if the
- * xterm.js element ever changes browser window.
- * @param parent The element to create the terminal within. This element
- * must be visible (have dimensions) when `open` is called as several DOM-
- * based measurements need to be performed when this function is called.
- */
- open(parent: HTMLElement): void;
- /**
- * Attaches a custom key event handler which is run before keys are
- * processed, giving consumers of xterm.js ultimate control as to what keys
- * should be processed by the terminal and what keys should not.
- * @param customKeyEventHandler The custom KeyboardEvent handler to attach.
- * This is a function that takes a KeyboardEvent, allowing consumers to stop
- * propagation and/or prevent the default action. The function returns
- * whether the event should be processed by xterm.js.
- *
- * @example A custom keymap that overrides the backspace key
- * ```ts
- * const keymap = [
- * { "key": "Backspace", "shiftKey": false, "mapCode": 8 },
- * { "key": "Backspace", "shiftKey": true, "mapCode": 127 }
- * ];
- * term.attachCustomKeyEventHandler(ev => {
- * if (ev.type === 'keydown') {
- * for (let i in keymap) {
- * if (keymap[i].key == ev.key && keymap[i].shiftKey == ev.shiftKey) {
- * socket.send(String.fromCharCode(keymap[i].mapCode));
- * return false;
- * }
- * }
- * }
- * });
- * ```
- */
- attachCustomKeyEventHandler(customKeyEventHandler: (event: KeyboardEvent) => boolean): void;
- /**
- * Attaches a custom wheel event handler which is run before keys are
- * processed, giving consumers of xterm.js control over whether to proceed
- * or cancel terminal wheel events.
- * @param customWheelEventHandler The custom WheelEvent handler to attach.
- * This is a function that takes a WheelEvent, allowing consumers to stop
- * propagation and/or prevent the default action. The function returns
- * whether the event should be processed by xterm.js.
- *
- * @example A handler that prevents all wheel events while ctrl is held from
- * being processed.
- * ```ts
- * term.attachCustomWheelEventHandler(ev => {
- * if (ev.ctrlKey) {
- * return false;
- * }
- * return true;
- * });
- * ```
- */
- attachCustomWheelEventHandler(customWheelEventHandler: (event: WheelEvent) => boolean): void;
- /**
- * Registers a link provider, allowing a custom parser to be used to match
- * and handle links. Multiple link providers can be used, they will be asked
- * in the order in which they are registered.
- * @param linkProvider The link provider to use to detect links.
- */
- registerLinkProvider(linkProvider: ILinkProvider): IDisposable;
- /**
- * (EXPERIMENTAL) Registers a character joiner, allowing custom sequences of
- * characters to be rendered as a single unit. This is useful in particular
- * for rendering ligatures and graphemes, among other things.
- *
- * Each registered character joiner is called with a string of text
- * representing a portion of a line in the terminal that can be rendered as
- * a single unit. The joiner must return a sorted array, where each entry is
- * itself an array of length two, containing the start (inclusive) and end
- * (exclusive) index of a substring of the input that should be rendered as
- * a single unit. When multiple joiners are provided, the results of each
- * are collected. If there are any overlapping substrings between them, they
- * are combined into one larger unit that is drawn together.
- *
- * All character joiners that are registered get called every time a line is
- * rendered in the terminal, so it is essential for the handler function to
- * run as quickly as possible to avoid slowdowns when rendering. Similarly,
- * joiners should strive to return the smallest possible substrings to
- * render together, since they aren't drawn as optimally as individual
- * characters.
- *
- * NOTE: character joiners are only used by the canvas renderer.
- *
- * @param handler The function that determines character joins. It is called
- * with a string of text that is eligible for joining and returns an array
- * where each entry is an array containing the start (inclusive) and end
- * (exclusive) indexes of ranges that should be rendered as a single unit.
- * @returns The ID of the new joiner, this can be used to deregister
- */
- registerCharacterJoiner(handler: (text: string) => [number, number][]): number;
- /**
- * (EXPERIMENTAL) Deregisters the character joiner if one was registered.
- * NOTE: character joiners are only used by the canvas renderer.
- * @param joinerId The character joiner's ID (returned after register)
- */
- deregisterCharacterJoiner(joinerId: number): void;
- /**
- * Adds a marker to the normal buffer and returns it.
- * @param cursorYOffset The y position offset of the marker from the cursor.
- * @returns The new marker or undefined.
- */
- registerMarker(cursorYOffset?: number): IMarker;
- /**
- * (EXPERIMENTAL) Adds a decoration to the terminal using
- * @param decorationOptions, which takes a marker and an optional anchor,
- * width, height, and x offset from the anchor. Returns the decoration or
- * undefined if the alt buffer is active or the marker has already been
- * disposed of.
- * @throws when options include a negative x offset.
- */
- registerDecoration(decorationOptions: IDecorationOptions): IDecoration | undefined;
- /**
- * Gets whether the terminal has an active selection.
- */
- hasSelection(): boolean;
- /**
- * Gets the terminal's current selection, this is useful for implementing
- * copy behavior outside of xterm.js.
- */
- getSelection(): string;
- /**
- * Gets the selection position or undefined if there is no selection.
- */
- getSelectionPosition(): IBufferRange | undefined;
- /**
- * Clears the current terminal selection.
- */
- clearSelection(): void;
- /**
- * Selects text within the terminal.
- * @param column The column the selection starts at.
- * @param row The row the selection starts at.
- * @param length The length of the selection.
- */
- select(column: number, row: number, length: number): void;
- /**
- * Selects all text within the terminal.
- */
- selectAll(): void;
- /**
- * Selects text in the buffer between 2 lines.
- * @param start The 0-based line index to select from (inclusive).
- * @param end The 0-based line index to select to (inclusive).
- */
- selectLines(start: number, end: number): void;
- /*
- * Disposes of the terminal, detaching it from the DOM and removing any
- * active listeners. Once the terminal is disposed it should not be used
- * again.
- */
- dispose(): void;
- /**
- * Scroll the display of the terminal
- * @param amount The number of lines to scroll down (negative scroll up).
- */
- scrollLines(amount: number): void;
- /**
- * Scroll the display of the terminal by a number of pages.
- * @param pageCount The number of pages to scroll (negative scrolls up).
- */
- scrollPages(pageCount: number): void;
- /**
- * Scrolls the display of the terminal to the top.
- */
- scrollToTop(): void;
- /**
- * Scrolls the display of the terminal to the bottom.
- */
- scrollToBottom(): void;
- /**
- * Scrolls to a line within the buffer.
- * @param line The 0-based line index to scroll to.
- */
- scrollToLine(line: number): void;
- /**
- * Clear the entire buffer, making the prompt line the new first line.
- */
- clear(): void;
- /**
- * Write data to the terminal.
- * @param data The data to write to the terminal. This can either be raw
- * bytes given as Uint8Array from the pty or a string. Raw bytes will always
- * be treated as UTF-8 encoded, string data as UTF-16.
- * @param callback Optional callback that fires when the data was processed
- * by the parser.
- */
- write(data: string | Uint8Array, callback?: () => void): void;
- /**
- * Writes data to the terminal, followed by a break line character (\n).
- * @param data The data to write to the terminal. This can either be raw
- * bytes given as Uint8Array from the pty or a string. Raw bytes will always
- * be treated as UTF-8 encoded, string data as UTF-16.
- * @param callback Optional callback that fires when the data was processed
- * by the parser.
- */
- writeln(data: string | Uint8Array, callback?: () => void): void;
- /**
- * Writes text to the terminal, performing the necessary transformations for
- * pasted text.
- * @param data The text to write to the terminal.
- */
- paste(data: string): void;
- /**
- * Tells the renderer to refresh terminal content between two rows
- * (inclusive) at the next opportunity.
- * @param start The row to start from (between 0 and this.rows - 1).
- * @param end The row to end at (between start and this.rows - 1).
- */
- refresh(start: number, end: number): void;
- /**
- * Clears the texture atlas of the canvas renderer if it's active. Doing
- * this will force a redraw of all glyphs which can workaround issues
- * causing the texture to become corrupt, for example Chromium/Nvidia has an
- * issue where the texture gets messed up when resuming the OS from sleep.
- */
- clearTextureAtlas(): void;
- /**
- * Perform a full reset (RIS, aka '\x1bc').
- */
- reset(): void;
- /**
- * Loads an addon into this instance of xterm.js.
- * @param addon The addon to load.
- */
- loadAddon(addon: ITerminalAddon): void;
- }
- /**
- * An addon that can provide additional functionality to the terminal.
- */
- export interface ITerminalAddon extends IDisposable {
- /**
- * This is called when the addon is activated.
- */
- activate(terminal: Terminal): void;
- }
- /**
- * An object representing a range within the viewport of the terminal.
- */
- export interface IViewportRange {
- /**
- * The start of the range.
- */
- start: IViewportRangePosition;
- /**
- * The end of the range.
- */
- end: IViewportRangePosition;
- }
- /**
- * An object representing a cell position within the viewport of the terminal.
- */
- interface IViewportRangePosition {
- /**
- * The x position of the cell. This is a 0-based index that refers to the
- * space in between columns, not the column itself. Index 0 refers to the
- * left side of the viewport, index `Terminal.cols` refers to the right side
- * of the viewport. This can be thought of as how a cursor is positioned in
- * a text editor.
- */
- x: number;
- /**
- * The y position of the cell. This is a 0-based index that refers to a
- * specific row.
- */
- y: number;
- }
- /**
- * A link handler for OSC 8 hyperlinks.
- */
- interface ILinkHandler {
- /**
- * Calls when the link is activated.
- * @param event The mouse event triggering the callback.
- * @param text The text of the link.
- * @param range The buffer range of the link.
- */
- activate(event: MouseEvent, text: string, range: IBufferRange): void;
- /**
- * Called when the mouse hovers the link. To use this to create a DOM-based
- * hover tooltip, create the hover element within `Terminal.element` and
- * add the `xterm-hover` class to it, that will cause mouse events to not
- * fall through and activate other links.
- * @param event The mouse event triggering the callback.
- * @param text The text of the link.
- * @param range The buffer range of the link.
- */
- hover?(event: MouseEvent, text: string, range: IBufferRange): void;
- /**
- * Called when the mouse leaves the link.
- * @param event The mouse event triggering the callback.
- * @param text The text of the link.
- * @param range The buffer range of the link.
- */
- leave?(event: MouseEvent, text: string, range: IBufferRange): void;
- /**
- * Whether to receive non-HTTP URLs from LinkProvider. When false, any
- * usage of non-HTTP URLs will be ignored. Enabling this option without
- * proper protection in `activate` function may cause security issues such
- * as XSS.
- */
- allowNonHttpProtocols?: boolean;
- }
- /**
- * A custom link provider.
- */
- interface ILinkProvider {
- /**
- * Provides a link a buffer position
- * @param bufferLineNumber The y position of the buffer to check for links
- * within.
- * @param callback The callback to be fired when ready with the resulting
- * link(s) for the line or `undefined`.
- */
- provideLinks(bufferLineNumber: number, callback: (links: ILink[] | undefined) => void): void;
- }
- /**
- * A link within the terminal.
- */
- interface ILink {
- /**
- * The buffer range of the link.
- */
- range: IBufferRange;
- /**
- * The text of the link.
- */
- text: string;
- /**
- * What link decorations to show when hovering the link, this property is
- * tracked and changes made after the link is provided will trigger changes.
- * If not set, all decroations will be enabled.
- */
- decorations?: ILinkDecorations;
- /**
- * Calls when the link is activated.
- * @param event The mouse event triggering the callback.
- * @param text The text of the link.
- */
- activate(event: MouseEvent, text: string): void;
- /**
- * Called when the mouse hovers the link. To use this to create a DOM-based
- * hover tooltip, create the hover element within `Terminal.element` and add
- * the `xterm-hover` class to it, that will cause mouse events to not fall
- * through and activate other links.
- * @param event The mouse event triggering the callback.
- * @param text The text of the link.
- */
- hover?(event: MouseEvent, text: string): void;
- /**
- * Called when the mouse leaves the link.
- * @param event The mouse event triggering the callback.
- * @param text The text of the link.
- */
- leave?(event: MouseEvent, text: string): void;
- /**
- * Called when the link is released and no longer used by xterm.js.
- */
- dispose?(): void;
- }
- /**
- * A set of decorations that can be applied to links.
- */
- interface ILinkDecorations {
- /**
- * Whether the cursor is set to pointer.
- */
- pointerCursor: boolean;
- /**
- * Whether the underline is visible
- */
- underline: boolean;
- }
- /**
- * A range within a buffer.
- */
- interface IBufferRange {
- /**
- * The start position of the range.
- */
- start: IBufferCellPosition;
- /**
- * The end position of the range.
- */
- end: IBufferCellPosition;
- }
- /**
- * A position within a buffer.
- */
- interface IBufferCellPosition {
- /**
- * The x position within the buffer (1-based).
- */
- x: number;
- /**
- * The y position within the buffer (1-based).
- */
- y: number;
- }
- /**
- * Represents a terminal buffer.
- */
- interface IBuffer {
- /**
- * The type of the buffer.
- */
- readonly type: 'normal' | 'alternate';
- /**
- * The y position of the cursor. This ranges between `0` (when the
- * cursor is at baseY) and `Terminal.rows - 1` (when the cursor is on the
- * last row).
- */
- readonly cursorY: number;
- /**
- * The x position of the cursor. This ranges between `0` (left side) and
- * `Terminal.cols` (after last cell of the row).
- */
- readonly cursorX: number;
- /**
- * The line within the buffer where the top of the viewport is.
- */
- readonly viewportY: number;
- /**
- * The line within the buffer where the top of the bottom page is (when
- * fully scrolled down).
- */
- readonly baseY: number;
- /**
- * The amount of lines in the buffer.
- */
- readonly length: number;
- /**
- * Gets a line from the buffer, or undefined if the line index does not
- * exist.
- *
- * Note that the result of this function should be used immediately after
- * calling as when the terminal updates it could lead to unexpected
- * behavior.
- *
- * @param y The line index to get.
- */
- getLine(y: number): IBufferLine | undefined;
- /**
- * Creates an empty cell object suitable as a cell reference in
- * `line.getCell(x, cell)`. Use this to avoid costly recreation of
- * cell objects when dealing with tons of cells.
- */
- getNullCell(): IBufferCell;
- }
- export interface IBufferElementProvider {
- /**
- * Provides a document fragment or HTMLElement containing the buffer
- * elements.
- */
- provideBufferElements(): DocumentFragment | HTMLElement;
- }
- /**
- * Represents the terminal's set of buffers.
- */
- interface IBufferNamespace {
- /**
- * The active buffer, this will either be the normal or alternate buffers.
- */
- readonly active: IBuffer;
- /**
- * The normal buffer.
- */
- readonly normal: IBuffer;
- /**
- * The alternate buffer, this becomes the active buffer when an application
- * enters this mode via DECSET (`CSI ? 4 7 h`)
- */
- readonly alternate: IBuffer;
- /**
- * Adds an event listener for when the active buffer changes.
- * @returns an `IDisposable` to stop listening.
- */
- onBufferChange: IEvent<IBuffer>;
- }
- /**
- * Represents a line in the terminal's buffer.
- */
- interface IBufferLine {
- /**
- * Whether the line is wrapped from the previous line.
- */
- readonly isWrapped: boolean;
- /**
- * The length of the line, all call to getCell beyond the length will result
- * in `undefined`. Note that this may exceed columns as the line array may
- * not be trimmed after a resize, compare against {@link Terminal.cols} to
- * get the actual maximum length of a line.
- */
- readonly length: number;
- /**
- * Gets a cell from the line, or undefined if the line index does not exist.
- *
- * Note that the result of this function should be used immediately after
- * calling as when the terminal updates it could lead to unexpected
- * behavior.
- *
- * @param x The character index to get.
- * @param cell Optional cell object to load data into for performance
- * reasons. This is mainly useful when every cell in the buffer is being
- * looped over to avoid creating new objects for every cell.
- */
- getCell(x: number, cell?: IBufferCell): IBufferCell | undefined;
- /**
- * Gets the line as a string. Note that this is gets only the string for the
- * line, not taking isWrapped into account.
- *
- * @param trimRight Whether to trim any whitespace at the right of the line.
- * @param startColumn The column to start from (inclusive).
- * @param endColumn The column to end at (exclusive).
- */
- translateToString(trimRight?: boolean, startColumn?: number, endColumn?: number): string;
- }
- /**
- * Represents a single cell in the terminal's buffer.
- */
- interface IBufferCell {
- /**
- * The width of the character. Some examples:
- *
- * - `1` for most cells.
- * - `2` for wide character like CJK glyphs.
- * - `0` for cells immediately following cells with a width of `2`.
- */
- getWidth(): number;
- /**
- * The character(s) within the cell. Examples of what this can contain:
- *
- * - A normal width character
- * - A wide character (eg. CJK)
- * - An emoji
- */
- getChars(): string;
- /**
- * Gets the UTF32 codepoint of single characters, if content is a combined
- * string it returns the codepoint of the last character in the string.
- */
- getCode(): number;
- /**
- * Gets the number representation of the foreground color mode, this can be
- * used to perform quick comparisons of 2 cells to see if they're the same.
- * Use `isFgRGB`, `isFgPalette` and `isFgDefault` to check what color mode
- * a cell is.
- */
- getFgColorMode(): number;
- /**
- * Gets the number representation of the background color mode, this can be
- * used to perform quick comparisons of 2 cells to see if they're the same.
- * Use `isBgRGB`, `isBgPalette` and `isBgDefault` to check what color mode
- * a cell is.
- */
- getBgColorMode(): number;
- /**
- * Gets a cell's foreground color number, this differs depending on what the
- * color mode of the cell is:
- *
- * - Default: This should be 0, representing the default foreground color
- * (CSI 39 m).
- * - Palette: This is a number from 0 to 255 of ANSI colors (CSI 3(0-7) m,
- * CSI 9(0-7) m, CSI 38 ; 5 ; 0-255 m).
- * - RGB: A hex value representing a 'true color': 0xRRGGBB.
- * (CSI 3 8 ; 2 ; Pi ; Pr ; Pg ; Pb)
- */
- getFgColor(): number;
- /**
- * Gets a cell's background color number, this differs depending on what the
- * color mode of the cell is:
- *
- * - Default: This should be 0, representing the default background color
- * (CSI 49 m).
- * - Palette: This is a number from 0 to 255 of ANSI colors
- * (CSI 4(0-7) m, CSI 10(0-7) m, CSI 48 ; 5 ; 0-255 m).
- * - RGB: A hex value representing a 'true color': 0xRRGGBB
- * (CSI 4 8 ; 2 ; Pi ; Pr ; Pg ; Pb)
- */
- getBgColor(): number;
- /** Whether the cell has the bold attribute (CSI 1 m). */
- isBold(): number;
- /** Whether the cell has the italic attribute (CSI 3 m). */
- isItalic(): number;
- /** Whether the cell has the dim attribute (CSI 2 m). */
- isDim(): number;
- /** Whether the cell has the underline attribute (CSI 4 m). */
- isUnderline(): number;
- /** Whether the cell has the blink attribute (CSI 5 m). */
- isBlink(): number;
- /** Whether the cell has the inverse attribute (CSI 7 m). */
- isInverse(): number;
- /** Whether the cell has the invisible attribute (CSI 8 m). */
- isInvisible(): number;
- /** Whether the cell has the strikethrough attribute (CSI 9 m). */
- isStrikethrough(): number;
- /** Whether the cell has the overline attribute (CSI 53 m). */
- isOverline(): number;
- /** Whether the cell is using the RGB foreground color mode. */
- isFgRGB(): boolean;
- /** Whether the cell is using the RGB background color mode. */
- isBgRGB(): boolean;
- /** Whether the cell is using the palette foreground color mode. */
- isFgPalette(): boolean;
- /** Whether the cell is using the palette background color mode. */
- isBgPalette(): boolean;
- /** Whether the cell is using the default foreground color mode. */
- isFgDefault(): boolean;
- /** Whether the cell is using the default background color mode. */
- isBgDefault(): boolean;
- /** Whether the cell has the default attribute (no color or style). */
- isAttributeDefault(): boolean;
- }
- /**
- * Data type to register a CSI, DCS or ESC callback in the parser
- * in the form:
- * ESC I..I F
- * CSI Prefix P..P I..I F
- * DCS Prefix P..P I..I F data_bytes ST
- *
- * with these rules/restrictions:
- * - prefix can only be used with CSI and DCS
- * - only one leading prefix byte is recognized by the parser
- * before any other parameter bytes (P..P)
- * - intermediate bytes are recognized up to 2
- *
- * For custom sequences make sure to read ECMA-48 and the resources at
- * vt100.net to not clash with existing sequences or reserved address space.
- * General recommendations:
- * - use private address space (see ECMA-48)
- * - use max one intermediate byte (technically not limited by the spec,
- * in practice there are no sequences with more than one intermediate byte,
- * thus parsers might get confused with more intermediates)
- * - test against other common emulators to check whether they escape/ignore
- * the sequence correctly
- *
- * Notes: OSC command registration is handled differently (see addOscHandler)
- * APC, PM or SOS is currently not supported.
- */
- export interface IFunctionIdentifier {
- /**
- * Optional prefix byte, must be in range \x3c .. \x3f.
- * Usable in CSI and DCS.
- */
- prefix?: string;
- /**
- * Optional intermediate bytes, must be in range \x20 .. \x2f.
- * Usable in CSI, DCS and ESC.
- */
- intermediates?: string;
- /**
- * Final byte, must be in range \x40 .. \x7e for CSI and DCS,
- * \x30 .. \x7e for ESC.
- */
- final: string;
- }
- /**
- * Allows hooking into the parser for custom handling of escape sequences.
- *
- * Note on sync vs. async handlers:
- * xterm.js implements all parser actions with synchronous handlers.
- * In general custom handlers should also operate in sync mode wherever
- * possible to keep the parser fast.
- * Still the exposed interfaces allow to register async handlers by returning
- * a `Promise<boolean>`. Here the parser will pause input processing until
- * the promise got resolved or rejected (in-band blocking). This "full stop"
- * on the input chain allows to implement backpressure from a certain async
- * action while the terminal state will not progress any further from input.
- * It does not mean that the terminal state will not change at all in between,
- * as user actions like resize or reset are still processed immediately.
- * It is an error to assume a stable terminal state while giving back control
- * in between, e.g. by multiple chained `then` calls.
- * Downside of an async handler is a rather bad throughput performance,
- * thus use async handlers only as a last resort or for actions that have
- * to rely on async interfaces itself.
- */
- export interface IParser {
- /**
- * Adds a handler for CSI escape sequences.
- * @param id Specifies the function identifier under which the callback gets
- * registered, e.g. {final: 'm'} for SGR.
- * @param callback The function to handle the sequence. The callback is
- * called with the numerical params. If the sequence has subparams the array
- * will contain subarrays with their numercial values. Return `true` if the
- * sequence was handled, `false` if the parser should try a previous
- * handler. The most recently added handler is tried first.
- * @returns An IDisposable you can call to remove this handler.
- */
- registerCsiHandler(id: IFunctionIdentifier, callback: (params: (number | number[])[]) => boolean | Promise<boolean>): IDisposable;
- /**
- * Adds a handler for DCS escape sequences.
- * @param id Specifies the function identifier under which the callback gets
- * registered, e.g. {intermediates: '$' final: 'q'} for DECRQSS.
- * @param callback The function to handle the sequence. Note that the
- * function will only be called once if the sequence finished sucessfully.
- * There is currently no way to intercept smaller data chunks, data chunks
- * will be stored up until the sequence is finished. Since DCS sequences are
- * not limited by the amount of data this might impose a problem for big
- * payloads. Currently xterm.js limits DCS payload to 10 MB which should
- * give enough room for most use cases. The function gets the payload and
- * numerical parameters as arguments. Return `true` if the sequence was
- * handled, `false` if the parser should try a previous handler. The most
- * recently added handler is tried first.
- * @returns An IDisposable you can call to remove this handler.
- */
- registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: (number | number[])[]) => boolean | Promise<boolean>): IDisposable;
- /**
- * Adds a handler for ESC escape sequences.
- * @param id Specifies the function identifier under which the callback gets
- * registered, e.g. {intermediates: '%' final: 'G'} for default charset
- * selection.
- * @param callback The function to handle the sequence.
- * Return `true` if the sequence was handled, `false` if the parser should
- * try a previous handler. The most recently added handler is tried first.
- * @returns An IDisposable you can call to remove this handler.
- */
- registerEscHandler(id: IFunctionIdentifier, handler: () => boolean | Promise<boolean>): IDisposable;
- /**
- * Adds a handler for OSC escape sequences.
- * @param ident The number (first parameter) of the sequence.
- * @param callback The function to handle the sequence. Note that the
- * function will only be called once if the sequence finished sucessfully.
- * There is currently no way to intercept smaller data chunks, data chunks
- * will be stored up until the sequence is finished. Since OSC sequences are
- * not limited by the amount of data this might impose a problem for big
- * payloads. Currently xterm.js limits OSC payload to 10 MB which should
- * give enough room for most use cases. The callback is called with OSC data
- * string. Return `true` if the sequence was handled, `false` if the parser
- * should try a previous handler. The most recently added handler is tried
- * first.
- * @returns An IDisposable you can call to remove this handler.
- */
- registerOscHandler(ident: number, callback: (data: string) => boolean | Promise<boolean>): IDisposable;
- }
- /**
- * (EXPERIMENTAL) Unicode version provider.
- * Used to register custom Unicode versions with `Terminal.unicode.register`.
- */
- export interface IUnicodeVersionProvider {
- /**
- * String indicating the Unicode version provided.
- */
- readonly version: string;
- /**
- * Unicode version dependent wcwidth implementation.
- */
- wcwidth(codepoint: number): 0 | 1 | 2;
- charProperties(codepoint: number, preceding: number): number;
- }
- /**
- * (EXPERIMENTAL) Unicode handling interface.
- */
- export interface IUnicodeHandling {
- /**
- * Register a custom Unicode version provider.
- */
- register(provider: IUnicodeVersionProvider): void;
- /**
- * Registered Unicode versions.
- */
- readonly versions: ReadonlyArray<string>;
- /**
- * Getter/setter for active Unicode version.
- */
- activeVersion: string;
- }
- /**
- * Terminal modes as set by SM/DECSET.
- */
- export interface IModes {
- /**
- * Application Cursor Keys (DECCKM): `CSI ? 1 h`
- */
- readonly applicationCursorKeysMode: boolean;
- /**
- * Application Keypad Mode (DECNKM): `CSI ? 6 6 h`
- */
- readonly applicationKeypadMode: boolean;
- /**
- * Bracketed Paste Mode: `CSI ? 2 0 0 4 h`
- */
- readonly bracketedPasteMode: boolean;
- /**
- * Insert Mode (IRM): `CSI 4 h`
- */
- readonly insertMode: boolean;
- /**
- * Mouse Tracking, this can be one of the following:
- * - none: This is the default value and can be reset with DECRST
- * - x10: Send Mouse X & Y on button press `CSI ? 9 h`
- * - vt200: Send Mouse X & Y on button press and release `CSI ? 1 0 0 0 h`
- * - drag: Use Cell Motion Mouse Tracking `CSI ? 1 0 0 2 h`
- * - any: Use All Motion Mouse Tracking `CSI ? 1 0 0 3 h`
- */
- readonly mouseTrackingMode: 'none' | 'x10' | 'vt200' | 'drag' | 'any';
- /**
- * Origin Mode (DECOM): `CSI ? 6 h`
- */
- readonly originMode: boolean;
- /**
- * Reverse-wraparound Mode: `CSI ? 4 5 h`
- */
- readonly reverseWraparoundMode: boolean;
- /**
- * Send FocusIn/FocusOut events: `CSI ? 1 0 0 4 h`
- */
- readonly sendFocusMode: boolean;
- /**
- * Auto-Wrap Mode (DECAWM): `CSI ? 7 h`
- */
- readonly wraparoundMode: boolean;
- }
- }
|