xterm_js_rs/
xterm.rs

1use js_sys::{Function, RegExp};
2use wasm_bindgen::prelude::*;
3use web_sys::{HtmlElement, HtmlTextAreaElement, KeyboardEvent, MouseEvent};
4use crate::keys::*;
5
6#[wasm_bindgen(module = "xterm")]
7extern "C" {
8
9    #[wasm_bindgen(js_name = "ITerminalOptions")]
10    pub type TerminalOptions;
11
12    #[wasm_bindgen(method, setter, js_name = "allowTransparency")]
13    pub fn set_allow_transparency(this: &TerminalOptions, val: bool);
14
15    #[wasm_bindgen(method, setter, js_name = "bellSound")]
16    pub fn set_bell_sound(this: &TerminalOptions, val: &str);
17
18    #[wasm_bindgen(method, setter, js_name = "bellStyle")]
19    pub fn set_bell_style(this: &TerminalOptions, val: BellStyle);
20
21    #[wasm_bindgen(method, setter, js_name = "convertEol")]
22    pub fn set_convert_eol(this: &TerminalOptions, val: bool);
23
24    #[wasm_bindgen(method, setter, js_name = "cols")]
25    pub fn set_cols(this: &TerminalOptions, val: u32);
26
27    #[wasm_bindgen(method, setter, js_name = "cursorBlink")]
28    pub fn set_cursor_blink(this: &TerminalOptions, val: bool);
29
30    #[wasm_bindgen(method, setter, js_name = "cursorStyle")]
31    pub fn set_cursor_style(this: &TerminalOptions, val: CursorStyle);
32
33    #[wasm_bindgen(method, setter, js_name = "cursorWidth")]
34    pub fn set_cursor_width(this: &TerminalOptions, val: u32);
35
36    #[wasm_bindgen(method, setter, js_name = "disableStdin")]
37    pub fn set_disable_stdin(this: &TerminalOptions, val: bool);
38
39    #[wasm_bindgen(method, setter, js_name = "drawBoldTextInBrightColors")]
40    pub fn set_draw_bold_text_in_bright_colors(this: &TerminalOptions, val: bool);
41
42    #[wasm_bindgen(method, setter, js_name = "fastScrollModifier")]
43    pub fn set_fast_scroll_modifier(this: &TerminalOptions, val: FastScrollModifier);
44
45    #[wasm_bindgen(method, setter, js_name = "fastScrollSensitivity")]
46    pub fn set_fast_scroll_sensitivity(this: &TerminalOptions, val: u32);
47
48    #[wasm_bindgen(method, setter, js_name = "fontSize")]
49    pub fn set_font_size(this: &TerminalOptions, val: u32);
50
51    #[wasm_bindgen(method, setter, js_name = "fontFamily")]
52    pub fn set_font_family(this: &TerminalOptions, val: &str);
53
54    #[wasm_bindgen(method, setter, js_name = "fontWeight")]
55    pub fn set_font_weight(this: &TerminalOptions, val: FontWeight);
56
57    #[wasm_bindgen(method, setter, js_name = "fontWeightBold")]
58    pub fn set_font_weight_bold(this: &TerminalOptions, val: FontWeight);
59
60    #[wasm_bindgen(method, setter, js_name = "letterSpacing")]
61    pub fn set_letter_spacing(this: &TerminalOptions, val: u32);
62
63    #[wasm_bindgen(method, setter, js_name = "lineHeight")]
64    pub fn set_line_height(this: &TerminalOptions, val: u32);
65
66    #[wasm_bindgen(method, setter, js_name = "linkTooltipHoverDuration")]
67    pub fn set_link_tooltip_hover_duration(this: &TerminalOptions, val: u32);
68
69    #[wasm_bindgen(method, setter, js_name = "logLevel")]
70    pub fn set_log_level(this: &TerminalOptions, val: LogLevel);
71
72    #[wasm_bindgen(method, setter, js_name = "macOptionIsMeta")]
73    pub fn set_mac_option_is_meta(this: &TerminalOptions, val: bool);
74
75    #[wasm_bindgen(method, setter, js_name = "macOptionClickForcesSelection")]
76    pub fn set_mac_option_click_forces_selection(this: &TerminalOptions, val: bool);
77
78    #[wasm_bindgen(method, setter, js_name = "minimumContrastRatio")]
79    pub fn set_minimum_contrast_ratio(this: &TerminalOptions, val: u32);
80
81    #[wasm_bindgen(method, setter, js_name = "rendererType")]
82    pub fn set_renderer_type(this: &TerminalOptions, val: RendererType);
83
84    #[wasm_bindgen(method, setter, js_name = "rightClickSelectsWord")]
85    pub fn set_right_click_selects_word(this: &TerminalOptions, val: bool);
86
87    #[wasm_bindgen(method, setter, js_name = "rows")]
88    pub fn set_rows(this: &TerminalOptions, val: u32);
89
90    #[wasm_bindgen(method, setter, js_name = "screenReaderMode")]
91    pub fn set_screen_reader_mode(this: &TerminalOptions, val: bool);
92
93    #[wasm_bindgen(method, setter, js_name = "scrollback")]
94    pub fn set_scrollback(this: &TerminalOptions, val: u32);
95
96    #[wasm_bindgen(method, setter, js_name = "scrollSensitivity")]
97    pub fn set_scroll_sensitivity(this: &TerminalOptions, val: u32);
98
99    #[wasm_bindgen(method, setter, js_name = "tabStopWidth")]
100    pub fn set_tab_stop_width(this: &TerminalOptions, val: u32);
101
102    #[wasm_bindgen(method, setter, js_name = "theme")]
103    pub fn set_theme(this: &TerminalOptions, val: &Theme);
104
105    #[wasm_bindgen(method, setter, js_name = "windowsMode")]
106    pub fn set_windows_mode(this: &TerminalOptions, val: bool);
107
108    #[wasm_bindgen(method, setter, js_name = "wordSeparator")]
109    pub fn set_word_separator(this: &TerminalOptions, val: &str);
110
111    #[wasm_bindgen(method, setter, js_name = "windowOptions")]
112    pub fn set_window_options(this: &TerminalOptions, val: &WindowOptions);
113
114    // ========================================================================
115
116    #[wasm_bindgen(js_name = "ITheme")]
117    pub type Theme;
118
119    #[wasm_bindgen(method, setter, js_name = "foreground")]
120    pub fn set_foreground(this: &Theme, val: &str);
121
122    #[wasm_bindgen(method, setter, js_name = "background")]
123    pub fn set_background(this: &Theme, val: &str);
124
125    #[wasm_bindgen(method, setter, js_name = "cursor")]
126    pub fn set_cursor(this: &Theme, val: &str);
127
128    #[wasm_bindgen(method, setter, js_name = "cursorAccent")]
129    pub fn set_cursor_accent(this: &Theme, val: &str);
130
131    #[wasm_bindgen(method, setter, js_name = "selection")]
132    pub fn set_selection(this: &Theme, val: &str);
133
134    #[wasm_bindgen(method, setter, js_name = "black")]
135    pub fn set_black(this: &Theme, val: &str);
136
137    #[wasm_bindgen(method, setter, js_name = "red")]
138    pub fn set_red(this: &Theme, val: &str);
139
140    #[wasm_bindgen(method, setter, js_name = "green")]
141    pub fn set_green(this: &Theme, val: &str);
142
143    #[wasm_bindgen(method, setter, js_name = "yellow")]
144    pub fn set_yellow(this: &Theme, val: &str);
145
146    #[wasm_bindgen(method, setter, js_name = "blue")]
147    pub fn set_blue(this: &Theme, val: &str);
148
149    #[wasm_bindgen(method, setter, js_name = "magenta")]
150    pub fn set_magenta(this: &Theme, val: &str);
151
152    #[wasm_bindgen(method, setter, js_name = "cyan")]
153    pub fn set_cyan(this: &Theme, val: &str);
154
155    #[wasm_bindgen(method, setter, js_name = "white")]
156    pub fn set_white(this: &Theme, val: &str);
157
158    #[wasm_bindgen(method, setter, js_name = "brightBlack")]
159    pub fn set_bright_black(this: &Theme, val: &str);
160
161    #[wasm_bindgen(method, setter, js_name = "brightRed")]
162    pub fn set_bright_red(this: &Theme, val: &str);
163
164    #[wasm_bindgen(method, setter, js_name = "brightGreen")]
165    pub fn set_bright_green(this: &Theme, val: &str);
166
167    #[wasm_bindgen(method, setter, js_name = "brightYellow")]
168    pub fn set_bright_yellow(this: &Theme, val: &str);
169
170    #[wasm_bindgen(method, setter, js_name = "brightBlue")]
171    pub fn set_bright_blue(this: &Theme, val: &str);
172
173    #[wasm_bindgen(method, setter, js_name = "brightMagenta")]
174    pub fn set_bright_magenta(this: &Theme, val: &str);
175
176    #[wasm_bindgen(method, setter, js_name = "brightCyan")]
177    pub fn set_bright_cyan(this: &Theme, val: &str);
178
179    #[wasm_bindgen(method, setter, js_name = "brightWhite")]
180    pub fn set_bright_white(this: &Theme, val: &str);
181
182    // ========================================================================
183
184    #[wasm_bindgen(js_name = "ILinkMatcherOptions")]
185    pub type LinkMatcherOptions;
186
187    #[wasm_bindgen(method, setter, js_name = "matchIndex")]
188    pub fn set_match_index(this: &LinkMatcherOptions, val: u32);
189
190    #[wasm_bindgen(method, setter, js_name = "validationCallback")]
191    pub fn set_validation_callback(this: &LinkMatcherOptions, val: &Function);
192    // (uri: &str, callback: (is_valid: bool) => void) => void;
193
194    #[wasm_bindgen(method, setter, js_name = "tooltipCallback")]
195    pub fn set_tooltip_callback(this: &LinkMatcherOptions, val: &Function);
196    // (event: MouseEvent, uri: &str, location: ViewportRange) => bool | void;
197
198    #[wasm_bindgen(method, setter, js_name = "leaveCallback")]
199    pub fn set_leave_callback(this: &LinkMatcherOptions, val: &Function);
200    // () => void;
201
202    #[wasm_bindgen(method, setter, js_name = "priority")]
203    pub fn set_priority(this: &LinkMatcherOptions, val: u32);
204
205    #[wasm_bindgen(method, setter, js_name = "willLinkActivate")]
206    pub fn set_will_link_activate(this: &LinkMatcherOptions, val: &Function);
207    // (event: MouseEvent, uri: &str) => bool;
208
209    // ========================================================================
210
211    #[wasm_bindgen(js_name = "IDisposable")]
212    pub type Disposable;
213
214    #[wasm_bindgen(method, js_name = "dispose")]
215    pub fn dispose(this: &Disposable);
216
217    // ========================================================================
218
219    #[wasm_bindgen(js_name = "IEvent")]
220    pub type Event;
221
222    //   export interface Event<T, U = void> {
223    //     (listener: (arg1: T, arg2: U) => any): Disposable;
224    //   }
225
226    // ========================================================================
227
228    #[wasm_bindgen(extends = Disposable, js_name = "IMarker")]
229    pub type Marker;
230
231    #[wasm_bindgen(method, getter, js_name = "id")]
232    pub fn get_id(this: &Marker) -> u32;
233
234    #[wasm_bindgen(method, getter, js_name = "isDisposed")]
235    pub fn get_is_disposed(this: &Marker) -> bool;
236
237    #[wasm_bindgen(method, getter, js_name = "line")]
238    pub fn get_line(this: &Marker) -> u32;
239
240    // ========================================================================
241
242    #[wasm_bindgen(js_name = "ILocalizableStrings")]
243    pub type LocalizableStrings;
244
245    #[wasm_bindgen(method, setter, js_name = "promptLabel")]
246    pub fn set_prompt_label(this: &LocalizableStrings, val: &str);
247
248    #[wasm_bindgen(method, setter, js_name = "tooMuchOutput")]
249    pub fn set_too_much_output(this: &LocalizableStrings, val: &str);
250
251    // ========================================================================
252
253    #[wasm_bindgen(js_name = "IWindowOptions")]
254    pub type WindowOptions;
255
256    #[wasm_bindgen(method, setter, js_name = "restoreWin")]
257    pub fn set_restore_win(this: &WindowOptions, val: bool);
258
259    #[wasm_bindgen(method, setter, js_name = "minimizeWin")]
260    pub fn set_minimize_win(this: &WindowOptions, val: bool);
261
262    #[wasm_bindgen(method, setter, js_name = "setWinPosition")]
263    pub fn set_win_position(this: &WindowOptions, val: bool);
264
265    #[wasm_bindgen(method, setter, js_name = "setWinSizePixels")]
266    pub fn set_win_size_pixels(this: &WindowOptions, val: bool);
267
268    #[wasm_bindgen(method, setter, js_name = "raiseWin")]
269    pub fn set_raise_win(this: &WindowOptions, val: bool);
270
271    #[wasm_bindgen(method, setter, js_name = "lowerWin")]
272    pub fn set_lower_win(this: &WindowOptions, val: bool);
273
274    #[wasm_bindgen(method, setter, js_name = "refreshWin")]
275    pub fn set_refresh_win(this: &WindowOptions, val: bool);
276
277    #[wasm_bindgen(method, setter, js_name = "setWinSizeChars")]
278    pub fn set_win_size_chars(this: &WindowOptions, val: bool);
279
280    #[wasm_bindgen(method, setter, js_name = "maximizeWin")]
281    pub fn set_maximize_win(this: &WindowOptions, val: bool);
282
283    #[wasm_bindgen(method, setter, js_name = "fullscreenWin")]
284    pub fn set_fullscreen_win(this: &WindowOptions, val: bool);
285
286    #[wasm_bindgen(method, getter, js_name = "getWinState")]
287    pub fn get_win_state(this: &WindowOptions) -> Option<bool>;
288
289    #[wasm_bindgen(method, getter, js_name = "getWinPosition")]
290    pub fn get_win_position(this: &WindowOptions) -> Option<bool>;
291
292    #[wasm_bindgen(method, getter, js_name = "getWinSizePixels")]
293    pub fn get_win_size_pixels(this: &WindowOptions) -> Option<bool>;
294
295    #[wasm_bindgen(method, getter, js_name = "getScreenSizePixels")]
296    pub fn get_screen_size_pixels(this: &WindowOptions) -> Option<bool>;
297
298    #[wasm_bindgen(method, getter, js_name = "getCellSizePixels")]
299    pub fn get_cell_size_pixels(this: &WindowOptions) -> Option<bool>;
300
301    #[wasm_bindgen(method, getter, js_name = "getWinSizeChars")]
302    pub fn get_win_size_chars(this: &WindowOptions) -> Option<bool>;
303
304    #[wasm_bindgen(method, getter, js_name = "getScreenSizeChars")]
305    pub fn get_screen_size_chars(this: &WindowOptions) -> Option<bool>;
306
307    #[wasm_bindgen(method, getter, js_name = "getIconTitle")]
308    pub fn get_icon_title(this: &WindowOptions) -> Option<bool>;
309
310    #[wasm_bindgen(method, getter, js_name = "getWinTitle")]
311    pub fn get_win_title(this: &WindowOptions) -> Option<bool>;
312
313    #[wasm_bindgen(method, setter, js_name = "pushTitle")]
314    pub fn set_push_title(this: &WindowOptions, val: bool);
315
316    #[wasm_bindgen(method, setter, js_name = "popTitle")]
317    pub fn set_pop_title(this: &WindowOptions, val: bool);
318
319    #[wasm_bindgen(method, setter, js_name = "setWinLines")]
320    pub fn set_win_lines(this: &WindowOptions, val: bool);
321
322    // ========================================================================
323
324    #[wasm_bindgen(extends = Disposable)]
325    pub type Terminal;
326
327    #[wasm_bindgen(constructor)]
328    pub fn construct(options: Option<&TerminalOptions>) -> Terminal;
329
330    #[wasm_bindgen(method, getter, js_name = "element")]
331    pub fn get_element(this: &Terminal) -> HtmlElement;
332
333    #[wasm_bindgen(method, getter, js_name = "textarea")]
334    pub fn get_textarea(this: &Terminal) -> HtmlTextAreaElement;
335
336    #[wasm_bindgen(method, getter, js_name = "rows")]
337    pub fn get_rows(this: &Terminal) -> u32;
338
339    #[wasm_bindgen(method, getter, js_name = "cols")]
340    pub fn get_cols(this: &Terminal) -> u32;
341
342    #[wasm_bindgen(method, getter, js_name = "buffer")]
343    pub fn get_buffer(this: &Terminal) -> BufferNamespace;
344
345    #[wasm_bindgen(method, getter, js_name = "markers")]
346    pub fn get_markers(this: &Terminal) -> Box<[JsValue]>; // Box<[Marker]>
347
348    #[wasm_bindgen(method, getter, js_name = "parser")]
349    pub fn get_parser(this: &Terminal) -> Parser;
350
351    #[wasm_bindgen(method, getter, js_name = "unicode")]
352    pub fn get_unicode(this: &Terminal) -> UnicodeHandling;
353
354    #[wasm_bindgen(static_method_of = Terminal, js_name = "strings")]
355    pub fn get_strings() -> LocalizableStrings;
356
357    // ========================================================================
358
359    #[wasm_bindgen(method, js_name = "onBinary")]
360    pub fn on_binary(
361        this: &Terminal,
362        f: &Function, // Event<&str>
363    ) -> Disposable;
364
365    //---------------
366
367    #[wasm_bindgen(method, js_name = "onCursorMove")]
368    pub fn on_cursor_move(
369        this: &Terminal,
370        f: &Function, // Event<void>
371    ) -> Disposable;
372
373    //---------------
374
375    #[wasm_bindgen(method, js_name = "onData")]
376    pub fn on_data(
377        this: &Terminal,
378        f: &Function, // Event<&str>
379    ) -> Disposable;
380
381    //---------------
382
383    pub type OnKeyEvent;
384
385    #[wasm_bindgen(method, getter, js_name = "key")]
386    pub fn key(this: &OnKeyEvent) -> String;
387
388    #[wasm_bindgen(method, getter, js_name = "domEvent")]
389    pub fn dom_event(this: &OnKeyEvent) -> KeyboardEvent;
390
391    #[wasm_bindgen(method, js_name = "onKey")]
392    pub fn on_key(
393        this: &Terminal,
394        f: &Function, // Event<{key: &str, dom_event: KeyboardEvent}>
395    ) -> Disposable;
396
397    //---------------
398
399    #[wasm_bindgen(method, js_name = "onLineFeed")]
400    pub fn on_line_feed(
401        this: &Terminal,
402        f: &Function, // Event<void>
403    ) -> Disposable;
404
405    //---------------
406
407    #[wasm_bindgen(method, js_name = "onScroll")]
408    pub fn on_scroll(
409        this: &Terminal,
410        f: &Function, // Event<u32>
411    ) -> Disposable;
412
413    //---------------
414
415    #[wasm_bindgen(method, js_name = "onSelectionChange")]
416    pub fn on_selection_change(
417        this: &Terminal,
418        f: &Function, // Event<void>
419    ) -> Disposable;
420
421    //---------------
422
423    pub type OnRenderEvent;
424
425    #[wasm_bindgen(method, getter, js_name = "start")]
426    pub fn start(this: &OnRenderEvent) -> u32;
427
428    #[wasm_bindgen(method, getter, js_name = "end")]
429    pub fn end(this: &OnRenderEvent) -> u32;
430
431    #[wasm_bindgen(method, js_name = "onRender")]
432    pub fn on_render(
433        this: &Terminal,
434        f: &Function, // Event<{start: u32, end: u32}>
435    ) -> Disposable;
436
437    //---------------
438
439    #[wasm_bindgen(method, js_name = "onResize")]
440    pub fn on_resize(
441        this: &Terminal,
442        f: &Function, // Event<{cols: u32, rows: u32}>
443    ) -> Disposable;
444
445    //---------------
446
447    #[wasm_bindgen(method, js_name = "onTitleChange")]
448    pub fn on_title_change(
449        this: &Terminal,
450        f: &Function, // Event<&str>
451    ) -> Disposable;
452
453    //---------------
454
455    #[wasm_bindgen(method, js_name = "blur")]
456    pub fn blur(this: &Terminal);
457
458    #[wasm_bindgen(method, js_name = "focus")]
459    pub fn focus(this: &Terminal);
460
461    #[wasm_bindgen(method, js_name = "resize")]
462    pub fn resize(this: &Terminal, columns: u32, rows: u32);
463
464    #[wasm_bindgen(method, js_name = "open")]
465    pub fn open(this: &Terminal, parent: HtmlElement);
466
467    #[wasm_bindgen(method, js_name = "attachCustomKeyEventHandler")]
468    pub fn attach_custom_key_event_handler(
469        this: &Terminal,
470        custom_key_event_handler: &Function, // (event: KeyboardEvent) => bool
471    );
472
473    #[wasm_bindgen(method, js_name = "registerLinkMatcher")]
474    pub fn register_link_matcher(
475        this: &Terminal,
476        regex: RegExp,
477        handler: &Function, // (event: MouseEvent, uri: &str) => void
478        options: Option<LinkMatcherOptions>,
479    ) -> u32;
480
481    #[wasm_bindgen(method, js_name = "deregisterLinkMatcher")]
482    pub fn deregister_link_matcher(this: &Terminal, matcher_id: u32);
483
484    #[wasm_bindgen(method, js_name = "registerLinkProvider")]
485    pub fn register_link_provider(this: &Terminal, link_provider: LinkProvider) -> Disposable;
486
487    #[wasm_bindgen(method, js_name = "registerCharacterJoiner")]
488    pub fn register_character_joiner(
489        this: &Terminal,
490        handler: &Function, // (text: &str) => [u32, u32][]
491    ) -> u32;
492
493    #[wasm_bindgen(method, js_name = "deregisterCharacterJoiner")]
494    pub fn deregister_character_joiner(this: &Terminal, joiner_id: u32);
495
496    #[wasm_bindgen(method, js_name = "registerMarker")]
497    pub fn register_marker(this: &Terminal, cursorYOffset: u32) -> Option<Marker>;
498
499    #[wasm_bindgen(method, js_name = "addMarker")]
500    pub fn add_marker(this: &Terminal, cursorYOffset: u32) -> Option<Marker>;
501
502    #[wasm_bindgen(method, js_name = "hasSelection")]
503    pub fn has_selection(this: &Terminal) -> bool;
504
505    #[wasm_bindgen(method, js_name = "getSelection")]
506    pub fn get_selection(this: &Terminal) -> String;
507
508    #[wasm_bindgen(method, js_name = "getSelectionPosition")]
509    pub fn get_selection_position(this: &Terminal) -> Option<SelectionPosition>;
510
511    #[wasm_bindgen(method, js_name = "clearSelection")]
512    pub fn clear_selection(this: &Terminal);
513
514    #[wasm_bindgen(method, js_name = "select")]
515    pub fn select(this: &Terminal, column: u32, row: u32, length: u32);
516
517    #[wasm_bindgen(method, js_name = "selectAll")]
518    pub fn select_all(this: &Terminal);
519
520    #[wasm_bindgen(method, js_name = "selectLines")]
521    pub fn select_lines(this: &Terminal, start: u32, end: u32);
522
523    #[wasm_bindgen(method, js_name = "dispose")]
524    pub fn dispose(this: &Terminal);
525
526    #[wasm_bindgen(method, js_name = "scrollLines")]
527    pub fn scroll_lines(this: &Terminal, amount: u32);
528
529    #[wasm_bindgen(method, js_name = "scrollPages")]
530    pub fn scroll_pages(this: &Terminal, page_count: u32);
531
532    #[wasm_bindgen(method, js_name = "scrollToTop")]
533    pub fn scroll_to_top(this: &Terminal);
534
535    #[wasm_bindgen(method, js_name = "scrollToBottom")]
536    pub fn scroll_to_bottom(this: &Terminal);
537
538    #[wasm_bindgen(method, js_name = "scrollToLine")]
539    pub fn scroll_to_line(this: &Terminal, line: u32);
540
541    #[wasm_bindgen(method, js_name = "clear")]
542    pub fn clear(this: &Terminal);
543
544    // ----------
545
546    #[wasm_bindgen(method, js_name = "write")]
547    pub fn write(this: &Terminal, data: &str);
548
549    #[wasm_bindgen(method, js_name = "writeUtf8")]
550    pub fn write_utf8(this: &Terminal, data: &[u8]);
551
552    #[wasm_bindgen(method, js_name = "write")]
553    pub fn write_callback(this: &Terminal, data: &str, callback: &Function); // () => void
554
555    #[wasm_bindgen(method, js_name = "writeUtf8")]
556    pub fn write_utf8_callback(this: &Terminal, data: &[u8], callback: &Function); // () => void
557
558    // ----------
559
560    #[wasm_bindgen(method, js_name = "writeln")]
561    pub fn writeln(this: &Terminal, data: &str);
562
563    #[wasm_bindgen(method, js_name = "writeln")]
564    pub fn writeln_utf8(this: &Terminal, data: &[u8]);
565
566    #[wasm_bindgen(method, js_name = "writeln")]
567    pub fn writeln_with_callback(this: &Terminal, data: &str, callback: Option<&Function>); // () => void
568
569    #[wasm_bindgen(method, js_name = "writeln")]
570    pub fn writeln_utf8_with_callback(this: &Terminal, data: &[u8], callback: Option<&Function>); // () => void
571
572    // ----------
573
574    #[wasm_bindgen(method, js_name = "paste")]
575    pub fn paste(this: &Terminal, data: &str);
576
577    #[wasm_bindgen(method, js_name = "getOption")]
578    pub fn get_string_option(this: &Terminal, key: StringOptionKey) -> String;
579
580    #[wasm_bindgen(method, js_name = "getOption")]
581    pub fn get_bool_option(this: &Terminal, key: BoolOptionKey) -> bool;
582
583    #[wasm_bindgen(method, js_name = "getOption")]
584    pub fn get_number_option(this: &Terminal, key: NumberOptionKey) -> u32;
585
586    #[wasm_bindgen(method, js_name = "getOption")]
587    pub fn get_any_option(this: &Terminal, key: &str) -> JsValue;
588
589    #[wasm_bindgen(method, js_name = "setOption")]
590    pub fn set_string_option(this: &Terminal, key: StringOptionKey, value: &str);
591
592    #[wasm_bindgen(method, js_name = "setOption")]
593    pub fn set_font_option(this: &Terminal, key: FontWeightKey, value: FontWeight);
594
595    #[wasm_bindgen(method, js_name = "setOption")]
596    pub fn set_log_level_option(this: &Terminal, key: LogLevelKey, value: LogLevel);
597
598    #[wasm_bindgen(method, js_name = "setOption")]
599    pub fn set_bell_style_option(this: &Terminal, key: BellStyleKey, value: BellStyle);
600
601    #[wasm_bindgen(method, js_name = "setOption")]
602    pub fn set_cursor_option(this: &Terminal, key: CursorStyleKey, value: CursorStyle);
603
604    #[wasm_bindgen(method, js_name = "setOption")]
605    pub fn set_bool_option(this: &Terminal, key: BoolOptionKey, value: bool);
606
607    #[wasm_bindgen(method, js_name = "setOption")]
608    pub fn set_number_option(this: &Terminal, key: NumberOptionKey, value: u32);
609
610    #[wasm_bindgen(method, js_name = "setOption")]
611    pub fn set_theme_option(this: &Terminal, key: ThemeKey, value: Theme);
612
613    #[wasm_bindgen(method, js_name = "setOption")]
614    pub fn set_any_option(this: &Terminal, key: &str, value: JsValue);
615
616    #[wasm_bindgen(method, js_name = "refresh")]
617    pub fn refresh(this: &Terminal, start: u32, end: u32);
618
619    #[wasm_bindgen(method, js_name = "reset")]
620    pub fn reset(this: &Terminal);
621
622    #[wasm_bindgen(method, js_name = "loadAddon")]
623    pub fn load_addon(this: &Terminal, addon: TerminalAddon);
624
625    // ========================================================================
626
627    #[wasm_bindgen(extends = Disposable, js_name = "ITerminalAddon")]
628    pub type TerminalAddon;
629
630    #[wasm_bindgen(method)]
631    pub fn activate(this: &TerminalAddon, terminal: Terminal);
632
633    // ========================================================================
634
635    #[wasm_bindgen(js_name = "ISelectionPosition")]
636    pub type SelectionPosition;
637
638    #[wasm_bindgen(method, getter, js_name = "startColumn")]
639    pub fn start_column(this: &SelectionPosition) -> u32;
640
641    #[wasm_bindgen(method, getter, js_name = "startRow")]
642    pub fn start_row(this: &SelectionPosition) -> u32;
643
644    #[wasm_bindgen(method, getter, js_name = "endColumn")]
645    pub fn end_column(this: &SelectionPosition) -> u32;
646
647    #[wasm_bindgen(method, getter, js_name = "endRow")]
648    pub fn end_row(this: &SelectionPosition) -> u32;
649
650    // ========================================================================
651
652    #[wasm_bindgen(js_name = "IViewportRange")]
653    pub type ViewportRange;
654
655    #[wasm_bindgen(method, getter, js_name = "start")]
656    pub fn get_start(this: &ViewportRange) -> ViewportRangePosition;
657
658    #[wasm_bindgen(method, getter, js_name = "end")]
659    pub fn get_end(this: &ViewportRange) -> ViewportRangePosition;
660
661    #[wasm_bindgen(method, setter, js_name = "start")]
662    pub fn set_start(this: &ViewportRange, val: &ViewportRangePosition);
663
664    #[wasm_bindgen(method, setter, js_name = "end")]
665    pub fn set_end(this: &ViewportRange, val: &ViewportRangePosition);
666
667    // ========================================================================
668
669    #[wasm_bindgen(js_name = "IViewportRangePosition")]
670    pub type ViewportRangePosition;
671
672    #[wasm_bindgen(method, setter, js_name = "x")]
673    pub fn set_x(this: &ViewportRangePosition, val: u32);
674
675    #[wasm_bindgen(method, setter, js_name = "y")]
676    pub fn set_y(this: &ViewportRangePosition, val: u32);
677
678    // ========================================================================
679
680    #[wasm_bindgen(js_name = "ILinkProvider")]
681    pub type LinkProvider;
682
683    #[wasm_bindgen(method, js_name = "provideLinks")]
684    pub fn provide_links(
685        this: &LinkProvider,
686        buffer_lineu32: u32,
687        callback: &Function, // (links: Link[] | undefined) => void
688    );
689
690    // ========================================================================
691
692    #[wasm_bindgen(js_name = "ILink")]
693    pub type Link;
694
695    #[wasm_bindgen(method, setter, js_name = "range")]
696    pub fn set_range(this: &Link, val: &BufferRange);
697
698    #[wasm_bindgen(method, setter, js_name = "text")]
699    pub fn set_text(this: &Link, val: &str);
700
701    #[wasm_bindgen(method, setter, js_name = "decorations")]
702    pub fn set_decorations(this: &Link, val: &LinkDecorations);
703
704    #[wasm_bindgen(method, js_name = "activate")]
705    pub fn activate(this: &Link, event: MouseEvent, text: &str);
706
707    #[wasm_bindgen(method, js_name = "hover")]
708    pub fn hover(this: &Link, event: MouseEvent, text: &str);
709
710    #[wasm_bindgen(method, js_name = "leave")]
711    pub fn leave(this: &Link, event: MouseEvent, text: &str);
712
713    // ========================================================================
714
715    #[wasm_bindgen(js_name = "ILinkDecorations")]
716    pub type LinkDecorations;
717
718    #[wasm_bindgen(method, setter, js_name = "pointerCursor")]
719    pub fn set_pointer_cursor(this: &BufferNamespace, val: bool);
720
721    #[wasm_bindgen(method, setter, js_name = "underline")]
722    pub fn set_underline(this: &BufferNamespace, val: bool);
723
724    // ========================================================================
725
726    #[wasm_bindgen(js_name = "IBufferRange")]
727    pub type BufferRange;
728
729    #[wasm_bindgen(method, getter, js_name = "start")]
730    pub fn get_start(this: &BufferRange) -> BufferCellPosition;
731
732    #[wasm_bindgen(method, getter, js_name = "end")]
733    pub fn get_end(this: &BufferRange) -> BufferCellPosition;
734
735    // ========================================================================
736
737    #[wasm_bindgen(js_name = "IBufferCellPosition")]
738    pub type BufferCellPosition;
739
740    #[wasm_bindgen(method, getter, js_name = "x")]
741    pub fn get_x(this: &BufferCellPosition) -> u32;
742
743    #[wasm_bindgen(method, getter, js_name = "y")]
744    pub fn get_y(this: &BufferCellPosition) -> u32;
745
746    // ========================================================================
747
748    #[wasm_bindgen(js_name = "IBuffer")]
749    pub type Buffer;
750
751    #[wasm_bindgen(method, getter, js_name = "type")]
752    pub fn get_type(this: &Buffer) -> BufferType;
753
754    #[wasm_bindgen(method, getter, js_name = "cursorY")]
755    pub fn get_cursor_y(this: &Buffer) -> u32;
756
757    #[wasm_bindgen(method, getter, js_name = "cursorX")]
758    pub fn get_cursor_x(this: &Buffer) -> u32;
759
760    #[wasm_bindgen(method, getter, js_name = "viewportY")]
761    pub fn get_viewport_y(this: &Buffer) -> u32;
762
763    #[wasm_bindgen(method, getter, js_name = "baseY")]
764    pub fn get_base_y(this: &Buffer) -> u32;
765
766    #[wasm_bindgen(method, getter, js_name = "length")]
767    pub fn get_length(this: &Buffer) -> u32;
768
769    #[wasm_bindgen(method, js_name = "getLine")]
770    pub fn get_line(this: &Buffer, y: u32) -> BufferLine;
771
772    #[wasm_bindgen(method, js_name = "getNullCell")]
773    pub fn get_null_cell(this: &Buffer) -> BufferCell;
774
775    // ========================================================================
776
777    #[wasm_bindgen(js_name = "IBufferNamespace")]
778    pub type BufferNamespace;
779
780    #[wasm_bindgen(method, getter, js_name = "active")]
781    pub fn get_active(this: &BufferNamespace) -> Buffer;
782
783    #[wasm_bindgen(method, getter, js_name = "normal")]
784    pub fn get_normal(this: &BufferNamespace) -> Buffer;
785
786    #[wasm_bindgen(method, getter, js_name = "alternate")]
787    pub fn get_alternate(this: &BufferNamespace) -> Buffer;
788
789    #[wasm_bindgen(method, setter, js_name = "onBufferChange")]
790    pub fn set_on_buffer_change(this: &BufferNamespace, val: &Function);
791
792    // ========================================================================
793
794    #[wasm_bindgen(js_name = "IBufferLine")]
795    pub type BufferLine;
796
797    #[wasm_bindgen(method, getter, js_name = "isWrapped")]
798    pub fn is_wrapped(this: &BufferLine) -> bool;
799
800    #[wasm_bindgen(method, getter, js_name = "length")]
801    pub fn get_length(this: &BufferLine) -> u32;
802
803    #[wasm_bindgen(method, js_name = "getCell")]
804    pub fn get_cell(this: &BufferLine, x: u32, cell: Option<BufferCell>) -> Option<BufferCell>;
805
806    #[wasm_bindgen(method, js_name = "translateToString")]
807    pub fn translate_to_String(
808        this: &BufferLine,
809        trim_right: bool,
810        start_column: Option<u32>,
811        end_column: Option<u32>,
812    ) -> String;
813
814    // ========================================================================
815
816    #[wasm_bindgen(js_name = "IBufferCell")]
817    pub type BufferCell;
818
819    #[wasm_bindgen(method, js_name = "getWidth")]
820    pub fn get_width(this: &BufferCell) -> u32;
821
822    #[wasm_bindgen(method, js_name = "getChars")]
823    pub fn get_chars(this: &BufferCell) -> String;
824
825    #[wasm_bindgen(method, js_name = "getCode")]
826    pub fn get_code(this: &BufferCell) -> u32;
827
828    #[wasm_bindgen(method, js_name = "getFgColorMode")]
829    pub fn get_fg_color_mode(this: &BufferCell) -> u32;
830
831    #[wasm_bindgen(method, js_name = "getBgColorMode")]
832    pub fn get_bg_color_mode(this: &BufferCell) -> u32;
833
834    #[wasm_bindgen(method, js_name = "getFgColor")]
835    pub fn get_fg_color(this: &BufferCell) -> u32;
836
837    #[wasm_bindgen(method, js_name = "getBgColor")]
838    pub fn bg_color(this: &BufferCell) -> u32;
839
840    #[wasm_bindgen(method, js_name = "isBold")]
841    pub fn is_bold(this: &BufferCell) -> u32;
842
843    #[wasm_bindgen(method, js_name = "isItalic")]
844    pub fn is_italic(this: &BufferCell) -> u32;
845
846    #[wasm_bindgen(method, js_name = "isDim")]
847    pub fn is_dim(this: &BufferCell) -> u32;
848
849    #[wasm_bindgen(method, js_name = "isUnderline")]
850    pub fn is_underline(this: &BufferCell) -> u32;
851
852    #[wasm_bindgen(method, js_name = "isBlink")]
853    pub fn is_blink(this: &BufferCell) -> u32;
854
855    #[wasm_bindgen(method, js_name = "isInverse")]
856    pub fn is_inverse(this: &BufferCell) -> u32;
857
858    #[wasm_bindgen(method, js_name = "isInvisible")]
859    pub fn is_invisible(this: &BufferCell) -> u32;
860
861    #[wasm_bindgen(method, js_name = "isFgRGB")]
862    pub fn is_fg_rgb(this: &BufferCell) -> bool;
863
864    #[wasm_bindgen(method, js_name = "isBgRGB")]
865    pub fn is_bg_rgb(this: &BufferCell) -> bool;
866
867    #[wasm_bindgen(method, js_name = "isFgPalette")]
868    pub fn is_fg_palette(this: &BufferCell) -> bool;
869
870    #[wasm_bindgen(method, js_name = "isBgPalette")]
871    pub fn is_bg_palette(this: &BufferCell) -> bool;
872
873    #[wasm_bindgen(method, js_name = "isFgDefault")]
874    pub fn is_fg_default(this: &BufferCell) -> bool;
875
876    #[wasm_bindgen(method, js_name = "isBgDefault")]
877    pub fn is_bg_default(this: &BufferCell) -> bool;
878
879    #[wasm_bindgen(method, js_name = "isAttributeDefault")]
880    pub fn is_attribute_default(this: &BufferCell) -> bool;
881
882    // ========================================================================
883
884    #[wasm_bindgen(js_name = "IFunctionIdentifier")]
885    pub type FunctionIdentifier;
886
887    #[wasm_bindgen(method, setter, js_name = "prefix")]
888    pub fn set_prefix(this: &FunctionIdentifier, val: &str);
889
890    #[wasm_bindgen(method, setter, js_name = "intermediates")]
891    pub fn set_intermediates(this: &FunctionIdentifier, val: &str);
892
893    #[wasm_bindgen(method, setter, js_name = "final")]
894    pub fn set_final(this: &FunctionIdentifier, val: &str);
895
896    // ========================================================================
897
898    #[wasm_bindgen(js_name = "IParser")]
899    pub type Parser;
900
901    #[wasm_bindgen(method, js_name = "registerCsiHandler")]
902    pub fn register_csi_handler(
903        this: &FunctionIdentifier,
904        id: FunctionIdentifier,
905        callback: &Function, // (params: (u32 | u32[])[]) => bool
906    ) -> Disposable;
907
908    #[wasm_bindgen(method, js_name = "registerDcsHandler")]
909    pub fn register_dcs_handler(
910        this: &FunctionIdentifier,
911        id: FunctionIdentifier,
912        callback: &Function, // (data: &str, param: (u32 | u32[])[]) => bool
913    ) -> Disposable;
914
915    #[wasm_bindgen(method, js_name = "registerEscHandler")]
916    pub fn register_esc_handler(
917        this: &FunctionIdentifier,
918        id: FunctionIdentifier,
919        handler: &Function, // () => bool
920    ) -> Disposable;
921
922    #[wasm_bindgen(method, js_name = "registerOscHandler")]
923    pub fn register_osc_handler(
924        this: &FunctionIdentifier,
925        ident: u32,
926        callback: &Function, // (data: &str) => bool
927    ) -> Disposable;
928
929    // ========================================================================
930
931    #[wasm_bindgen(js_name = "IUnicodeVersionProvider")]
932    pub type UnicodeVersionProvider;
933
934    #[wasm_bindgen(method, getter, js_name = "version")]
935    pub fn get_version(this: &UnicodeVersionProvider) -> String;
936
937    #[wasm_bindgen(method, js_name = "wcwidth")]
938    pub fn wcwidth(this: &ViewportRangePosition, codepoint: u32) -> WcWidth;
939
940    // ========================================================================
941
942    #[wasm_bindgen(js_name = "IUnicodeHandling")]
943    pub type UnicodeHandling;
944
945    #[wasm_bindgen(method, js_name = "register")]
946    pub fn register(this: &UnicodeHandling, provider: UnicodeVersionProvider);
947
948    #[wasm_bindgen(method, getter, js_name = "versions")]
949    pub fn get_versions(this: &UnicodeHandling) -> Box<[JsValue]>; // Box<[&str]>
950
951    #[wasm_bindgen(method, getter, js_name = "activeVersion")]
952    pub fn get_active_version(this: &UnicodeHandling) -> String;
953
954}
955