| // Copyright (c) 2012 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| 'use strict'; |
| |
| /** |
| * PreferenceManager subclass managing global NaSSH preferences. |
| * |
| * This is currently just an ordered list of known connection profiles. |
| * |
| * @param {string} profileId |
| * @extends {lib.PreferenceManager} |
| * @constructor |
| */ |
| hterm.PreferenceManager = function(profileId) { |
| lib.PreferenceManager.call(this, hterm.defaultStorage, |
| hterm.PreferenceManager.prefix_ + profileId); |
| Object.entries(hterm.PreferenceManager.defaultPreferences).forEach( |
| ([key, entry]) => { |
| this.definePreference(key, entry['default']); |
| }); |
| }; |
| |
| /** |
| * The storage key prefix to namespace the preferences. |
| */ |
| hterm.PreferenceManager.prefix_ = '/hterm/profiles/'; |
| |
| /** |
| * List all the defined profiles. |
| * |
| * @param {!lib.Storage} storage Where to look for profiles. |
| * @param {function(!Array<string>)} callback Called with the list of profiles. |
| */ |
| hterm.PreferenceManager.listProfiles = function(storage, callback) { |
| storage.getItems(null).then((items) => { |
| const profiles = {}; |
| for (const key of Object.keys(items)) { |
| if (key.startsWith(hterm.PreferenceManager.prefix_)) { |
| // Turn "/hterm/profiles/foo/bar/cow" to "foo/bar/cow". |
| const subKey = key.slice(hterm.PreferenceManager.prefix_.length); |
| // Turn "foo/bar/cow" into "foo". |
| profiles[subKey.split('/', 1)[0]] = true; |
| } |
| } |
| callback(Object.keys(profiles)); |
| }); |
| }; |
| |
| /** @enum {string} */ |
| hterm.PreferenceManager.Categories = { |
| Keyboard: 'Keyboard', |
| Appearance: 'Appearance', |
| CopyPaste: 'CopyPaste', |
| Sounds: 'Sounds', |
| Scrolling: 'Scrolling', |
| Encoding: 'Encoding', |
| Extensions: 'Extensions', |
| Miscellaneous: 'Miscellaneous', |
| }; |
| |
| /** |
| * List of categories, ordered by display order (top to bottom) |
| */ |
| hterm.PreferenceManager.categoryDefinitions = [ |
| {id: hterm.PreferenceManager.Categories.Appearance, |
| text: 'Appearance (fonts, colors, images)'}, |
| {id: hterm.PreferenceManager.Categories.CopyPaste, |
| text: 'Copy & Paste'}, |
| {id: hterm.PreferenceManager.Categories.Encoding, |
| text: 'Encoding'}, |
| {id: hterm.PreferenceManager.Categories.Keyboard, |
| text: 'Keyboard'}, |
| {id: hterm.PreferenceManager.Categories.Scrolling, |
| text: 'Scrolling'}, |
| {id: hterm.PreferenceManager.Categories.Sounds, |
| text: 'Sounds'}, |
| {id: hterm.PreferenceManager.Categories.Extensions, |
| text: 'Extensions'}, |
| {id: hterm.PreferenceManager.Categories.Miscellaneous, |
| text: 'Miscellaneous'}, |
| ]; |
| |
| /** |
| * Internal helper to create a default preference object. |
| * |
| * @param {string} name The user readable name/title. |
| * @param {!hterm.PreferenceManager.Categories} category The pref category. |
| * @param {boolean|number|string|?Object} defaultValue The default pref value. |
| * @param {string|!Array<string|null>} type The type for this pref (or an array |
| * for enums). |
| * @param {string} help The user readable help text. |
| * @return {!Object} The default pref object. |
| */ |
| hterm.PreferenceManager.definePref_ = function( |
| name, category, defaultValue, type, help) { |
| return { |
| 'name': name, |
| 'category': category, |
| 'default': defaultValue, |
| 'type': type, |
| 'help': help, |
| }; |
| }; |
| |
| hterm.PreferenceManager.defaultPreferences = { |
| 'alt-gr-mode': hterm.PreferenceManager.definePref_( |
| 'AltGr key mode', |
| hterm.PreferenceManager.Categories.Keyboard, |
| null, [null, 'none', 'ctrl-alt', 'left-alt', 'right-alt'], |
| `Select an AltGr detection heuristic.\n` + |
| `\n` + |
| `'null': Autodetect based on navigator.language:\n` + |
| ` 'en-us' => 'none', else => 'right-alt'\n` + |
| `'none': Disable any AltGr emulation.\n` + |
| `'ctrl-alt': Assume Ctrl+Alt means AltGr.\n` + |
| `'left-alt': Assume left Alt means AltGr.\n` + |
| `'right-alt': Assume right Alt means AltGr.`, |
| ), |
| |
| 'alt-backspace-is-meta-backspace': hterm.PreferenceManager.definePref_( |
| 'Alt+Backspace is Meta+Backspace', |
| hterm.PreferenceManager.Categories.Keyboard, |
| false, 'bool', |
| `If set, undoes the Chrome OS Alt+Backspace->Delete remap, so that ` + |
| `Alt+Backspace indeed is Alt+Backspace.`, |
| ), |
| |
| 'alt-is-meta': hterm.PreferenceManager.definePref_( |
| 'Treat Alt key as Meta key', |
| hterm.PreferenceManager.Categories.Keyboard, |
| false, 'bool', |
| `Whether the Alt key acts as a Meta key or as a distinct Alt key.`, |
| ), |
| |
| 'alt-sends-what': hterm.PreferenceManager.definePref_( |
| 'Alt key modifier handling', |
| hterm.PreferenceManager.Categories.Keyboard, |
| 'escape', ['escape', '8-bit', 'browser-key'], |
| `Controls how the Alt key is handled.\n` + |
| `\n` + |
| ` escape: Send an ESC prefix.\n` + |
| ` 8-bit: Add 128 to the typed character as in xterm.\n` + |
| ` browser-key: Wait for the keypress event and see what the browser\n` + |
| ` says. (This won't work well on platforms where the browser\n` + |
| ` performs a default action for some Alt sequences.)`, |
| ), |
| |
| 'audible-bell-sound': hterm.PreferenceManager.definePref_( |
| 'Alert bell sound (URI)', |
| hterm.PreferenceManager.Categories.Sounds, |
| 'lib-resource:hterm/audio/bell', 'url', |
| `URL of the terminal bell sound. Leave it blank for no audible bell.`, |
| ), |
| |
| 'desktop-notification-bell': hterm.PreferenceManager.definePref_( |
| 'Create desktop notifications for alert bells', |
| hterm.PreferenceManager.Categories.Sounds, |
| false, 'bool', |
| `If true, terminal bells in the background will create a Web ` + |
| `Notification. https://www.w3.org/TR/notifications/\n` + |
| `\n` + |
| `Displaying notifications requires permission from the user. When this ` + |
| `option is set to true, hterm will attempt to ask the user for ` + |
| `permission if necessary. Browsers might not show this permission ` + |
| `request if it was not triggered by a user action.\n` + |
| `\n` + |
| `Chrome extensions with the "notifications" permission have permission ` + |
| `to display notifications.`, |
| ), |
| |
| 'background-color': hterm.PreferenceManager.definePref_( |
| 'Background color', |
| hterm.PreferenceManager.Categories.Appearance, |
| 'rgb(16, 16, 16)', 'color', |
| `The background color for text with no other color attributes.`, |
| ), |
| |
| 'background-image': hterm.PreferenceManager.definePref_( |
| 'Background image', |
| hterm.PreferenceManager.Categories.Appearance, |
| '', 'string', |
| `CSS value of the background image. Leave it blank for no image.\n` + |
| `\n` + |
| `For example:\n` + |
| ` url(https://goo.gl/anedTK)\n` + |
| ` linear-gradient(top bottom, blue, red)`, |
| ), |
| |
| 'background-size': hterm.PreferenceManager.definePref_( |
| 'Background image size', |
| hterm.PreferenceManager.Categories.Appearance, |
| '', 'string', |
| `CSS value of the background image size.`, |
| ), |
| |
| 'background-position': hterm.PreferenceManager.definePref_( |
| 'Background image position', |
| hterm.PreferenceManager.Categories.Appearance, |
| '', 'string', |
| `CSS value of the background image position.\n` + |
| `\n` + |
| `For example:\n` + |
| ` 10% 10%\n` + |
| ` center`, |
| ), |
| |
| 'backspace-sends-backspace': hterm.PreferenceManager.definePref_( |
| 'Backspace key behavior', |
| hterm.PreferenceManager.Categories.Keyboard, |
| false, 'bool', |
| `If true, the Backspace key will send BS ('\\x08', aka ^H). Otherwise ` + |
| `the Backspace key will send '\\x7f'.`, |
| ), |
| |
| 'character-map-overrides': hterm.PreferenceManager.definePref_( |
| 'Character map overrides', |
| hterm.PreferenceManager.Categories.Appearance, |
| null, 'value', |
| `This is specified as an object. It is a sparse array, where each ` + |
| `property is the character set code and the value is an object that is ` + |
| `a sparse array itself. In that sparse array, each property is the ` + |
| `received character and the value is the displayed character.\n` + |
| `\n` + |
| `For example:\n` + |
| `{ "0": {\n` + |
| ` "+": "\\u2192",\n` + |
| ` ",": "\\u2190",\n` + |
| ` "-": "\\u2191",\n` + |
| ` ".": "\\u2193",\n` + |
| ` "0": "\\u2588"\n} }`, |
| ), |
| |
| 'close-on-exit': hterm.PreferenceManager.definePref_( |
| 'Close window on exit', |
| hterm.PreferenceManager.Categories.Miscellaneous, |
| true, 'bool', |
| `Whether to close the window when the command finishes executing.`, |
| ), |
| |
| 'cursor-blink': hterm.PreferenceManager.definePref_( |
| 'Cursor blink', |
| hterm.PreferenceManager.Categories.Appearance, |
| false, 'bool', |
| `Whether the text cursor blinks by default. This can be toggled at ` + |
| `runtime via terminal escape sequences.`, |
| ), |
| |
| 'cursor-blink-cycle': hterm.PreferenceManager.definePref_( |
| 'Cursor blink rate', |
| hterm.PreferenceManager.Categories.Appearance, |
| [1000, 500], 'value', |
| `The text cursor blink rate in milliseconds.\n` + |
| `\n` + |
| `A two element array, the first of which is how long the text cursor ` + |
| `should be on, second is how long it should be off.`, |
| ), |
| |
| 'cursor-shape': hterm.PreferenceManager.definePref_( |
| 'Text cursor shape', |
| hterm.PreferenceManager.Categories.Appearance, |
| 'BLOCK', ['BLOCK', 'BEAM', 'UNDERLINE'], |
| `The shape of the visible text cursor. This can be changed at ` + |
| `runtime via terminal escape sequences.`, |
| ), |
| |
| 'cursor-color': hterm.PreferenceManager.definePref_( |
| 'Text cursor color', |
| hterm.PreferenceManager.Categories.Appearance, |
| 'rgba(255, 0, 0, 0.5)', 'color', |
| `The color of the visible text cursor.`, |
| ), |
| |
| 'color-palette-overrides': hterm.PreferenceManager.definePref_( |
| 'Initial color palette', |
| hterm.PreferenceManager.Categories.Appearance, |
| null, 'value', |
| `Override colors in the default palette.\n` + |
| `\n` + |
| `This can be specified as an array or an object. If specified as an ` + |
| `object it is assumed to be a sparse array, where each property ` + |
| `is a numeric index into the color palette.\n` + |
| `\n` + |
| `Values can be specified as almost any CSS color value. This ` + |
| `includes #RGB, #RRGGBB, rgb(...), rgba(...), and any color names ` + |
| `that are also part of the standard X11 rgb.txt file.\n` + |
| `\n` + |
| `You can use 'null' to specify that the default value should be not ` + |
| `be changed. This is useful for skipping a small number of indices ` + |
| `when the value is specified as an array.\n` + |
| `\n` + |
| `For example, these both set color index 1 to blue:\n` + |
| ` {1: "#0000ff"}\n` + |
| ` [null, "#0000ff"]`, |
| ), |
| |
| 'copy-on-select': hterm.PreferenceManager.definePref_( |
| 'Automatically copy selected content', |
| hterm.PreferenceManager.Categories.CopyPaste, |
| true, 'bool', |
| `Automatically copy mouse selection to the clipboard.`, |
| ), |
| |
| 'use-default-window-copy': hterm.PreferenceManager.definePref_( |
| 'Let the browser handle text copying', |
| hterm.PreferenceManager.Categories.CopyPaste, |
| false, 'bool', |
| `Whether to use the default browser/OS's copy behavior.\n` + |
| `\n` + |
| `Allow the browser/OS to handle the copy event directly which might ` + |
| `improve compatibility with some systems (where copying doesn't work ` + |
| `at all), but makes the text selection less robust.\n` + |
| `\n` + |
| `For example, long lines that were automatically line wrapped will ` + |
| `be copied with the newlines still in them.`, |
| ), |
| |
| 'clear-selection-after-copy': hterm.PreferenceManager.definePref_( |
| 'Automatically clear text selection', |
| hterm.PreferenceManager.Categories.CopyPaste, |
| true, 'bool', |
| `Whether to clear the selection after copying.`, |
| ), |
| |
| 'ctrl-plus-minus-zero-zoom': hterm.PreferenceManager.definePref_( |
| 'Ctrl++/-/0 zoom behavior', |
| hterm.PreferenceManager.Categories.Keyboard, |
| true, 'bool', |
| `If true, Ctrl+Plus/Minus/Zero controls zoom.\n` + |
| `If false, Ctrl+Shift+Plus/Minus/Zero controls zoom, Ctrl+Minus sends ` + |
| `^_, Ctrl+Plus/Zero do nothing.`, |
| ), |
| |
| 'ctrl-c-copy': hterm.PreferenceManager.definePref_( |
| 'Ctrl+C copy behavior', |
| hterm.PreferenceManager.Categories.Keyboard, |
| false, 'bool', |
| `Ctrl+C copies if true, send ^C to host if false.\n` + |
| `Ctrl+Shift+C sends ^C to host if true, copies if false.`, |
| ), |
| |
| 'ctrl-v-paste': hterm.PreferenceManager.definePref_( |
| 'Ctrl+V paste behavior', |
| hterm.PreferenceManager.Categories.Keyboard, |
| false, 'bool', |
| `Ctrl+V pastes if true, send ^V to host if false.\n` + |
| `Ctrl+Shift+V sends ^V to host if true, pastes if false.`, |
| ), |
| |
| 'east-asian-ambiguous-as-two-column': hterm.PreferenceManager.definePref_( |
| 'East Asian Ambiguous use two columns', |
| hterm.PreferenceManager.Categories.Keyboard, |
| false, 'bool', |
| `Whether East Asian Ambiguous characters have two column width.`, |
| ), |
| |
| 'enable-8-bit-control': hterm.PreferenceManager.definePref_( |
| 'Support non-UTF-8 C1 control characters', |
| hterm.PreferenceManager.Categories.Keyboard, |
| false, 'bool', |
| `True to enable 8-bit control characters, false to ignore them.\n` + |
| `\n` + |
| `We'll respect the two-byte versions of these control characters ` + |
| `regardless of this setting.`, |
| ), |
| |
| 'enable-bold': hterm.PreferenceManager.definePref_( |
| 'Bold text behavior', |
| hterm.PreferenceManager.Categories.Appearance, |
| null, 'tristate', |
| `If true, use bold weight font for text with the bold/bright ` + |
| `attribute. False to use the normal weight font. Null to autodetect.`, |
| ), |
| |
| 'enable-bold-as-bright': hterm.PreferenceManager.definePref_( |
| 'Use bright colors with bold text', |
| hterm.PreferenceManager.Categories.Appearance, |
| true, 'bool', |
| `If true, use bright colors (8-15 on a 16 color palette) for any text ` + |
| `with the bold attribute. False otherwise.`, |
| ), |
| |
| 'enable-blink': hterm.PreferenceManager.definePref_( |
| 'Enable blinking text', |
| hterm.PreferenceManager.Categories.Appearance, |
| true, 'bool', |
| `If true, respect the blink attribute. False to ignore it.`, |
| ), |
| |
| 'enable-clipboard-notice': hterm.PreferenceManager.definePref_( |
| 'Show notification when copying content', |
| hterm.PreferenceManager.Categories.CopyPaste, |
| true, 'bool', |
| `Whether to show a message in the terminal when the host writes to the ` + |
| `clipboard.`, |
| ), |
| |
| 'enable-clipboard-write': hterm.PreferenceManager.definePref_( |
| 'Allow remote clipboard writes', |
| hterm.PreferenceManager.Categories.CopyPaste, |
| true, 'bool', |
| `Allow the remote host to write directly to the local system ` + |
| `clipboard.\n` + |
| `Read access is never granted regardless of this setting.\n` + |
| `\n` + |
| `This is used to control access to features like OSC-52.`, |
| ), |
| |
| 'enable-dec12': hterm.PreferenceManager.definePref_( |
| 'Allow changing of text cursor blinking', |
| hterm.PreferenceManager.Categories.Miscellaneous, |
| false, 'bool', |
| `Respect the host's attempt to change the text cursor blink status ` + |
| `using DEC Private Mode 12.`, |
| ), |
| |
| 'enable-csi-j-3': hterm.PreferenceManager.definePref_( |
| 'Allow clearing of scrollback buffer (CSI-J-3)', |
| hterm.PreferenceManager.Categories.Miscellaneous, |
| true, 'bool', |
| `Whether the Erase Saved Lines function (mode 3) of the Erase Display ` + |
| `command (CSI-J) may clear the terminal scrollback buffer.\n` + |
| `\n` + |
| `Enabling this by default is safe.`, |
| ), |
| |
| 'environment': hterm.PreferenceManager.definePref_( |
| 'Environment variables', |
| hterm.PreferenceManager.Categories.Miscellaneous, |
| { |
| // Signal ncurses based apps to use UTF-8 output instead of legacy |
| // drawing modes (which only work in ISO-2022 mode). Since hterm is |
| // always UTF-8, this shouldn't cause problems. |
| 'NCURSES_NO_UTF8_ACS': '1', |
| 'TERM': 'xterm-256color', |
| // Set this env var that a bunch of mainstream terminal emulators set |
| // to indicate we support true colors. |
| // https://gist.github.com/XVilka/8346728 |
| 'COLORTERM': 'truecolor', |
| }, |
| 'value', |
| `The initial set of environment variables, as an object.`, |
| ), |
| |
| 'find-result-color': hterm.PreferenceManager.definePref_( |
| 'Find results highlight color', |
| hterm.PreferenceManager.Categories.Appearance, |
| 'rgba(102, 204, 255, 0.4)', 'color', |
| `The background color to highlight find results.`, |
| ), |
| |
| 'find-result-selected-color': hterm.PreferenceManager.definePref_( |
| 'Find results selected highlight color', |
| hterm.PreferenceManager.Categories.Appearance, |
| 'rgba(102, 204, 255, 0.8)', 'color', |
| `The background color to highlight the selected find result.`, |
| ), |
| |
| 'font-family': hterm.PreferenceManager.definePref_( |
| 'Text font family', |
| hterm.PreferenceManager.Categories.Appearance, |
| '"DejaVu Sans Mono", "Noto Sans Mono", "Everson Mono", FreeMono, ' + |
| 'Menlo, Terminal, monospace', |
| 'string', |
| `Default font family for the terminal text.`, |
| ), |
| |
| 'font-size': hterm.PreferenceManager.definePref_( |
| 'Text font size', |
| hterm.PreferenceManager.Categories.Appearance, |
| 15, 'int', |
| `The default font size in pixels.`, |
| ), |
| |
| 'font-smoothing': hterm.PreferenceManager.definePref_( |
| 'Text font smoothing', |
| hterm.PreferenceManager.Categories.Appearance, |
| 'antialiased', 'string', |
| `CSS font-smoothing property.`, |
| ), |
| |
| 'foreground-color': hterm.PreferenceManager.definePref_( |
| 'Text color', |
| hterm.PreferenceManager.Categories.Appearance, |
| 'rgb(240, 240, 240)', 'color', |
| `The foreground color for text with no other color attributes.`, |
| ), |
| |
| 'enable-resize-status': hterm.PreferenceManager.definePref_( |
| 'Show terminal dimensions when resized', |
| hterm.PreferenceManager.Categories.Appearance, |
| false, 'bool', |
| `Whether to show terminal dimensions when the terminal changes size.`, |
| ), |
| |
| 'hide-mouse-while-typing': hterm.PreferenceManager.definePref_( |
| 'Hide mouse cursor while typing', |
| hterm.PreferenceManager.Categories.Keyboard, |
| null, 'tristate', |
| `Whether to automatically hide the mouse cursor when typing. ` + |
| `By default, autodetect whether the platform/OS handles this.\n` + |
| `\n` + |
| `Note: Your operating system might override this setting and thus you ` + |
| `might not be able to always disable it.`, |
| ), |
| |
| 'home-keys-scroll': hterm.PreferenceManager.definePref_( |
| 'Home/End key scroll behavior', |
| hterm.PreferenceManager.Categories.Keyboard, |
| false, 'bool', |
| `If true, Home/End controls the terminal scrollbar and Shift+Home/` + |
| `Shift+End are sent to the remote host. If false, then Home/End are ` + |
| `sent to the remote host and Shift+Home/Shift+End scrolls.`, |
| ), |
| |
| 'keybindings': hterm.PreferenceManager.definePref_( |
| 'Keyboard bindings/shortcuts', |
| hterm.PreferenceManager.Categories.Keyboard, |
| null, 'value', |
| `A map of key sequence to key actions. Key sequences include zero or ` + |
| `more modifier keys followed by a key code. Key codes can be decimal ` + |
| `or hexadecimal numbers, or a key identifier. Key actions can be ` + |
| `specified as a string to send to the host, or an action identifier. ` + |
| `For a full explanation of the format, see https://goo.gl/LWRndr.\n` + |
| `\n` + |
| `Sample keybindings:\n` + |
| `{\n` + |
| ` "Ctrl+Alt+K": "clearTerminal",\n` + |
| ` "Ctrl+Shift+L": "PASS",\n` + |
| ` "Ctrl+H": "'Hello World'"\n` + |
| `}`, |
| ), |
| |
| 'keybindings-os-defaults': hterm.PreferenceManager.definePref_( |
| 'Use default OS Keyboard bindings/shortcuts', |
| hterm.PreferenceManager.Categories.Keyboard, |
| false, 'bool', |
| `Whether common OS keyboard bindings should be respected instead of ` + |
| `always capturing for hterm's own use.`, |
| ), |
| |
| 'media-keys-are-fkeys': hterm.PreferenceManager.definePref_( |
| 'Media keys are Fkeys', |
| hterm.PreferenceManager.Categories.Keyboard, |
| false, 'bool', |
| `If true, convert media keys to their Fkey equivalent. If false, let ` + |
| `the browser handle the keys.`, |
| ), |
| |
| 'meta-sends-escape': hterm.PreferenceManager.definePref_( |
| 'Meta key modifier handling', |
| hterm.PreferenceManager.Categories.Keyboard, |
| true, 'bool', |
| `Send an ESC prefix when pressing a key while holding the Meta key.\n` + |
| `\n` + |
| `For example, when enabled, pressing Meta+K will send ^[k as if you ` + |
| `typed Escape then k. When disabled, only k will be sent.`, |
| ), |
| |
| 'mouse-right-click-paste': hterm.PreferenceManager.definePref_( |
| 'Mouse right clicks paste content', |
| hterm.PreferenceManager.Categories.CopyPaste, |
| true, 'bool', |
| `Paste on right mouse button clicks.\n` + |
| `\n` + |
| `This option is independent of the "mouse-paste-button" setting.\n` + |
| `\n` + |
| `Note: The primary & secondary buttons are handled for you with left ` + |
| `& right handed mice.`, |
| ), |
| |
| 'mouse-paste-button': hterm.PreferenceManager.definePref_( |
| 'Mouse button paste', |
| hterm.PreferenceManager.Categories.CopyPaste, |
| null, [null, 0, 1, 2, 3, 4, 5, 6], |
| `The mouse button to use for pasting.\n` + |
| `\n` + |
| `For autodetect, we'll use the middle mouse button for non-X11 ` + |
| `platforms (including Chrome OS). On X11, we'll use the right mouse ` + |
| `button (since the window manager should handle pasting via the middle ` + |
| `mouse button).\n` + |
| `\n` + |
| `0 == left (primary) button.\n` + |
| `1 == middle (auxiliary) button.\n` + |
| `2 == right (secondary) button.\n` + |
| `\n` + |
| `This option is independent of the setting for right-click paste.\n` + |
| `\n` + |
| `Note: The primary & secondary buttons are handled for you with left ` + |
| `& right handed mice.`, |
| ), |
| |
| 'screen-padding-size': hterm.PreferenceManager.definePref_( |
| 'Screen padding size', |
| hterm.PreferenceManager.Categories.Appearance, |
| 8, 'int', |
| `The padding size in pixels around the border of the terminal screen.\n` + |
| `\n` + |
| `This controls the size of the border around the terminal screen so ` + |
| `the user can add some visible padding to the edges of the screen.`, |
| ), |
| |
| 'screen-border-size': hterm.PreferenceManager.definePref_( |
| 'Screen border size', |
| hterm.PreferenceManager.Categories.Appearance, |
| 0, 'int', |
| `The border size in pixels around the terminal screen.\n` + |
| `\n` + |
| `This controls the size of the border around the terminal screen to ` + |
| `create a visible line at the edges of the screen.`, |
| ), |
| |
| 'screen-border-color': hterm.PreferenceManager.definePref_( |
| 'Screen border color', |
| hterm.PreferenceManager.Categories.Appearance, |
| 'rgb(128, 128, 128)', 'color', |
| `The color for the border around the terminal screen.\n` + |
| `\n` + |
| `This controls the color of the border around the terminal screen to ` + |
| `create a visible line at the edges of the screen.`, |
| ), |
| |
| 'word-break-match-left': hterm.PreferenceManager.definePref_( |
| 'Automatic selection halting (to the left)', |
| hterm.PreferenceManager.Categories.CopyPaste, |
| // TODO(vapier): Switch \u back to ‘“‹« once builders are fixed. |
| '[^\\s[\\](){}<>"\'^!@#$%&*,;:`\u{2018}\u{201c}\u{2039}\u{ab}]', 'string', |
| `Regular expression to halt matching to the left (start) of a ` + |
| `selection.\n` + |
| `\n` + |
| `Normally this is a character class to reject specific characters.\n` + |
| `We allow "~" and "." by default as paths frequently start with those.`, |
| ), |
| |
| 'word-break-match-right': hterm.PreferenceManager.definePref_( |
| 'Automatic selection halting (to the right)', |
| hterm.PreferenceManager.Categories.CopyPaste, |
| // TODO(vapier): Switch \u back to ’”›» once builders are fixed. |
| '[^\\s[\\](){}<>"\'^!@#$%&*,;:~.`\u{2019}\u{201d}\u{203a}\u{bb}]', |
| 'string', |
| `Regular expression to halt matching to the right (end) of a ` + |
| `selection.\n` + |
| `\n` + |
| `Normally this is a character class to reject specific characters.`, |
| ), |
| |
| 'word-break-match-middle': hterm.PreferenceManager.definePref_( |
| 'Word break characters', |
| hterm.PreferenceManager.Categories.CopyPaste, |
| '[^\\s[\\](){}<>"\'^]*', 'string', |
| `Regular expression to match all the characters in the middle.\n` + |
| `\n` + |
| `Normally this is a character class to reject specific characters.\n` + |
| `\n` + |
| `Used to expand the selection surrounding the starting point.`, |
| ), |
| |
| 'page-keys-scroll': hterm.PreferenceManager.definePref_( |
| 'Page Up/Down key scroll behavior', |
| hterm.PreferenceManager.Categories.Keyboard, |
| false, 'bool', |
| `If true, Page Up/Page Down controls the terminal scrollbar and ` + |
| `Shift+Page Up/Shift+Page Down are sent to the remote host. If false, ` + |
| `then Page Up/Page Down are sent to the remote host and Shift+Page Up/` + |
| `Shift+Page Down scrolls.`, |
| ), |
| |
| 'pass-alt-number': hterm.PreferenceManager.definePref_( |
| 'Alt+1..9 switch tab/app behavior', |
| hterm.PreferenceManager.Categories.Keyboard, |
| null, 'tristate', |
| `Whether Alt+1..9 is passed to the browser.\n` + |
| `\n` + |
| `This is handy when running hterm in a browser tab, so that you don't ` + |
| `lose Chrome's "switch to tab/app" keyboard shortcuts. When not ` + |
| `running in a tab it's better to send these keys to the host so they ` + |
| `can be used in vim or emacs.\n` + |
| `\n` + |
| `If true, Alt+1..9 will be handled by the browser. If false, Alt+1..9 ` + |
| `will be sent to the host. If null, autodetect based on browser ` + |
| `platform and window type.`, |
| ), |
| |
| 'pass-ctrl-number': hterm.PreferenceManager.definePref_( |
| 'Ctrl+1..9 switch tab behavior', |
| hterm.PreferenceManager.Categories.Keyboard, |
| null, 'tristate', |
| `Whether Ctrl+1..9 is passed to the browser.\n` + |
| `\n` + |
| `This is handy when running hterm in a browser tab, so that you don't ` + |
| `lose Chrome's "switch to tab" keyboard shortcuts. When not running ` + |
| `in a tab it's better to send these keys to the host so they can be ` + |
| `used in vim or emacs.\n` + |
| `\n` + |
| `If true, Ctrl+1..9 will be handled by the browser. If false, ` + |
| `Ctrl+1..9 will be sent to the host. If null, autodetect based on ` + |
| `browser platform and window type.`, |
| ), |
| |
| 'pass-ctrl-n': hterm.PreferenceManager.definePref_( |
| 'Ctrl+N new window behavior', |
| hterm.PreferenceManager.Categories.Keyboard, |
| false, 'bool', |
| `Whether Ctrl+N is passed to the browser.\n` + |
| `\n` + |
| `If true, Ctrl+N will be handled by the browser as the "new window" ` + |
| `keyboard shortcut. If false, Ctrl+N will be sent to the host.`, |
| ), |
| |
| 'pass-ctrl-t': hterm.PreferenceManager.definePref_( |
| 'Ctrl+T new tab behavior', |
| hterm.PreferenceManager.Categories.Keyboard, |
| false, 'bool', |
| `Whether Ctrl+T is passed to the browser.\n` + |
| `\n` + |
| `If true, Ctrl+T will be handled by the browser as the "new tab" ` + |
| `keyboard shortcut. If false, Ctrl+T will be sent to the host.`, |
| ), |
| |
| 'pass-ctrl-tab': hterm.PreferenceManager.definePref_( |
| 'Ctrl+Tab switch tab behavior', |
| hterm.PreferenceManager.Categories.Keyboard, |
| false, 'bool', |
| `Whether Ctrl+Tab and Ctrl+Shift+Tab are passed to the browser.\n` + |
| `\n` + |
| `If true, Ctrl+Tab and Ctrl+Shift+Tab will be handled by the browser ` + |
| `as the "next/previous tab" keyboard shortcut. If false, the Tab ` + |
| `key is sent to the host without Ctrl or Shift.`, |
| ), |
| |
| 'pass-ctrl-w': hterm.PreferenceManager.definePref_( |
| 'Ctrl+W close tab behavior', |
| hterm.PreferenceManager.Categories.Keyboard, |
| false, 'bool', |
| `Whether Ctrl+W is passed to the browser.\n` + |
| `\n` + |
| `If true, Ctrl+W will be handled by the browser as the "close tab" ` + |
| `keyboard shortcut. If false, Ctrl+W will be sent to the host.`, |
| ), |
| |
| 'pass-meta-number': hterm.PreferenceManager.definePref_( |
| 'Meta+1..9 switch tab behavior', |
| hterm.PreferenceManager.Categories.Keyboard, |
| null, 'tristate', |
| `Whether Meta+1..9 is passed to the browser.\n` + |
| `\n` + |
| `This is handy when running hterm in a browser tab, so that you don't ` + |
| `lose Chrome's "switch to tab" keyboard shortcuts. When not running ` + |
| `in a tab it's better to send these keys to the host so they can be ` + |
| `used in vim or emacs.\n` + |
| `\n` + |
| `If true, Meta+1..9 will be handled by the browser. If false, ` + |
| `Meta+1..9 will be sent to the host. If null, autodetect based on ` + |
| `browser platform and window type.`, |
| ), |
| |
| 'pass-meta-v': hterm.PreferenceManager.definePref_( |
| 'Meta+V paste behavior', |
| hterm.PreferenceManager.Categories.Keyboard, |
| true, 'bool', |
| `Whether Meta+V gets passed to the browser.\n` + |
| `\n` + |
| `On some systems, this is used to paste content.`, |
| ), |
| |
| 'paste-on-drop': hterm.PreferenceManager.definePref_( |
| 'Allow drag & drop to paste', |
| hterm.PreferenceManager.Categories.CopyPaste, |
| true, 'bool', |
| `If true, Drag and dropped text will paste into terminal.\n` + |
| `If false, dropped text will be ignored.`, |
| ), |
| |
| 'receive-encoding': hterm.PreferenceManager.definePref_( |
| 'Receive encoding', |
| hterm.PreferenceManager.Categories.Encoding, |
| 'utf-8', ['utf-8', 'raw'], |
| `Set the expected encoding for data received from the host.\n` + |
| `If the encodings do not match, visual bugs are likely to be ` + |
| `observed.\n` + |
| `\n` + |
| `Valid values are 'utf-8' and 'raw'.`, |
| ), |
| |
| 'scroll-on-keystroke': hterm.PreferenceManager.definePref_( |
| 'Scroll to bottom after keystroke', |
| hterm.PreferenceManager.Categories.Scrolling, |
| true, 'bool', |
| `Whether to scroll to the bottom on any keystroke.`, |
| ), |
| |
| 'scroll-on-output': hterm.PreferenceManager.definePref_( |
| 'Scroll to bottom after new output', |
| hterm.PreferenceManager.Categories.Scrolling, |
| false, 'bool', |
| `Whether to scroll to the bottom on terminal output.`, |
| ), |
| |
| 'scrollbar-visible': hterm.PreferenceManager.definePref_( |
| 'Scrollbar visibility', |
| hterm.PreferenceManager.Categories.Scrolling, |
| true, 'bool', |
| `The vertical scrollbar mode.`, |
| ), |
| |
| 'scroll-wheel-may-send-arrow-keys': hterm.PreferenceManager.definePref_( |
| 'Emulate arrow keys with scroll wheel', |
| hterm.PreferenceManager.Categories.Scrolling, |
| false, 'bool', |
| `When using the alternative screen buffer, and DECCKM (Application ` + |
| `Cursor Keys) is active, mouse scroll wheel events will emulate arrow ` + |
| `keys.\n` + |
| `\n` + |
| `It can be temporarily disabled by holding the Shift key.\n` + |
| `\n` + |
| `This frequently comes up when using pagers (less) or reading man ` + |
| `pages or text editors (vi/nano) or using screen/tmux.`, |
| ), |
| |
| 'scroll-wheel-move-multiplier': hterm.PreferenceManager.definePref_( |
| 'Mouse scroll wheel multiplier', |
| hterm.PreferenceManager.Categories.Scrolling, |
| 1, 'int', |
| `The multiplier for mouse scroll wheel events when measured in ` + |
| `pixels.\n` + |
| `\n` + |
| `Alters how fast the page scrolls.`, |
| ), |
| |
| 'terminal-encoding': hterm.PreferenceManager.definePref_( |
| 'Terminal encoding', |
| hterm.PreferenceManager.Categories.Encoding, |
| 'utf-8', ['iso-2022', 'utf-8', 'utf-8-locked'], |
| `The default terminal encoding (DOCS).\n` + |
| `\n` + |
| `ISO-2022 enables character map translations (like graphics maps).\n` + |
| `UTF-8 disables support for those.\n` + |
| `\n` + |
| `The locked variant means the encoding cannot be changed at runtime ` + |
| `via terminal escape sequences.\n` + |
| `\n` + |
| `You should stick with UTF-8 unless you notice broken rendering with ` + |
| `legacy applications.`, |
| ), |
| |
| 'shift-insert-paste': hterm.PreferenceManager.definePref_( |
| 'Shift+Insert paste', |
| hterm.PreferenceManager.Categories.Keyboard, |
| true, 'bool', |
| `Whether Shift+Insert is used for pasting or is sent to the remote host.`, |
| ), |
| |
| 'user-css': hterm.PreferenceManager.definePref_( |
| 'Custom CSS (URI)', |
| hterm.PreferenceManager.Categories.Appearance, |
| '', 'url', |
| `URL of user stylesheet to include in the terminal document.`, |
| ), |
| |
| 'user-css-text': hterm.PreferenceManager.definePref_( |
| 'Custom CSS (inline text)', |
| hterm.PreferenceManager.Categories.Appearance, |
| '', 'multiline-string', |
| `Custom CSS text for styling the terminal.`, |
| ), |
| |
| 'allow-images-inline': hterm.PreferenceManager.definePref_( |
| 'Allow inline image display', |
| hterm.PreferenceManager.Categories.Extensions, |
| null, 'tristate', |
| `Whether to allow the remote host to display images in the terminal.\n` + |
| `\n` + |
| `By default, we prompt until a choice is made.`, |
| ), |
| }; |
| |
| hterm.PreferenceManager.prototype = |
| Object.create(lib.PreferenceManager.prototype); |
| /** @override */ |
| hterm.PreferenceManager.constructor = hterm.PreferenceManager; |