]> git.proxmox.com Git - mirror_xterm.js.git/blob - dist/xterm.js.map
d3ba6b45bef5dc34e5cf87fc00d596e73b6dae5e
[mirror_xterm.js.git] / dist / xterm.js.map
1 {
2 "version": 3,
3 "sources": [
4 "node_modules/browser-pack/_prelude.js",
5 "src/CompositionHelper.js",
6 "src/EventEmitter.js",
7 "src/Viewport.js",
8 "src/handlers/Clipboard.js",
9 "src/utils/Browser.js",
10 "src/utils/Generic.js",
11 "src/xterm.js"
12 ],
13 "names": [],
14 "mappings": "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,KAAK,MAArB,EACA,MAEF;AACA;AACA,IAAK,GAAL,CACE,KAAK,aAAL,CAAmB,KAAK,MAAxB,EACA,MAEA;;eAIF;AACA;AACA,IAAK,GAAL,CACE,KAAK,gBAAL,CAAsB,KAAK,MAA3B,EACA,MAEF;AACA,IAAK,GAAL,CACE,KAAK,QAAL,CAAc,KAAK,MAAnB,EACA,MAEF;AACA;AACA;AACA,IAAK,GAAL,CACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAI,KAAK,MAAL,CAAY,MAAZ,CAAqB,CAArB,EAA0B,CAAC,KAAK,MAApC,CAA4C,CAC1C,KAAK,UAAL,CAAgB,KAAK,MAArB,EACD,CACD,MAEF;AACA;AACA,IAAK,GAAL,CACE,KAAK,iBAAL,CAAuB,KAAK,MAA5B,EACA,MAEF;AACA,IAAK,GAAL,CACE,KAAK,wBAAL,CAA8B,KAAK,MAAnC,EACA,MAEF;AACA,IAAK,GAAL,CACE,KAAK,QAAL,CAAc,KAAK,MAAnB,EACA,MAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,IAAK,GAAL,CACE,OAAQ,KAAK,MAAb,EACI;AACA;AACA;AACF,IAAK,GAAL,CACE,KAAK,SAAL,CAAe,KAAK,MAApB,EACA,MACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAlBJ,CAoBA,MAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC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",
15 "file": "generated.js",
16 "sourceRoot": "",
17 "sourcesContent": [
18 "(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})",
19 "/**\n * xterm.js: xterm, in the browser\n * Copyright (c) 2014-2016, SourceLair Private Company (www.sourcelair.com (MIT License)\n */\n\n/**\n * Encapsulates the logic for handling compositionstart, compositionupdate and compositionend\n * events, displaying the in-progress composition to the UI and forwarding the final composition\n * to the handler.\n * @param {HTMLTextAreaElement} textarea The textarea that xterm uses for input.\n * @param {HTMLElement} compositionView The element to display the in-progress composition in.\n * @param {Terminal} terminal The Terminal to forward the finished composition to.\n */\nfunction CompositionHelper(textarea, compositionView, terminal) {\n this.textarea = textarea;\n this.compositionView = compositionView;\n this.terminal = terminal;\n\n // Whether input composition is currently happening, eg. via a mobile keyboard, speech input\n // or IME. This variable determines whether the compositionText should be displayed on the UI.\n this.isComposing = false;\n\n // The input currently being composed, eg. via a mobile keyboard, speech input or IME.\n this.compositionText = null;\n\n // The position within the input textarea's value of the current composition.\n this.compositionPosition = { start: null, end: null };\n\n // Whether a composition is in the process of being sent, setting this to false will cancel\n // any in-progress composition.\n this.isSendingComposition = false;\n}\n\n/**\n * Handles the compositionstart event, activating the composition view.\n */\nCompositionHelper.prototype.compositionstart = function() {\n this.isComposing = true;\n this.compositionPosition.start = this.textarea.value.length;\n this.compositionView.textContent = '';\n this.compositionView.classList.add('active');\n};\n\n/**\n * Handles the compositionupdate event, updating the composition view.\n * @param {CompositionEvent} ev The event.\n */\nCompositionHelper.prototype.compositionupdate = function(ev) {\n this.compositionView.textContent = ev.data;\n this.updateCompositionElements();\n var self = this;\n setTimeout(function() {\n self.compositionPosition.end = self.textarea.value.length;\n }, 0);\n};\n\n/**\n * Handles the compositionend event, hiding the composition view and sending the composition to\n * the handler.\n */\nCompositionHelper.prototype.compositionend = function() {\n this.finalizeComposition(true);\n};\n\n/**\n * Handles the keydown event, routing any necessary events to the CompositionHelper functions.\n * @return Whether the Terminal should continue processing the keydown event.\n */\nCompositionHelper.prototype.keydown = function(ev) {\n if (this.isComposing || this.isSendingComposition) {\n if (ev.keyCode === 229) {\n // Continue composing if the keyCode is the \"composition character\"\n return false;\n } else if (ev.keyCode === 16 || ev.keyCode === 17 || ev.keyCode === 18) {\n // Continue composing if the keyCode is a modifier key\n return false;\n } else {\n // Finish composition immediately. This is mainly here for the case where enter is\n // pressed and the handler needs to be triggered before the command is executed.\n this.finalizeComposition(false);\n }\n }\n\n if (ev.keyCode === 229) {\n // If the \"composition character\" is used but gets to this point it means a non-composition\n // character (eg. numbers and punctuation) was pressed when the IME was active.\n this.handleAnyTextareaChanges();\n return false;\n }\n\n return true;\n};\n\n/**\n * Finalizes the composition, resuming regular input actions. This is called when a composition\n * is ending.\n * @param {boolean} waitForPropogation Whether to wait for events to propogate before sending\n * the input. This should be false if a non-composition keystroke is entered before the\n * compositionend event is triggered, such as enter, so that the composition is send before\n * the command is executed.\n */\nCompositionHelper.prototype.finalizeComposition = function(waitForPropogation) {\n this.compositionView.classList.remove('active');\n this.isComposing = false;\n this.clearTextareaPosition();\n\n if (!waitForPropogation) {\n // Cancel any delayed composition send requests and send the input immediately.\n this.isSendingComposition = false;\n var input = this.textarea.value.substring(this.compositionPosition.start, this.compositionPosition.end);\n this.terminal.handler(input);\n } else {\n // Make a deep copy of the composition position here as a new compositionstart event may\n // fire before the setTimeout executes.\n var currentCompositionPosition = {\n start: this.compositionPosition.start,\n end: this.compositionPosition.end,\n }\n\n // Since composition* events happen before the changes take place in the textarea on most\n // browsers, use a setTimeout with 0ms time to allow the native compositionend event to\n // complete. This ensures the correct character is retrieved, this solution was used\n // because:\n // - The compositionend event's data property is unreliable, at least on Chromium\n // - The last compositionupdate event's data property does not always accurately describe\n // the character, a counter example being Korean where an ending consonsant can move to\n // the following character if the following input is a vowel.\n var self = this;\n this.isSendingComposition = true;\n setTimeout(function () {\n // Ensure that the input has not already been sent\n if (self.isSendingComposition) {\n self.isSendingComposition = false;\n var input;\n if (self.isComposing) {\n // Use the end position to get the string if a new composition has started.\n input = self.textarea.value.substring(currentCompositionPosition.start, currentCompositionPosition.end);\n } else {\n // Don't use the end position here in order to pick up any characters after the\n // composition has finished, for example when typing a non-composition character\n // (eg. 2) after a composition character.\n input = self.textarea.value.substring(currentCompositionPosition.start);\n }\n self.terminal.handler(input);\n }\n }, 0);\n }\n};\n\n/**\n * Apply any changes made to the textarea after the current event chain is allowed to complete.\n * This should be called when not currently composing but a keydown event with the \"composition\n * character\" (229) is triggered, in order to allow non-composition text to be entered when an\n * IME is active.\n */\nCompositionHelper.prototype.handleAnyTextareaChanges = function() {\n var oldValue = this.textarea.value;\n var self = this;\n setTimeout(function() {\n // Ignore if a composition has started since the timeout\n if (!self.isComposing) {\n var newValue = self.textarea.value;\n var diff = newValue.replace(oldValue, '');\n if (diff.length > 0) {\n self.terminal.handler(diff);\n }\n }\n }, 0);\n};\n\n/**\n * Positions the composition view on top of the cursor and the textarea just below it (so the\n * IME helper dialog is positioned correctly).\n */\nCompositionHelper.prototype.updateCompositionElements = function(dontRecurse) {\n if (!this.isComposing) {\n return;\n }\n var cursor = this.terminal.element.querySelector('.terminal-cursor');\n if (cursor) {\n // Take .xterm-rows offsetTop into account as well in case it's positioned absolutely within\n // the .xterm element.\n var xtermRows = this.terminal.element.querySelector('.xterm-rows');\n var cursorTop = xtermRows.offsetTop + cursor.offsetTop;\n\n this.compositionView.style.left = cursor.offsetLeft + 'px';\n this.compositionView.style.top = cursorTop + 'px';\n this.compositionView.style.height = cursor.offsetHeight + 'px';\n this.compositionView.style.lineHeight = cursor.offsetHeight + 'px';\n // Sync the textarea to the exact position of the composition view so the IME knows where the\n // text is.\n var compositionViewBounds = this.compositionView.getBoundingClientRect();\n this.textarea.style.left = cursor.offsetLeft + 'px';\n this.textarea.style.top = cursorTop + 'px';\n this.textarea.style.width = compositionViewBounds.width + 'px';\n this.textarea.style.height = compositionViewBounds.height + 'px';\n this.textarea.style.lineHeight = compositionViewBounds.height + 'px';\n }\n if (!dontRecurse) {\n setTimeout(this.updateCompositionElements.bind(this, true), 0);\n }\n};\n\n/**\n * Clears the textarea's position so that the cursor does not blink on IE.\n * @private\n */\nCompositionHelper.prototype.clearTextareaPosition = function() {\n this.textarea.style.left = '';\n this.textarea.style.top = '';\n};\n\nexport { CompositionHelper };\n",
20 "/**\n * xterm.js: xterm, in the browser\n * Copyright (c) 2014-2016, SourceLair Private Company (www.sourcelair.com (MIT License)\n */\n\nfunction EventEmitter() {\n this._events = this._events || {};\n}\n\nEventEmitter.prototype.addListener = function(type, listener) {\n this._events[type] = this._events[type] || [];\n this._events[type].push(listener);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.removeListener = function(type, listener) {\n if (!this._events[type]) return;\n\n var obj = this._events[type]\n , i = obj.length;\n\n while (i--) {\n if (obj[i] === listener || obj[i].listener === listener) {\n obj.splice(i, 1);\n return;\n }\n }\n};\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n if (this._events[type]) delete this._events[type];\n};\n\nEventEmitter.prototype.once = function(type, listener) {\n var self = this;\n function on() {\n var args = Array.prototype.slice.call(arguments);\n this.removeListener(type, on);\n return listener.apply(this, args);\n }\n on.listener = listener;\n return this.on(type, on);\n};\n\nEventEmitter.prototype.emit = function(type) {\n if (!this._events[type]) return;\n\n var args = Array.prototype.slice.call(arguments, 1)\n , obj = this._events[type]\n , l = obj.length\n , i = 0;\n\n for (; i < l; i++) {\n obj[i].apply(this, args);\n }\n};\n\nEventEmitter.prototype.listeners = function(type) {\n return this._events[type] = this._events[type] || [];\n};\n\nexport { EventEmitter };\n",
21 "/**\n * xterm.js: xterm, in the browser\n * Copyright (c) 2014-2016, SourceLair Private Company (www.sourcelair.com (MIT License)\n */\n\n/**\n * Represents the viewport of a terminal, the visible area within the larger buffer of output.\n * Logic for the virtual scroll bar is included in this object.\n * @param {Terminal} terminal The Terminal object.\n * @param {HTMLElement} viewportElement The DOM element acting as the viewport\n * @param {HTMLElement} charMeasureElement A DOM element used to measure the character size of\n * the terminal.\n */\nfunction Viewport(terminal, viewportElement, scrollArea, charMeasureElement) {\n this.terminal = terminal;\n this.viewportElement = viewportElement;\n this.scrollArea = scrollArea;\n this.charMeasureElement = charMeasureElement;\n this.currentRowHeight = 0;\n this.lastRecordedBufferLength = 0;\n this.lastRecordedViewportHeight = 0;\n\n this.terminal.on('scroll', this.syncScrollArea.bind(this));\n this.terminal.on('resize', this.syncScrollArea.bind(this));\n this.viewportElement.addEventListener('scroll', this.onScroll.bind(this));\n\n this.syncScrollArea();\n}\n\n/**\n * Refreshes row height, setting line-height, viewport height and scroll area height if\n * necessary.\n * @param {number|undefined} charSize A character size measurement bounding rect object, if it\n * doesn't exist it will be created.\n */\nViewport.prototype.refresh = function(charSize) {\n var size = charSize || this.charMeasureElement.getBoundingClientRect();\n if (size.height > 0) {\n var rowHeightChanged = size.height !== this.currentRowHeight;\n if (rowHeightChanged) {\n this.currentRowHeight = size.height;\n this.viewportElement.style.lineHeight = size.height + 'px';\n this.terminal.rowContainer.style.lineHeight = size.height + 'px';\n }\n var viewportHeightChanged = this.lastRecordedViewportHeight !== this.terminal.rows;\n if (rowHeightChanged || viewportHeightChanged) {\n this.lastRecordedViewportHeight = this.terminal.rows;\n this.viewportElement.style.height = size.height * this.terminal.rows + 'px';\n }\n this.scrollArea.style.height = (size.height * this.lastRecordedBufferLength) + 'px';\n }\n};\n\n/**\n * Updates dimensions and synchronizes the scroll area if necessary.\n */\nViewport.prototype.syncScrollArea = function() {\n if (this.lastRecordedBufferLength !== this.terminal.lines.length) {\n // If buffer height changed\n this.lastRecordedBufferLength = this.terminal.lines.length;\n this.refresh();\n } else if (this.lastRecordedViewportHeight !== this.terminal.rows) {\n // If viewport height changed\n this.refresh();\n } else {\n // If size has changed, refresh viewport\n var size = this.charMeasureElement.getBoundingClientRect();\n if (size.height !== this.currentRowHeight) {\n this.refresh(size);\n }\n }\n\n // Sync scrollTop\n var scrollTop = this.terminal.ydisp * this.currentRowHeight;\n if (this.viewportElement.scrollTop !== scrollTop) {\n this.viewportElement.scrollTop = scrollTop;\n }\n};\n\n/**\n * Handles scroll events on the viewport, calculating the new viewport and requesting the\n * terminal to scroll to it.\n * @param {Event} ev The scroll event.\n */\nViewport.prototype.onScroll = function(ev) {\n var newRow = Math.round(this.viewportElement.scrollTop / this.currentRowHeight);\n var diff = newRow - this.terminal.ydisp;\n this.terminal.scrollDisp(diff, true);\n};\n\n/**\n * Handles mouse wheel events by adjusting the viewport's scrollTop and delegating the actual\n * scrolling to `onScroll`, this event needs to be attached manually by the consumer of\n * `Viewport`.\n * @param {WheelEvent} ev The mouse wheel event.\n */\nViewport.prototype.onWheel = function(ev) {\n if (ev.deltaY === 0) {\n // Do nothing if it's not a vertical scroll event\n return;\n }\n // Fallback to WheelEvent.DOM_DELTA_PIXEL\n var multiplier = 1;\n if (ev.deltaMode === WheelEvent.DOM_DELTA_LINE) {\n multiplier = this.currentRowHeight;\n } else if (ev.deltaMode === WheelEvent.DOM_DELTA_PAGE) {\n multiplier = this.currentRowHeight * this.terminal.rows;\n }\n this.viewportElement.scrollTop += ev.deltaY * multiplier;\n // Prevent the page from scrolling when the terminal scrolls\n ev.preventDefault();\n};\n\nexport { Viewport };\n",
22 "/**\n * xterm.js: xterm, in the browser\n * Copyright (c) 2016, SourceLair Private Company <www.sourcelair.com> (MIT License)\n */\n\n/**\n * Clipboard handler module. This module contains methods for handling all\n * clipboard-related events appropriately in the terminal.\n * @module xterm/handlers/Clipboard\n */\n\n/**\n * Prepares text copied from terminal selection, to be saved in the clipboard by:\n * 1. stripping all trailing white spaces\n * 2. converting all non-breaking spaces to regular spaces\n * @param {string} text The copied text that needs processing for storing in clipboard\n * @returns {string}\n */\nfunction prepareTextForClipboard(text) {\n var space = String.fromCharCode(32),\n nonBreakingSpace = String.fromCharCode(160),\n allNonBreakingSpaces = new RegExp(nonBreakingSpace, 'g'),\n processedText = text.split('\\n').map(function (line) {\n // Strip all trailing white spaces and convert all non-breaking spaces\n // to regular spaces.\n var processedLine = line.replace(/\\s+$/g, '').replace(allNonBreakingSpaces, space);\n\n return processedLine;\n }).join('\\n');\n\n return processedText;\n}\n\n/**\n * Binds copy functionality to the given terminal.\n * @param {ClipboardEvent} ev The original copy event to be handled\n */\nfunction copyHandler(ev, term) {\n var copiedText = window.getSelection().toString(),\n text = prepareTextForClipboard(copiedText);\n\n if (term.browser.isMSIE) {\n window.clipboardData.setData('Text', text);\n } else {\n ev.clipboardData.setData('text/plain', text);\n }\n\n ev.preventDefault(); // Prevent or the original text will be copied.\n}\n\n/**\n * Redirect the clipboard's data to the terminal's input handler.\n * @param {ClipboardEvent} ev The original paste event to be handled\n * @param {Terminal} term The terminal on which to apply the handled paste event\n */\nfunction pasteHandler(ev, term) {\n ev.stopPropagation();\n\n var dispatchPaste = function(text) {\n term.handler(text);\n term.textarea.value = '';\n return term.cancel(ev);\n };\n\n if (term.browser.isMSIE) {\n if (window.clipboardData) {\n var text = window.clipboardData.getData('Text');\n dispatchPaste(text);\n }\n } else {\n if (ev.clipboardData) {\n var text = ev.clipboardData.getData('text/plain');\n dispatchPaste(text);\n }\n }\n}\n\n/**\n * Bind to right-click event and allow right-click copy and paste.\n *\n * **Logic**\n * If text is selected and right-click happens on selected text, then\n * do nothing to allow seamless copying.\n * If no text is selected or right-click is outside of the selection\n * area, then bring the terminal's input below the cursor, in order to\n * trigger the event on the textarea and allow-right click paste, without\n * caring about disappearing selection.\n * @param {ClipboardEvent} ev The original paste event to be handled\n * @param {Terminal} term The terminal on which to apply the handled paste event\n */\nfunction rightClickHandler(ev, term) {\n var s = document.getSelection(),\n selectedText = prepareTextForClipboard(s.toString()),\n clickIsOnSelection = false;\n\n if (s.rangeCount) {\n var r = s.getRangeAt(0),\n cr = r.getClientRects(),\n x = ev.clientX,\n y = ev.clientY,\n i, rect;\n\n for (i=0; i<cr.length; i++) {\n rect = cr[i];\n clickIsOnSelection = (\n (x > rect.left) && (x < rect.right) &&\n (y > rect.top) && (y < rect.bottom)\n );\n\n if (clickIsOnSelection) {\n break;\n }\n }\n // If we clicked on selection and selection is not a single space,\n // then mark the right click as copy-only. We check for the single\n // space selection, as this can happen when clicking on an &nbsp;\n // and there is not much pointing in copying a single space.\n if (selectedText.match(/^\\s$/) || !selectedText.length) {\n clickIsOnSelection = false;\n }\n }\n\n // Bring textarea at the cursor position\n if (!clickIsOnSelection) {\n term.textarea.style.position = 'fixed';\n term.textarea.style.width = '20px';\n term.textarea.style.height = '20px';\n term.textarea.style.left = (x - 10) + 'px';\n term.textarea.style.top = (y - 10) + 'px';\n term.textarea.style.zIndex = 1000;\n term.textarea.focus();\n\n // Reset the terminal textarea's styling\n setTimeout(function () {\n term.textarea.style.position = null;\n term.textarea.style.width = null;\n term.textarea.style.height = null;\n term.textarea.style.left = null;\n term.textarea.style.top = null;\n term.textarea.style.zIndex = null;\n }, 4);\n }\n}\n\nexport {\n prepareTextForClipboard, copyHandler, pasteHandler, rightClickHandler\n};\n",
23 "/**\n * xterm.js: xterm, in the browser\n * Copyright (c) 2016, SourceLair Private Company <www.sourcelair.com> (MIT License)\n */\n\n/**\n * Browser utilities module. This module contains attributes and methods to help with\n * identifying the current browser and platform.\n * @module xterm/utils/Browser\n */\n\nimport { contains } from './Generic.js';\n\nlet isNode = (typeof navigator == 'undefined') ? true : false;\nlet userAgent = (isNode) ? 'node' : navigator.userAgent;\nlet platform = (isNode) ? 'node' : navigator.platform;\n\nexport let isFirefox = !!~userAgent.indexOf('Firefox');\nexport let isMSIE = !!~userAgent.indexOf('MSIE') || !!~userAgent.indexOf('Trident');\n\n// Find the users platform. We use this to interpret the meta key\n// and ISO third level shifts.\n// http://stackoverflow.com/q/19877924/577598\nexport let isMac = contains(['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'], platform);\nexport let isIpad = platform === 'iPad';\nexport let isIphone = platform === 'iPhone';\nexport let isMSWindows = contains(['Windows', 'Win16', 'Win32', 'WinCE'], platform);\n",
24 "/**\n * xterm.js: xterm, in the browser\n * Copyright (c) 2016, SourceLair Private Company <www.sourcelair.com> (MIT License)\n */\n\n/**\n * Generic utilities module. This module contains generic methods that can be helpful at\n * different parts of the code base.\n * @module xterm/utils/Generic\n */\n\n/**\n * Return if the given array contains the given element\n * @param {Array} array The array to search for the given element.\n * @param {Object} el The element to look for into the array\n */\nexport let contains = function(arr, el) {\n return arr.indexOf(el) >= 0;\n};\n",
25 "/**\n * xterm.js: xterm, in the browser\n * Copyright (c) 2014-2014, SourceLair Private Company <www.sourcelair.com> (MIT License)\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * https://github.com/chjj/term.js\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *\n * Originally forked from (with the author's permission):\n * Fabrice Bellard's javascript vt100 for jslinux:\n * http://bellard.org/jslinux/\n * Copyright (c) 2011 Fabrice Bellard\n * The original design remains. The terminal itself\n * has been extended to include xterm CSI codes, among\n * other features.\n */\n\nimport { CompositionHelper } from './CompositionHelper.js';\nimport { EventEmitter } from './EventEmitter.js';\nimport { Viewport } from './Viewport.js';\nimport { rightClickHandler, pasteHandler, copyHandler } from './handlers/Clipboard.js';\nimport * as Browser from './utils/Browser';\n\n/**\n * Terminal Emulation References:\n * http://vt100.net/\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.txt\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.html\n * http://invisible-island.net/vttest/\n * http://www.inwap.com/pdp10/ansicode.txt\n * http://linux.die.net/man/4/console_codes\n * http://linux.die.net/man/7/urxvt\n */\n\n// Let it work inside Node.js for automated testing purposes.\nvar document = (typeof window != 'undefined') ? window.document : null;\n\n/**\n * States\n */\nvar normal = 0, escaped = 1, csi = 2, osc = 3, charset = 4, dcs = 5, ignore = 6;\n\n/**\n * Terminal\n */\n\n/**\n * Creates a new `Terminal` object.\n *\n * @param {object} options An object containing a set of options, the available options are:\n * - `cursorBlink` (boolean): Whether the terminal cursor blinks\n * - `cols` (number): The number of columns of the terminal (horizontal size)\n * - `rows` (number): The number of rows of the terminal (vertical size)\n *\n * @public\n * @class Xterm Xterm\n * @alias module:xterm/src/xterm\n */\nfunction Terminal(options) {\n var self = this;\n\n if (!(this instanceof Terminal)) {\n return new Terminal(arguments[0], arguments[1], arguments[2]);\n }\n\n self.browser = Browser;\n self.cancel = Terminal.cancel;\n\n EventEmitter.call(this);\n\n if (typeof options === 'number') {\n options = {\n cols: arguments[0],\n rows: arguments[1],\n handler: arguments[2]\n };\n }\n\n options = options || {};\n\n\n Object.keys(Terminal.defaults).forEach(function(key) {\n if (options[key] == null) {\n options[key] = Terminal.options[key];\n\n if (Terminal[key] !== Terminal.defaults[key]) {\n options[key] = Terminal[key];\n }\n }\n self[key] = options[key];\n });\n\n if (options.colors.length === 8) {\n options.colors = options.colors.concat(Terminal._colors.slice(8));\n } else if (options.colors.length === 16) {\n options.colors = options.colors.concat(Terminal._colors.slice(16));\n } else if (options.colors.length === 10) {\n options.colors = options.colors.slice(0, -2).concat(\n Terminal._colors.slice(8, -2), options.colors.slice(-2));\n } else if (options.colors.length === 18) {\n options.colors = options.colors.concat(\n Terminal._colors.slice(16, -2), options.colors.slice(-2));\n }\n this.colors = options.colors;\n\n this.options = options;\n\n // this.context = options.context || window;\n // this.document = options.document || document;\n this.parent = options.body || options.parent || (\n document ? document.getElementsByTagName('body')[0] : null\n );\n\n this.cols = options.cols || options.geometry[0];\n this.rows = options.rows || options.geometry[1];\n this.geometry = [this.cols, this.rows];\n\n if (options.handler) {\n this.on('data', options.handler);\n }\n\n /**\n * The scroll position of the y cursor, ie. ybase + y = the y position within the entire\n * buffer\n */\n this.ybase = 0;\n\n /**\n * The scroll position of the viewport\n */\n this.ydisp = 0;\n\n /**\n * The cursor's x position after ybase\n */\n this.x = 0;\n\n /**\n * The cursor's y position after ybase\n */\n this.y = 0;\n\n /**\n * Used to debounce the refresh function\n */\n this.isRefreshing = false;\n\n /**\n * Whether there is a full terminal refresh queued\n */\n\n this.cursorState = 0;\n this.cursorHidden = false;\n this.convertEol;\n this.state = 0;\n this.queue = '';\n this.scrollTop = 0;\n this.scrollBottom = this.rows - 1;\n this.customKeydownHandler = null;\n\n // modes\n this.applicationKeypad = false;\n this.applicationCursor = false;\n this.originMode = false;\n this.insertMode = false;\n this.wraparoundMode = true; // defaults: xterm - true, vt100 - false\n this.normal = null;\n\n // charset\n this.charset = null;\n this.gcharset = null;\n this.glevel = 0;\n this.charsets = [null];\n\n // mouse properties\n this.decLocator;\n this.x10Mouse;\n this.vt200Mouse;\n this.vt300Mouse;\n this.normalMouse;\n this.mouseEvents;\n this.sendFocus;\n this.utfMouse;\n this.sgrMouse;\n this.urxvtMouse;\n\n // misc\n this.element;\n this.children;\n this.refreshStart;\n this.refreshEnd;\n this.savedX;\n this.savedY;\n this.savedCols;\n\n // stream\n this.readable = true;\n this.writable = true;\n\n this.defAttr = (0 << 18) | (257 << 9) | (256 << 0);\n this.curAttr = this.defAttr;\n\n this.params = [];\n this.currentParam = 0;\n this.prefix = '';\n this.postfix = '';\n\n // leftover surrogate high from previous write invocation\n this.surrogate_high = '';\n\n /**\n * An array of all lines in the entire buffer, including the prompt. The lines are array of\n * characters which are 2-length arrays where [0] is an attribute and [1] is the character.\n */\n this.lines = [];\n var i = this.rows;\n while (i--) {\n this.lines.push(this.blankLine());\n }\n\n this.tabs;\n this.setupStops();\n\n // Store if user went browsing history in scrollback\n this.userScrolling = false;\n}\n\ninherits(Terminal, EventEmitter);\n\n/**\n * back_color_erase feature for xterm.\n */\nTerminal.prototype.eraseAttr = function() {\n // if (this.is('screen')) return this.defAttr;\n return (this.defAttr & ~0x1ff) | (this.curAttr & 0x1ff);\n};\n\n/**\n * Colors\n */\n\n// Colors 0-15\nTerminal.tangoColors = [\n // dark:\n '#2e3436',\n '#cc0000',\n '#4e9a06',\n '#c4a000',\n '#3465a4',\n '#75507b',\n '#06989a',\n '#d3d7cf',\n // bright:\n '#555753',\n '#ef2929',\n '#8ae234',\n '#fce94f',\n '#729fcf',\n '#ad7fa8',\n '#34e2e2',\n '#eeeeec'\n];\n\n// Colors 0-15 + 16-255\n// Much thanks to TooTallNate for writing this.\nTerminal.colors = (function() {\n var colors = Terminal.tangoColors.slice()\n , r = [0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff]\n , i;\n\n // 16-231\n i = 0;\n for (; i < 216; i++) {\n out(r[(i / 36) % 6 | 0], r[(i / 6) % 6 | 0], r[i % 6]);\n }\n\n // 232-255 (grey)\n i = 0;\n for (; i < 24; i++) {\n r = 8 + i * 10;\n out(r, r, r);\n }\n\n function out(r, g, b) {\n colors.push('#' + hex(r) + hex(g) + hex(b));\n }\n\n function hex(c) {\n c = c.toString(16);\n return c.length < 2 ? '0' + c : c;\n }\n\n return colors;\n})();\n\nTerminal._colors = Terminal.colors.slice();\n\nTerminal.vcolors = (function() {\n var out = []\n , colors = Terminal.colors\n , i = 0\n , color;\n\n for (; i < 256; i++) {\n color = parseInt(colors[i].substring(1), 16);\n out.push([\n (color >> 16) & 0xff,\n (color >> 8) & 0xff,\n color & 0xff\n ]);\n }\n\n return out;\n})();\n\n/**\n * Options\n */\n\nTerminal.defaults = {\n colors: Terminal.colors,\n theme: 'default',\n convertEol: false,\n termName: 'xterm',\n geometry: [80, 24],\n cursorBlink: false,\n visualBell: false,\n popOnBell: false,\n scrollback: 1000,\n screenKeys: false,\n debug: false,\n cancelEvents: false\n // programFeatures: false,\n // focusKeys: false,\n};\n\nTerminal.options = {};\n\nTerminal.focus = null;\n\neach(keys(Terminal.defaults), function(key) {\n Terminal[key] = Terminal.defaults[key];\n Terminal.options[key] = Terminal.defaults[key];\n});\n\n/**\n * Focus the terminal. Delegates focus handling to the terminal's DOM element.\n */\nTerminal.prototype.focus = function() {\n return this.textarea.focus();\n};\n\n/**\n * Retrieves an option's value from the terminal.\n * @param {string} key The option key.\n */\nTerminal.prototype.getOption = function(key, value) {\n if (!(key in Terminal.defaults)) {\n throw new Error('No option with key \"' + key + '\"');\n }\n\n if (typeof this.options[key] !== 'undefined') {\n return this.options[key];\n }\n\n return this[key];\n};\n\n/**\n * Sets an option on the terminal.\n * @param {string} key The option key.\n * @param {string} value The option value.\n */\nTerminal.prototype.setOption = function(key, value) {\n if (!(key in Terminal.defaults)) {\n throw new Error('No option with key \"' + key + '\"');\n }\n this[key] = value;\n this.options[key] = value;\n};\n\n/**\n * Binds the desired focus behavior on a given terminal object.\n *\n * @static\n */\nTerminal.bindFocus = function (term) {\n on(term.textarea, 'focus', function (ev) {\n if (term.sendFocus) {\n term.send('\\x1b[I');\n }\n term.element.classList.add('focus');\n term.showCursor();\n Terminal.focus = term;\n term.emit('focus', {terminal: term});\n });\n};\n\n/**\n * Blur the terminal. Delegates blur handling to the terminal's DOM element.\n */\nTerminal.prototype.blur = function() {\n return this.textarea.blur();\n};\n\n/**\n * Binds the desired blur behavior on a given terminal object.\n *\n * @static\n */\nTerminal.bindBlur = function (term) {\n on(term.textarea, 'blur', function (ev) {\n term.refresh(term.y, term.y);\n if (term.sendFocus) {\n term.send('\\x1b[O');\n }\n term.element.classList.remove('focus');\n Terminal.focus = null;\n term.emit('blur', {terminal: term});\n });\n};\n\n/**\n * Initialize default behavior\n */\nTerminal.prototype.initGlobal = function() {\n var term = this;\n\n Terminal.bindKeys(this);\n Terminal.bindFocus(this);\n Terminal.bindBlur(this);\n\n // Bind clipboard functionality\n on(this.element, 'copy', function (ev) {\n copyHandler.call(this, ev, term);\n });\n on(this.textarea, 'paste', function (ev) {\n pasteHandler.call(this, ev, term);\n });\n\n function rightClickHandlerWrapper (ev) {\n rightClickHandler.call(this, ev, term);\n }\n\n if (term.browser.isFirefox) {\n on(this.element, 'mousedown', function (ev) {\n if (ev.button == 2) {\n rightClickHandlerWrapper(ev);\n }\n });\n } else {\n on(this.element, 'contextmenu', rightClickHandlerWrapper);\n }\n};\n\n/**\n * Apply key handling to the terminal\n */\nTerminal.bindKeys = function(term) {\n on(term.element, 'keydown', function(ev) {\n if (document.activeElement != this) {\n return;\n }\n term.keyDown(ev);\n }, true);\n\n on(term.element, 'keypress', function(ev) {\n if (document.activeElement != this) {\n return;\n }\n term.keyPress(ev);\n }, true);\n\n on(term.element, 'keyup', term.focus.bind(term));\n\n on(term.textarea, 'keydown', function(ev) {\n term.keyDown(ev);\n }, true);\n\n on(term.textarea, 'keypress', function(ev) {\n term.keyPress(ev);\n // Truncate the textarea's value, since it is not needed\n this.value = '';\n }, true);\n\n on(term.textarea, 'compositionstart', term.compositionHelper.compositionstart.bind(term.compositionHelper));\n on(term.textarea, 'compositionupdate', term.compositionHelper.compositionupdate.bind(term.compositionHelper));\n on(term.textarea, 'compositionend', term.compositionHelper.compositionend.bind(term.compositionHelper));\n term.on('refresh', term.compositionHelper.updateCompositionElements.bind(term.compositionHelper));\n};\n\n\n/**\n * Insert the given row to the terminal or produce a new one\n * if no row argument is passed. Return the inserted row.\n * @param {HTMLElement} row (optional) The row to append to the terminal.\n */\nTerminal.prototype.insertRow = function (row) {\n if (typeof row != 'object') {\n row = document.createElement('div');\n }\n\n this.rowContainer.appendChild(row);\n this.children.push(row);\n\n return row;\n};\n\n/**\n * Opens the terminal within an element.\n *\n * @param {HTMLElement} parent The element to create the terminal within.\n */\nTerminal.prototype.open = function(parent) {\n var self=this, i=0, div;\n\n this.parent = parent || this.parent;\n\n if (!this.parent) {\n throw new Error('Terminal requires a parent element.');\n }\n\n // Grab global elements\n this.context = this.parent.ownerDocument.defaultView;\n this.document = this.parent.ownerDocument;\n this.body = this.document.getElementsByTagName('body')[0];\n\n //Create main element container\n this.element = this.document.createElement('div');\n this.element.classList.add('terminal');\n this.element.classList.add('xterm');\n this.element.classList.add('xterm-theme-' + this.theme);\n\n this.element.style.height\n this.element.setAttribute('tabindex', 0);\n\n this.viewportElement = document.createElement('div');\n this.viewportElement.classList.add('xterm-viewport');\n this.element.appendChild(this.viewportElement);\n this.viewportScrollArea = document.createElement('div');\n this.viewportScrollArea.classList.add('xterm-scroll-area');\n this.viewportElement.appendChild(this.viewportScrollArea);\n\n // Create the container that will hold the lines of the terminal and then\n // produce the lines the lines.\n this.rowContainer = document.createElement('div');\n this.rowContainer.classList.add('xterm-rows');\n this.element.appendChild(this.rowContainer);\n this.children = [];\n\n // Create the container that will hold helpers like the textarea for\n // capturing DOM Events. Then produce the helpers.\n this.helperContainer = document.createElement('div');\n this.helperContainer.classList.add('xterm-helpers');\n // TODO: This should probably be inserted once it's filled to prevent an additional layout\n this.element.appendChild(this.helperContainer);\n this.textarea = document.createElement('textarea');\n this.textarea.classList.add('xterm-helper-textarea');\n this.textarea.setAttribute('autocorrect', 'off');\n this.textarea.setAttribute('autocapitalize', 'off');\n this.textarea.setAttribute('spellcheck', 'false');\n this.textarea.tabIndex = 0;\n this.textarea.addEventListener('focus', function() {\n self.emit('focus', {terminal: self});\n });\n this.textarea.addEventListener('blur', function() {\n self.emit('blur', {terminal: self});\n });\n this.helperContainer.appendChild(this.textarea);\n\n this.compositionView = document.createElement('div');\n this.compositionView.classList.add('composition-view');\n this.compositionHelper = new CompositionHelper(this.textarea, this.compositionView, this);\n this.helperContainer.appendChild(this.compositionView);\n\n this.charMeasureElement = document.createElement('div');\n this.charMeasureElement.classList.add('xterm-char-measure-element');\n this.charMeasureElement.innerHTML = 'W';\n this.helperContainer.appendChild(this.charMeasureElement);\n\n for (; i < this.rows; i++) {\n this.insertRow();\n }\n this.parent.appendChild(this.element);\n\n this.viewport = new Viewport(this, this.viewportElement, this.viewportScrollArea, this.charMeasureElement);\n\n // Draw the screen.\n this.refresh(0, this.rows - 1);\n\n // Initialize global actions that\n // need to be taken on the document.\n this.initGlobal();\n\n // Ensure there is a Terminal.focus.\n this.focus();\n\n on(this.element, 'click', function() {\n var selection = document.getSelection(),\n collapsed = selection.isCollapsed,\n isRange = typeof collapsed == 'boolean' ? !collapsed : selection.type == 'Range';\n if (!isRange) {\n self.focus();\n }\n });\n\n // Listen for mouse events and translate\n // them into terminal mouse protocols.\n this.bindMouse();\n\n // Figure out whether boldness affects\n // the character width of monospace fonts.\n if (Terminal.brokenBold == null) {\n Terminal.brokenBold = isBoldBroken(this.document);\n }\n\n this.emit('open');\n};\n\n\n/**\n * Attempts to load an add-on using CommonJS or RequireJS (whichever is available).\n * @param {string} addon The name of the addon to load\n * @static\n */\nTerminal.loadAddon = function(addon, callback) {\n if (typeof exports === 'object' && typeof module === 'object') {\n // CommonJS\n return require('../addons/' + addon);\n } else if (typeof define == 'function') {\n // RequireJS\n return require(['../addons/' + addon + '/' + addon], callback);\n } else {\n console.error('Cannot load a module without a CommonJS or RequireJS environment.');\n return false;\n }\n};\n\n\n/**\n * XTerm mouse events\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#Mouse%20Tracking\n * To better understand these\n * the xterm code is very helpful:\n * Relevant files:\n * button.c, charproc.c, misc.c\n * Relevant functions in xterm/button.c:\n * BtnCode, EmitButtonCode, EditorButton, SendMousePosition\n */\nTerminal.prototype.bindMouse = function() {\n var el = this.element, self = this, pressed = 32;\n\n // mouseup, mousedown, wheel\n // left click: ^[[M 3<^[[M#3<\n // wheel up: ^[[M`3>\n function sendButton(ev) {\n var button\n , pos;\n\n // get the xterm-style button\n button = getButton(ev);\n\n // get mouse coordinates\n pos = getCoords(ev);\n if (!pos) return;\n\n sendEvent(button, pos);\n\n switch (ev.overrideType || ev.type) {\n case 'mousedown':\n pressed = button;\n break;\n case 'mouseup':\n // keep it at the left\n // button, just in case.\n pressed = 32;\n break;\n case 'wheel':\n // nothing. don't\n // interfere with\n // `pressed`.\n break;\n }\n }\n\n // motion example of a left click:\n // ^[[M 3<^[[M@4<^[[M@5<^[[M@6<^[[M@7<^[[M#7<\n function sendMove(ev) {\n var button = pressed\n , pos;\n\n pos = getCoords(ev);\n if (!pos) return;\n\n // buttons marked as motions\n // are incremented by 32\n button += 32;\n\n sendEvent(button, pos);\n }\n\n // encode button and\n // position to characters\n function encode(data, ch) {\n if (!self.utfMouse) {\n if (ch === 255) return data.push(0);\n if (ch > 127) ch = 127;\n data.push(ch);\n } else {\n if (ch === 2047) return data.push(0);\n if (ch < 127) {\n data.push(ch);\n } else {\n if (ch > 2047) ch = 2047;\n data.push(0xC0 | (ch >> 6));\n data.push(0x80 | (ch & 0x3F));\n }\n }\n }\n\n // send a mouse event:\n // regular/utf8: ^[[M Cb Cx Cy\n // urxvt: ^[[ Cb ; Cx ; Cy M\n // sgr: ^[[ Cb ; Cx ; Cy M/m\n // vt300: ^[[ 24(1/3/5)~ [ Cx , Cy ] \\r\n // locator: CSI P e ; P b ; P r ; P c ; P p & w\n function sendEvent(button, pos) {\n // self.emit('mouse', {\n // x: pos.x - 32,\n // y: pos.x - 32,\n // button: button\n // });\n\n if (self.vt300Mouse) {\n // NOTE: Unstable.\n // http://www.vt100.net/docs/vt3xx-gp/chapter15.html\n button &= 3;\n pos.x -= 32;\n pos.y -= 32;\n var data = '\\x1b[24';\n if (button === 0) data += '1';\n else if (button === 1) data += '3';\n else if (button === 2) data += '5';\n else if (button === 3) return;\n else data += '0';\n data += '~[' + pos.x + ',' + pos.y + ']\\r';\n self.send(data);\n return;\n }\n\n if (self.decLocator) {\n // NOTE: Unstable.\n button &= 3;\n pos.x -= 32;\n pos.y -= 32;\n if (button === 0) button = 2;\n else if (button === 1) button = 4;\n else if (button === 2) button = 6;\n else if (button === 3) button = 3;\n self.send('\\x1b['\n + button\n + ';'\n + (button === 3 ? 4 : 0)\n + ';'\n + pos.y\n + ';'\n + pos.x\n + ';'\n + (pos.page || 0)\n + '&w');\n return;\n }\n\n if (self.urxvtMouse) {\n pos.x -= 32;\n pos.y -= 32;\n pos.x++;\n pos.y++;\n self.send('\\x1b[' + button + ';' + pos.x + ';' + pos.y + 'M');\n return;\n }\n\n if (self.sgrMouse) {\n pos.x -= 32;\n pos.y -= 32;\n self.send('\\x1b[<'\n + ((button & 3) === 3 ? button & ~3 : button)\n + ';'\n + pos.x\n + ';'\n + pos.y\n + ((button & 3) === 3 ? 'm' : 'M'));\n return;\n }\n\n var data = [];\n\n encode(data, button);\n encode(data, pos.x);\n encode(data, pos.y);\n\n self.send('\\x1b[M' + String.fromCharCode.apply(String, data));\n }\n\n function getButton(ev) {\n var button\n , shift\n , meta\n , ctrl\n , mod;\n\n // two low bits:\n // 0 = left\n // 1 = middle\n // 2 = right\n // 3 = release\n // wheel up/down:\n // 1, and 2 - with 64 added\n switch (ev.overrideType || ev.type) {\n case 'mousedown':\n button = ev.button != null\n ? +ev.button\n : ev.which != null\n ? ev.which - 1\n : null;\n\n if (self.browser.isMSIE) {\n button = button === 1 ? 0 : button === 4 ? 1 : button;\n }\n break;\n case 'mouseup':\n button = 3;\n break;\n case 'DOMMouseScroll':\n button = ev.detail < 0\n ? 64\n : 65;\n break;\n case 'wheel':\n button = ev.wheelDeltaY > 0\n ? 64\n : 65;\n break;\n }\n\n // next three bits are the modifiers:\n // 4 = shift, 8 = meta, 16 = control\n shift = ev.shiftKey ? 4 : 0;\n meta = ev.metaKey ? 8 : 0;\n ctrl = ev.ctrlKey ? 16 : 0;\n mod = shift | meta | ctrl;\n\n // no mods\n if (self.vt200Mouse) {\n // ctrl only\n mod &= ctrl;\n } else if (!self.normalMouse) {\n mod = 0;\n }\n\n // increment to SP\n button = (32 + (mod << 2)) + button;\n\n return button;\n }\n\n // mouse coordinates measured in cols/rows\n function getCoords(ev) {\n var x, y, w, h, el;\n\n // ignore browsers without pageX for now\n if (ev.pageX == null) return;\n\n x = ev.pageX;\n y = ev.pageY;\n el = self.element;\n\n // should probably check offsetParent\n // but this is more portable\n while (el && el !== self.document.documentElement) {\n x -= el.offsetLeft;\n y -= el.offsetTop;\n el = 'offsetParent' in el\n ? el.offsetParent\n : el.parentNode;\n }\n\n // convert to cols/rows\n w = self.element.clientWidth;\n h = self.element.clientHeight;\n x = Math.ceil((x / w) * self.cols);\n y = Math.ceil((y / h) * self.rows);\n\n // be sure to avoid sending\n // bad positions to the program\n if (x < 0) x = 0;\n if (x > self.cols) x = self.cols;\n if (y < 0) y = 0;\n if (y > self.rows) y = self.rows;\n\n // xterm sends raw bytes and\n // starts at 32 (SP) for each.\n x += 32;\n y += 32;\n\n return {\n x: x,\n y: y,\n type: 'wheel'\n };\n }\n\n on(el, 'mousedown', function(ev) {\n if (!self.mouseEvents) return;\n\n // send the button\n sendButton(ev);\n\n // ensure focus\n self.focus();\n\n // fix for odd bug\n //if (self.vt200Mouse && !self.normalMouse) {\n if (self.vt200Mouse) {\n ev.overrideType = 'mouseup';\n sendButton(ev);\n return self.cancel(ev);\n }\n\n // bind events\n if (self.normalMouse) on(self.document, 'mousemove', sendMove);\n\n // x10 compatibility mode can't send button releases\n if (!self.x10Mouse) {\n on(self.document, 'mouseup', function up(ev) {\n sendButton(ev);\n if (self.normalMouse) off(self.document, 'mousemove', sendMove);\n off(self.document, 'mouseup', up);\n return self.cancel(ev);\n });\n }\n\n return self.cancel(ev);\n });\n\n //if (self.normalMouse) {\n // on(self.document, 'mousemove', sendMove);\n //}\n\n on(el, 'wheel', function(ev) {\n if (!self.mouseEvents) return;\n if (self.x10Mouse\n || self.vt300Mouse\n || self.decLocator) return;\n sendButton(ev);\n return self.cancel(ev);\n });\n\n // allow wheel scrolling in\n // the shell for example\n on(el, 'wheel', function(ev) {\n if (self.mouseEvents) return;\n self.viewport.onWheel(ev);\n return self.cancel(ev);\n });\n};\n\n/**\n * Destroys the terminal.\n */\nTerminal.prototype.destroy = function() {\n this.readable = false;\n this.writable = false;\n this._events = {};\n this.handler = function() {};\n this.write = function() {};\n if (this.element.parentNode) {\n this.element.parentNode.removeChild(this.element);\n }\n //this.emit('close');\n};\n\n\n/**\n * Flags used to render terminal text properly\n */\nTerminal.flags = {\n BOLD: 1,\n UNDERLINE: 2,\n BLINK: 4,\n INVERSE: 8,\n INVISIBLE: 16\n}\n\n/**\n * Refreshes (re-renders) terminal content within two rows (inclusive)\n *\n * Rendering Engine:\n *\n * In the screen buffer, each character is stored as a an array with a character\n * and a 32-bit integer:\n * - First value: a utf-16 character.\n * - Second value:\n * - Next 9 bits: background color (0-511).\n * - Next 9 bits: foreground color (0-511).\n * - Next 14 bits: a mask for misc. flags:\n * - 1=bold\n * - 2=underline\n * - 4=blink\n * - 8=inverse\n * - 16=invisible\n *\n * @param {number} start The row to start from (between 0 and terminal's height terminal - 1)\n * @param {number} end The row to end at (between fromRow and terminal's height terminal - 1)\n * @param {boolean} queue Whether the refresh should ran right now or be queued\n */\nTerminal.prototype.refresh = function(start, end, queue) {\n var self = this;\n\n // queue defaults to true\n queue = (typeof queue == 'undefined') ? true : queue;\n\n /**\n * The refresh queue allows refresh to execute only approximately 30 times a second. For\n * commands that pass a significant amount of output to the write function, this prevents the\n * terminal from maxing out the CPU and making the UI unresponsive. While commands can still\n * run beyond what they do on the terminal, it is far better with a debounce in place as\n * every single terminal manipulation does not need to be constructed in the DOM.\n *\n * A side-effect of this is that it makes ^C to interrupt a process seem more responsive.\n */\n if (queue) {\n // If refresh should be queued, order the refresh and return.\n if (this._refreshIsQueued) {\n // If a refresh has already been queued, just order a full refresh next\n this._fullRefreshNext = true;\n } else {\n setTimeout(function () {\n self.refresh(start, end, false);\n }, 34)\n this._refreshIsQueued = true;\n }\n return;\n }\n\n // If refresh should be run right now (not be queued), release the lock\n this._refreshIsQueued = false;\n\n // If multiple refreshes were requested, make a full refresh.\n if (this._fullRefreshNext) {\n start = 0;\n end = this.rows - 1;\n this._fullRefreshNext = false // reset lock\n }\n\n var x, y, i, line, out, ch, ch_width, width, data, attr, bg, fg, flags, row, parent, focused = document.activeElement;\n\n // If this is a big refresh, remove the terminal rows from the DOM for faster calculations\n if (end - start >= this.rows / 2) {\n parent = this.element.parentNode;\n if (parent) {\n this.element.removeChild(this.rowContainer);\n }\n }\n\n width = this.cols;\n y = start;\n\n if (end >= this.rows.length) {\n this.log('`end` is too large. Most likely a bad CSR.');\n end = this.rows.length - 1;\n }\n\n for (; y <= end; y++) {\n row = y + this.ydisp;\n\n line = this.lines[row];\n out = '';\n\n if (this.y === y - (this.ybase - this.ydisp)\n && this.cursorState\n && !this.cursorHidden) {\n x = this.x;\n } else {\n x = -1;\n }\n\n attr = this.defAttr;\n i = 0;\n\n for (; i < width; i++) {\n data = line[i][0];\n ch = line[i][1];\n ch_width = line[i][2];\n if (!ch_width)\n continue;\n\n if (i === x) data = -1;\n\n if (data !== attr) {\n if (attr !== this.defAttr) {\n out += '</span>';\n }\n if (data !== this.defAttr) {\n if (data === -1) {\n out += '<span class=\"reverse-video terminal-cursor';\n if (this.cursorBlink) {\n out += ' blinking';\n }\n out += '\">';\n } else {\n var classNames = [];\n\n bg = data & 0x1ff;\n fg = (data >> 9) & 0x1ff;\n flags = data >> 18;\n\n if (flags & Terminal.flags.BOLD) {\n if (!Terminal.brokenBold) {\n classNames.push('xterm-bold');\n }\n // See: XTerm*boldColors\n if (fg < 8) fg += 8;\n }\n\n if (flags & Terminal.flags.UNDERLINE) {\n classNames.push('xterm-underline');\n }\n\n if (flags & Terminal.flags.BLINK) {\n classNames.push('xterm-blink');\n }\n\n // If inverse flag is on, then swap the foreground and background variables.\n if (flags & Terminal.flags.INVERSE) {\n /* One-line variable swap in JavaScript: http://stackoverflow.com/a/16201730 */\n bg = [fg, fg = bg][0];\n // Should inverse just be before the\n // above boldColors effect instead?\n if ((flags & 1) && fg < 8) fg += 8;\n }\n\n if (flags & Terminal.flags.INVISIBLE) {\n classNames.push('xterm-hidden');\n }\n\n /**\n * Weird situation: Invert flag used black foreground and white background results\n * in invalid background color, positioned at the 256 index of the 256 terminal\n * color map. Pin the colors manually in such a case.\n *\n * Source: https://github.com/sourcelair/xterm.js/issues/57\n */\n if (flags & Terminal.flags.INVERSE) {\n if (bg == 257) {\n bg = 15;\n }\n if (fg == 256) {\n fg = 0;\n }\n }\n\n if (bg < 256) {\n classNames.push('xterm-bg-color-' + bg);\n }\n\n if (fg < 256) {\n classNames.push('xterm-color-' + fg);\n }\n\n out += '<span';\n if (classNames.length) {\n out += ' class=\"' + classNames.join(' ') + '\"';\n }\n out += '>';\n }\n }\n }\n\n switch (ch) {\n case '&':\n out += '&amp;';\n break;\n case '<':\n out += '&lt;';\n break;\n case '>':\n out += '&gt;';\n break;\n default:\n if (ch <= ' ') {\n out += '&nbsp;';\n } else {\n out += ch;\n }\n break;\n }\n\n attr = data;\n }\n\n if (attr !== this.defAttr) {\n out += '</span>';\n }\n\n this.children[y].innerHTML = out;\n }\n\n if (parent) {\n this.element.appendChild(this.rowContainer);\n }\n\n this.emit('refresh', {element: this.element, start: start, end: end});\n};\n\n/**\n * Display the cursor element\n */\nTerminal.prototype.showCursor = function() {\n if (!this.cursorState) {\n this.cursorState = 1;\n this.refresh(this.y, this.y);\n }\n};\n\n/**\n * Scroll the terminal\n */\nTerminal.prototype.scroll = function() {\n var row;\n\n if (++this.ybase === this.scrollback) {\n this.ybase = this.ybase / 2 | 0;\n this.lines = this.lines.slice(-(this.ybase + this.rows) + 1);\n }\n\n if (!this.userScrolling) {\n this.ydisp = this.ybase;\n }\n\n // last line\n row = this.ybase + this.rows - 1;\n\n // subtract the bottom scroll region\n row -= this.rows - 1 - this.scrollBottom;\n\n if (row === this.lines.length) {\n // potential optimization:\n // pushing is faster than splicing\n // when they amount to the same\n // behavior.\n this.lines.push(this.blankLine());\n } else {\n // add our new line\n this.lines.splice(row, 0, this.blankLine());\n }\n\n if (this.scrollTop !== 0) {\n if (this.ybase !== 0) {\n this.ybase--;\n if (!this.userScrolling) {\n this.ydisp = this.ybase;\n }\n }\n this.lines.splice(this.ybase + this.scrollTop, 1);\n }\n\n // this.maxRange();\n this.updateRange(this.scrollTop);\n this.updateRange(this.scrollBottom);\n\n this.emit('scroll', this.ydisp);\n};\n\n/**\n * Scroll the display of the terminal\n * @param {number} disp The number of lines to scroll down (negatives scroll up).\n * @param {boolean} suppressScrollEvent Don't emit the scroll event as scrollDisp. This is used\n * to avoid unwanted events being handled by the veiwport when the event was triggered from the\n * viewport originally.\n */\nTerminal.prototype.scrollDisp = function(disp, suppressScrollEvent) {\n if (disp < 0) {\n this.userScrolling = true;\n } else if (disp + this.ydisp >= this.ybase) {\n this.userScrolling = false;\n }\n\n this.ydisp += disp;\n\n if (this.ydisp > this.ybase) {\n this.ydisp = this.ybase;\n } else if (this.ydisp < 0) {\n this.ydisp = 0;\n }\n\n if (!suppressScrollEvent) {\n this.emit('scroll', this.ydisp);\n }\n\n this.refresh(0, this.rows - 1);\n};\n\n/**\n * Scroll the display of the terminal by a number of pages.\n * @param {number} pageCount The number of pages to scroll (negative scrolls up).\n */\nTerminal.prototype.scrollPages = function(pageCount) {\n this.scrollDisp(pageCount * (this.rows - 1));\n}\n\n/**\n * Scrolls the display of the terminal to the top.\n */\nTerminal.prototype.scrollToTop = function() {\n this.scrollDisp(-this.ydisp);\n}\n\n/**\n * Scrolls the display of the terminal to the bottom.\n */\nTerminal.prototype.scrollToBottom = function() {\n this.scrollDisp(this.ybase - this.ydisp);\n}\n\n/**\n * Writes text to the terminal.\n * @param {string} text The text to write to the terminal.\n */\nTerminal.prototype.write = function(data) {\n var l = data.length, i = 0, j, cs, ch, code, low, ch_width, row;\n\n this.refreshStart = this.y;\n this.refreshEnd = this.y;\n\n // apply leftover surrogate high from last write\n if (this.surrogate_high) {\n data = this.surrogate_high + data;\n this.surrogate_high = '';\n }\n\n for (; i < l; i++) {\n ch = data[i];\n\n // FIXME: higher chars than 0xa0 are not allowed in escape sequences\n // --> maybe move to default\n code = data.charCodeAt(i);\n if (0xD800 <= code && code <= 0xDBFF) {\n // we got a surrogate high\n // get surrogate low (next 2 bytes)\n low = data.charCodeAt(i+1);\n if (isNaN(low)) {\n // end of data stream, save surrogate high\n this.surrogate_high = ch;\n continue;\n }\n code = ((code - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000;\n ch += data.charAt(i+1);\n }\n // surrogate low - already handled above\n if (0xDC00 <= code && code <= 0xDFFF)\n continue;\n\n switch (this.state) {\n case normal:\n switch (ch) {\n case '\\x07':\n this.bell();\n break;\n\n // '\\n', '\\v', '\\f'\n case '\\n':\n case '\\x0b':\n case '\\x0c':\n if (this.convertEol) {\n this.x = 0;\n }\n this.y++;\n if (this.y > this.scrollBottom) {\n this.y--;\n this.scroll();\n }\n break;\n\n // '\\r'\n case '\\r':\n this.x = 0;\n break;\n\n // '\\b'\n case '\\x08':\n if (this.x > 0) {\n this.x--;\n }\n break;\n\n // '\\t'\n case '\\t':\n this.x = this.nextStop();\n break;\n\n // shift out\n case '\\x0e':\n this.setgLevel(1);\n break;\n\n // shift in\n case '\\x0f':\n this.setgLevel(0);\n break;\n\n // '\\e'\n case '\\x1b':\n this.state = escaped;\n break;\n\n default:\n // ' '\n // calculate print space\n // expensive call, therefore we save width in line buffer\n ch_width = wcwidth(code);\n\n if (ch >= ' ') {\n if (this.charset && this.charset[ch]) {\n ch = this.charset[ch];\n }\n\n row = this.y + this.ybase;\n\n // insert combining char in last cell\n // FIXME: needs handling after cursor jumps\n if (!ch_width && this.x) {\n\n // dont overflow left\n if (this.lines[row][this.x-1]) {\n if (!this.lines[row][this.x-1][2]) {\n\n // found empty cell after fullwidth, need to go 2 cells back\n if (this.lines[row][this.x-2])\n this.lines[row][this.x-2][1] += ch;\n\n } else {\n this.lines[row][this.x-1][1] += ch;\n }\n this.updateRange(this.y);\n }\n break;\n }\n\n // goto next line if ch would overflow\n // TODO: needs a global min terminal width of 2\n if (this.x+ch_width-1 >= this.cols) {\n // autowrap - DECAWM\n if (this.wraparoundMode) {\n this.x = 0;\n this.y++;\n if (this.y > this.scrollBottom) {\n this.y--;\n this.scroll();\n }\n } else {\n this.x = this.cols-1;\n if(ch_width===2) // FIXME: check for xterm behavior\n continue;\n }\n }\n row = this.y + this.ybase;\n\n // insert mode: move characters to right\n if (this.insertMode) {\n // do this twice for a fullwidth char\n for (var moves=0; moves<ch_width; ++moves) {\n // remove last cell, if it's width is 0\n // we have to adjust the second last cell as well\n var removed = this.lines[this.y + this.ybase].pop();\n if (removed[2]===0\n && this.lines[row][this.cols-2]\n && this.lines[row][this.cols-2][2]===2)\n this.lines[row][this.cols-2] = [this.curAttr, ' ', 1];\n\n // insert empty cell at cursor\n this.lines[row].splice(this.x, 0, [this.curAttr, ' ', 1]);\n }\n }\n\n this.lines[row][this.x] = [this.curAttr, ch, ch_width];\n this.x++;\n this.updateRange(this.y);\n\n // fullwidth char - set next cell width to zero and advance cursor\n if (ch_width===2) {\n this.lines[row][this.x] = [this.curAttr, '', 0];\n this.x++;\n }\n }\n break;\n }\n break;\n case escaped:\n switch (ch) {\n // ESC [ Control Sequence Introducer ( CSI is 0x9b).\n case '[':\n this.params = [];\n this.currentParam = 0;\n this.state = csi;\n break;\n\n // ESC ] Operating System Command ( OSC is 0x9d).\n case ']':\n this.params = [];\n this.currentParam = 0;\n this.state = osc;\n break;\n\n // ESC P Device Control String ( DCS is 0x90).\n case 'P':\n this.params = [];\n this.currentParam = 0;\n this.state = dcs;\n break;\n\n // ESC _ Application Program Command ( APC is 0x9f).\n case '_':\n this.state = ignore;\n break;\n\n // ESC ^ Privacy Message ( PM is 0x9e).\n case '^':\n this.state = ignore;\n break;\n\n // ESC c Full Reset (RIS).\n case 'c':\n this.reset();\n break;\n\n // ESC E Next Line ( NEL is 0x85).\n // ESC D Index ( IND is 0x84).\n case 'E':\n this.x = 0;\n ;\n case 'D':\n this.index();\n break;\n\n // ESC M Reverse Index ( RI is 0x8d).\n case 'M':\n this.reverseIndex();\n break;\n\n // ESC % Select default/utf-8 character set.\n // @ = default, G = utf-8\n case '%':\n //this.charset = null;\n this.setgLevel(0);\n this.setgCharset(0, Terminal.charsets.US);\n this.state = normal;\n i++;\n break;\n\n // ESC (,),*,+,-,. Designate G0-G2 Character Set.\n case '(': // <-- this seems to get all the attention\n case ')':\n case '*':\n case '+':\n case '-':\n case '.':\n switch (ch) {\n case '(':\n this.gcharset = 0;\n break;\n case ')':\n this.gcharset = 1;\n break;\n case '*':\n this.gcharset = 2;\n break;\n case '+':\n this.gcharset = 3;\n break;\n case '-':\n this.gcharset = 1;\n break;\n case '.':\n this.gcharset = 2;\n break;\n }\n this.state = charset;\n break;\n\n // Designate G3 Character Set (VT300).\n // A = ISO Latin-1 Supplemental.\n // Not implemented.\n case '/':\n this.gcharset = 3;\n this.state = charset;\n i--;\n break;\n\n // ESC N\n // Single Shift Select of G2 Character Set\n // ( SS2 is 0x8e). This affects next character only.\n case 'N':\n break;\n // ESC O\n // Single Shift Select of G3 Character Set\n // ( SS3 is 0x8f). This affects next character only.\n case 'O':\n break;\n // ESC n\n // Invoke the G2 Character Set as GL (LS2).\n case 'n':\n this.setgLevel(2);\n break;\n // ESC o\n // Invoke the G3 Character Set as GL (LS3).\n case 'o':\n this.setgLevel(3);\n break;\n // ESC |\n // Invoke the G3 Character Set as GR (LS3R).\n case '|':\n this.setgLevel(3);\n break;\n // ESC }\n // Invoke the G2 Character Set as GR (LS2R).\n case '}':\n this.setgLevel(2);\n break;\n // ESC ~\n // Invoke the G1 Character Set as GR (LS1R).\n case '~':\n this.setgLevel(1);\n break;\n\n // ESC 7 Save Cursor (DECSC).\n case '7':\n this.saveCursor();\n this.state = normal;\n break;\n\n // ESC 8 Restore Cursor (DECRC).\n case '8':\n this.restoreCursor();\n this.state = normal;\n break;\n\n // ESC # 3 DEC line height/width\n case '#':\n this.state = normal;\n i++;\n break;\n\n // ESC H Tab Set (HTS is 0x88).\n case 'H':\n this.tabSet();\n break;\n\n // ESC = Application Keypad (DECKPAM).\n case '=':\n this.log('Serial port requested application keypad.');\n this.applicationKeypad = true;\n this.viewport.syncScrollArea();\n this.state = normal;\n break;\n\n // ESC > Normal Keypad (DECKPNM).\n case '>':\n this.log('Switching back to normal keypad.');\n this.applicationKeypad = false;\n this.viewport.syncScrollArea();\n this.state = normal;\n break;\n\n default:\n this.state = normal;\n this.error('Unknown ESC control: %s.', ch);\n break;\n }\n break;\n\n case charset:\n switch (ch) {\n case '0': // DEC Special Character and Line Drawing Set.\n cs = Terminal.charsets.SCLD;\n break;\n case 'A': // UK\n cs = Terminal.charsets.UK;\n break;\n case 'B': // United States (USASCII).\n cs = Terminal.charsets.US;\n break;\n case '4': // Dutch\n cs = Terminal.charsets.Dutch;\n break;\n case 'C': // Finnish\n case '5':\n cs = Terminal.charsets.Finnish;\n break;\n case 'R': // French\n cs = Terminal.charsets.French;\n break;\n case 'Q': // FrenchCanadian\n cs = Terminal.charsets.FrenchCanadian;\n break;\n case 'K': // German\n cs = Terminal.charsets.German;\n break;\n case 'Y': // Italian\n cs = Terminal.charsets.Italian;\n break;\n case 'E': // NorwegianDanish\n case '6':\n cs = Terminal.charsets.NorwegianDanish;\n break;\n case 'Z': // Spanish\n cs = Terminal.charsets.Spanish;\n break;\n case 'H': // Swedish\n case '7':\n cs = Terminal.charsets.Swedish;\n break;\n case '=': // Swiss\n cs = Terminal.charsets.Swiss;\n break;\n case '/': // ISOLatin (actually /A)\n cs = Terminal.charsets.ISOLatin;\n i++;\n break;\n default: // Default\n cs = Terminal.charsets.US;\n break;\n }\n this.setgCharset(this.gcharset, cs);\n this.gcharset = null;\n this.state = normal;\n break;\n\n case osc:\n // OSC Ps ; Pt ST\n // OSC Ps ; Pt BEL\n // Set Text Parameters.\n if (ch === '\\x1b' || ch === '\\x07') {\n if (ch === '\\x1b') i++;\n\n this.params.push(this.currentParam);\n\n switch (this.params[0]) {\n case 0:\n case 1:\n case 2:\n if (this.params[1]) {\n this.title = this.params[1];\n this.handleTitle(this.title);\n }\n break;\n case 3:\n // set X property\n break;\n case 4:\n case 5:\n // change dynamic colors\n break;\n case 10:\n case 11:\n case 12:\n case 13:\n case 14:\n case 15:\n case 16:\n case 17:\n case 18:\n case 19:\n // change dynamic ui colors\n break;\n case 46:\n // change log file\n break;\n case 50:\n // dynamic font\n break;\n case 51:\n // emacs shell\n break;\n case 52:\n // manipulate selection data\n break;\n case 104:\n case 105:\n case 110:\n case 111:\n case 112:\n case 113:\n case 114:\n case 115:\n case 116:\n case 117:\n case 118:\n // reset colors\n break;\n }\n\n this.params = [];\n this.currentParam = 0;\n this.state = normal;\n } else {\n if (!this.params.length) {\n if (ch >= '0' && ch <= '9') {\n this.currentParam =\n this.currentParam * 10 + ch.charCodeAt(0) - 48;\n } else if (ch === ';') {\n this.params.push(this.currentParam);\n this.currentParam = '';\n }\n } else {\n this.currentParam += ch;\n }\n }\n break;\n\n case csi:\n // '?', '>', '!'\n if (ch === '?' || ch === '>' || ch === '!') {\n this.prefix = ch;\n break;\n }\n\n // 0 - 9\n if (ch >= '0' && ch <= '9') {\n this.currentParam = this.currentParam * 10 + ch.charCodeAt(0) - 48;\n break;\n }\n\n // '$', '\"', ' ', '\\''\n if (ch === '$' || ch === '\"' || ch === ' ' || ch === '\\'') {\n this.postfix = ch;\n break;\n }\n\n this.params.push(this.currentParam);\n this.currentParam = 0;\n\n // ';'\n if (ch === ';') break;\n\n this.state = normal;\n\n switch (ch) {\n // CSI Ps A\n // Cursor Up Ps Times (default = 1) (CUU).\n case 'A':\n this.cursorUp(this.params);\n break;\n\n // CSI Ps B\n // Cursor Down Ps Times (default = 1) (CUD).\n case 'B':\n this.cursorDown(this.params);\n break;\n\n // CSI Ps C\n // Cursor Forward Ps Times (default = 1) (CUF).\n case 'C':\n this.cursorForward(this.params);\n break;\n\n // CSI Ps D\n // Cursor Backward Ps Times (default = 1) (CUB).\n case 'D':\n this.cursorBackward(this.params);\n break;\n\n // CSI Ps ; Ps H\n // Cursor Position [row;column] (default = [1,1]) (CUP).\n case 'H':\n this.cursorPos(this.params);\n break;\n\n // CSI Ps J Erase in Display (ED).\n case 'J':\n this.eraseInDisplay(this.params);\n break;\n\n // CSI Ps K Erase in Line (EL).\n case 'K':\n this.eraseInLine(this.params);\n break;\n\n // CSI Pm m Character Attributes (SGR).\n case 'm':\n if (!this.prefix) {\n this.charAttributes(this.params);\n }\n break;\n\n // CSI Ps n Device Status Report (DSR).\n case 'n':\n if (!this.prefix) {\n this.deviceStatus(this.params);\n }\n break;\n\n /**\n * Additions\n */\n\n // CSI Ps @\n // Insert Ps (Blank) Character(s) (default = 1) (ICH).\n case '@':\n this.insertChars(this.params);\n break;\n\n // CSI Ps E\n // Cursor Next Line Ps Times (default = 1) (CNL).\n case 'E':\n this.cursorNextLine(this.params);\n break;\n\n // CSI Ps F\n // Cursor Preceding Line Ps Times (default = 1) (CNL).\n case 'F':\n this.cursorPrecedingLine(this.params);\n break;\n\n // CSI Ps G\n // Cursor Character Absolute [column] (default = [row,1]) (CHA).\n case 'G':\n this.cursorCharAbsolute(this.params);\n break;\n\n // CSI Ps L\n // Insert Ps Line(s) (default = 1) (IL).\n case 'L':\n this.insertLines(this.params);\n break;\n\n // CSI Ps M\n // Delete Ps Line(s) (default = 1) (DL).\n case 'M':\n this.deleteLines(this.params);\n break;\n\n // CSI Ps P\n // Delete Ps Character(s) (default = 1) (DCH).\n case 'P':\n this.deleteChars(this.params);\n break;\n\n // CSI Ps X\n // Erase Ps Character(s) (default = 1) (ECH).\n case 'X':\n this.eraseChars(this.params);\n break;\n\n // CSI Pm ` Character Position Absolute\n // [column] (default = [row,1]) (HPA).\n case '`':\n this.charPosAbsolute(this.params);\n break;\n\n // 141 61 a * HPR -\n // Horizontal Position Relative\n case 'a':\n this.HPositionRelative(this.params);\n break;\n\n // CSI P s c\n // Send Device Attributes (Primary DA).\n // CSI > P s c\n // Send Device Attributes (Secondary DA)\n case 'c':\n this.sendDeviceAttributes(this.params);\n break;\n\n // CSI Pm d\n // Line Position Absolute [row] (default = [1,column]) (VPA).\n case 'd':\n this.linePosAbsolute(this.params);\n break;\n\n // 145 65 e * VPR - Vertical Position Relative\n case 'e':\n this.VPositionRelative(this.params);\n break;\n\n // CSI Ps ; Ps f\n // Horizontal and Vertical Position [row;column] (default =\n // [1,1]) (HVP).\n case 'f':\n this.HVPosition(this.params);\n break;\n\n // CSI Pm h Set Mode (SM).\n // CSI ? Pm h - mouse escape codes, cursor escape codes\n case 'h':\n this.setMode(this.params);\n break;\n\n // CSI Pm l Reset Mode (RM).\n // CSI ? Pm l\n case 'l':\n this.resetMode(this.params);\n break;\n\n // CSI Ps ; Ps r\n // Set Scrolling Region [top;bottom] (default = full size of win-\n // dow) (DECSTBM).\n // CSI ? Pm r\n case 'r':\n this.setScrollRegion(this.params);\n break;\n\n // CSI s\n // Save cursor (ANSI.SYS).\n case 's':\n this.saveCursor(this.params);\n break;\n\n // CSI u\n // Restore cursor (ANSI.SYS).\n case 'u':\n this.restoreCursor(this.params);\n break;\n\n /**\n * Lesser Used\n */\n\n // CSI Ps I\n // Cursor Forward Tabulation Ps tab stops (default = 1) (CHT).\n case 'I':\n this.cursorForwardTab(this.params);\n break;\n\n // CSI Ps S Scroll up Ps lines (default = 1) (SU).\n case 'S':\n this.scrollUp(this.params);\n break;\n\n // CSI Ps T Scroll down Ps lines (default = 1) (SD).\n // CSI Ps ; Ps ; Ps ; Ps ; Ps T\n // CSI > Ps; Ps T\n case 'T':\n // if (this.prefix === '>') {\n // this.resetTitleModes(this.params);\n // break;\n // }\n // if (this.params.length > 2) {\n // this.initMouseTracking(this.params);\n // break;\n // }\n if (this.params.length < 2 && !this.prefix) {\n this.scrollDown(this.params);\n }\n break;\n\n // CSI Ps Z\n // Cursor Backward Tabulation Ps tab stops (default = 1) (CBT).\n case 'Z':\n this.cursorBackwardTab(this.params);\n break;\n\n // CSI Ps b Repeat the preceding graphic character Ps times (REP).\n case 'b':\n this.repeatPrecedingCharacter(this.params);\n break;\n\n // CSI Ps g Tab Clear (TBC).\n case 'g':\n this.tabClear(this.params);\n break;\n\n // CSI Pm i Media Copy (MC).\n // CSI ? Pm i\n // case 'i':\n // this.mediaCopy(this.params);\n // break;\n\n // CSI Pm m Character Attributes (SGR).\n // CSI > Ps; Ps m\n // case 'm': // duplicate\n // if (this.prefix === '>') {\n // this.setResources(this.params);\n // } else {\n // this.charAttributes(this.params);\n // }\n // break;\n\n // CSI Ps n Device Status Report (DSR).\n // CSI > Ps n\n // case 'n': // duplicate\n // if (this.prefix === '>') {\n // this.disableModifiers(this.params);\n // } else {\n // this.deviceStatus(this.params);\n // }\n // break;\n\n // CSI > Ps p Set pointer mode.\n // CSI ! p Soft terminal reset (DECSTR).\n // CSI Ps$ p\n // Request ANSI mode (DECRQM).\n // CSI ? Ps$ p\n // Request DEC private mode (DECRQM).\n // CSI Ps ; Ps \" p\n case 'p':\n switch (this.prefix) {\n // case '>':\n // this.setPointerMode(this.params);\n // break;\n case '!':\n this.softReset(this.params);\n break;\n // case '?':\n // if (this.postfix === '$') {\n // this.requestPrivateMode(this.params);\n // }\n // break;\n // default:\n // if (this.postfix === '\"') {\n // this.setConformanceLevel(this.params);\n // } else if (this.postfix === '$') {\n // this.requestAnsiMode(this.params);\n // }\n // break;\n }\n break;\n\n // CSI Ps q Load LEDs (DECLL).\n // CSI Ps SP q\n // CSI Ps \" q\n // case 'q':\n // if (this.postfix === ' ') {\n // this.setCursorStyle(this.params);\n // break;\n // }\n // if (this.postfix === '\"') {\n // this.setCharProtectionAttr(this.params);\n // break;\n // }\n // this.loadLEDs(this.params);\n // break;\n\n // CSI Ps ; Ps r\n // Set Scrolling Region [top;bottom] (default = full size of win-\n // dow) (DECSTBM).\n // CSI ? Pm r\n // CSI Pt; Pl; Pb; Pr; Ps$ r\n // case 'r': // duplicate\n // if (this.prefix === '?') {\n // this.restorePrivateValues(this.params);\n // } else if (this.postfix === '$') {\n // this.setAttrInRectangle(this.params);\n // } else {\n // this.setScrollRegion(this.params);\n // }\n // break;\n\n // CSI s Save cursor (ANSI.SYS).\n // CSI ? Pm s\n // case 's': // duplicate\n // if (this.prefix === '?') {\n // this.savePrivateValues(this.params);\n // } else {\n // this.saveCursor(this.params);\n // }\n // break;\n\n // CSI Ps ; Ps ; Ps t\n // CSI Pt; Pl; Pb; Pr; Ps$ t\n // CSI > Ps; Ps t\n // CSI Ps SP t\n // case 't':\n // if (this.postfix === '$') {\n // this.reverseAttrInRectangle(this.params);\n // } else if (this.postfix === ' ') {\n // this.setWarningBellVolume(this.params);\n // } else {\n // if (this.prefix === '>') {\n // this.setTitleModeFeature(this.params);\n // } else {\n // this.manipulateWindow(this.params);\n // }\n // }\n // break;\n\n // CSI u Restore cursor (ANSI.SYS).\n // CSI Ps SP u\n // case 'u': // duplicate\n // if (this.postfix === ' ') {\n // this.setMarginBellVolume(this.params);\n // } else {\n // this.restoreCursor(this.params);\n // }\n // break;\n\n // CSI Pt; Pl; Pb; Pr; Pp; Pt; Pl; Pp$ v\n // case 'v':\n // if (this.postfix === '$') {\n // this.copyRectagle(this.params);\n // }\n // break;\n\n // CSI Pt ; Pl ; Pb ; Pr ' w\n // case 'w':\n // if (this.postfix === '\\'') {\n // this.enableFilterRectangle(this.params);\n // }\n // break;\n\n // CSI Ps x Request Terminal Parameters (DECREQTPARM).\n // CSI Ps x Select Attribute Change Extent (DECSACE).\n // CSI Pc; Pt; Pl; Pb; Pr$ x\n // case 'x':\n // if (this.postfix === '$') {\n // this.fillRectangle(this.params);\n // } else {\n // this.requestParameters(this.params);\n // //this.__(this.params);\n // }\n // break;\n\n // CSI Ps ; Pu ' z\n // CSI Pt; Pl; Pb; Pr$ z\n // case 'z':\n // if (this.postfix === '\\'') {\n // this.enableLocatorReporting(this.params);\n // } else if (this.postfix === '$') {\n // this.eraseRectangle(this.params);\n // }\n // break;\n\n // CSI Pm ' {\n // CSI Pt; Pl; Pb; Pr$ {\n // case '{':\n // if (this.postfix === '\\'') {\n // this.setLocatorEvents(this.params);\n // } else if (this.postfix === '$') {\n // this.selectiveEraseRectangle(this.params);\n // }\n // break;\n\n // CSI Ps ' |\n // case '|':\n // if (this.postfix === '\\'') {\n // this.requestLocatorPosition(this.params);\n // }\n // break;\n\n // CSI P m SP }\n // Insert P s Column(s) (default = 1) (DECIC), VT420 and up.\n // case '}':\n // if (this.postfix === ' ') {\n // this.insertColumns(this.params);\n // }\n // break;\n\n // CSI P m SP ~\n // Delete P s Column(s) (default = 1) (DECDC), VT420 and up\n // case '~':\n // if (this.postfix === ' ') {\n // this.deleteColumns(this.params);\n // }\n // break;\n\n default:\n this.error('Unknown CSI code: %s.', ch);\n break;\n }\n\n this.prefix = '';\n this.postfix = '';\n break;\n\n case dcs:\n if (ch === '\\x1b' || ch === '\\x07') {\n if (ch === '\\x1b') i++;\n\n switch (this.prefix) {\n // User-Defined Keys (DECUDK).\n case '':\n break;\n\n // Request Status String (DECRQSS).\n // test: echo -e '\\eP$q\"p\\e\\\\'\n case '$q':\n var pt = this.currentParam\n , valid = false;\n\n switch (pt) {\n // DECSCA\n case '\"q':\n pt = '0\"q';\n break;\n\n // DECSCL\n case '\"p':\n pt = '61\"p';\n break;\n\n // DECSTBM\n case 'r':\n pt = ''\n + (this.scrollTop + 1)\n + ';'\n + (this.scrollBottom + 1)\n + 'r';\n break;\n\n // SGR\n case 'm':\n pt = '0m';\n break;\n\n default:\n this.error('Unknown DCS Pt: %s.', pt);\n pt = '';\n break;\n }\n\n this.send('\\x1bP' + +valid + '$r' + pt + '\\x1b\\\\');\n break;\n\n // Set Termcap/Terminfo Data (xterm, experimental).\n case '+p':\n break;\n\n // Request Termcap/Terminfo String (xterm, experimental)\n // Regular xterm does not even respond to this sequence.\n // This can cause a small glitch in vim.\n // test: echo -ne '\\eP+q6b64\\e\\\\'\n case '+q':\n var pt = this.currentParam\n , valid = false;\n\n this.send('\\x1bP' + +valid + '+r' + pt + '\\x1b\\\\');\n break;\n\n default:\n this.error('Unknown DCS prefix: %s.', this.prefix);\n break;\n }\n\n this.currentParam = 0;\n this.prefix = '';\n this.state = normal;\n } else if (!this.currentParam) {\n if (!this.prefix && ch !== '$' && ch !== '+') {\n this.currentParam = ch;\n } else if (this.prefix.length === 2) {\n this.currentParam = ch;\n } else {\n this.prefix += ch;\n }\n } else {\n this.currentParam += ch;\n }\n break;\n\n case ignore:\n // For PM and APC.\n if (ch === '\\x1b' || ch === '\\x07') {\n if (ch === '\\x1b') i++;\n this.state = normal;\n }\n break;\n }\n }\n\n this.updateRange(this.y);\n this.refresh(this.refreshStart, this.refreshEnd);\n};\n\n/**\n * Writes text to the terminal, followed by a break line character (\\n).\n * @param {string} text The text to write to the terminal.\n */\nTerminal.prototype.writeln = function(data) {\n this.write(data + '\\r\\n');\n};\n\n/**\n * Attaches a custom keydown handler which is run before keys are processed, giving consumers of\n * xterm.js ultimate control as to what keys should be processed by the terminal and what keys\n * should not.\n * @param {function} customKeydownHandler The custom KeyboardEvent handler to attach. This is a\n * function that takes a KeyboardEvent, allowing consumers to stop propogation and/or prevent\n * the default action. The function returns whether the event should be processed by xterm.js.\n */\nTerminal.prototype.attachCustomKeydownHandler = function(customKeydownHandler) {\n this.customKeydownHandler = customKeydownHandler;\n}\n\n/**\n * Handle a keydown event\n * Key Resources:\n * - https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent\n * @param {KeyboardEvent} ev The keydown event to be handled.\n */\nTerminal.prototype.keyDown = function(ev) {\n // Scroll down to prompt, whenever the user presses a key.\n if (this.ybase !== this.ydisp) {\n this.scrollToBottom();\n }\n\n if (this.customKeydownHandler && this.customKeydownHandler(ev) === false) {\n return false;\n }\n\n if (!this.compositionHelper.keydown.bind(this.compositionHelper)(ev)) {\n return false;\n }\n\n var self = this;\n var result = this.evaluateKeyEscapeSequence(ev);\n\n if (result.scrollDisp) {\n this.scrollDisp(result.scrollDisp);\n return this.cancel(ev, true);\n }\n\n if (isThirdLevelShift(this, ev)) {\n return true;\n }\n\n if (result.cancel) {\n // The event is canceled at the end already, is this necessary?\n this.cancel(ev, true);\n }\n\n if (!result.key) {\n return true;\n }\n\n this.emit('keydown', ev);\n this.emit('key', result.key, ev);\n this.showCursor();\n this.handler(result.key);\n\n return this.cancel(ev, true);\n};\n\n/**\n * Returns an object that determines how a KeyboardEvent should be handled. The key of the\n * returned value is the new key code to pass to the PTY.\n *\n * Reference: http://invisible-island.net/xterm/ctlseqs/ctlseqs.html\n * @param {KeyboardEvent} ev The keyboard event to be translated to key escape sequence.\n */\nTerminal.prototype.evaluateKeyEscapeSequence = function(ev) {\n var result = {\n // Whether to cancel event propogation (NOTE: this may not be needed since the event is\n // canceled at the end of keyDown\n cancel: false,\n // The new key even to emit\n key: undefined,\n // The number of characters to scroll, if this is defined it will cancel the event\n scrollDisp: undefined\n };\n var modifiers = ev.shiftKey << 0 | ev.altKey << 1 | ev.ctrlKey << 2 | ev.metaKey << 3;\n switch (ev.keyCode) {\n case 8:\n // backspace\n if (ev.shiftKey) {\n result.key = '\\x08'; // ^H\n break;\n }\n result.key = '\\x7f'; // ^?\n break;\n case 9:\n // tab\n if (ev.shiftKey) {\n result.key = '\\x1b[Z';\n break;\n }\n result.key = '\\t';\n result.cancel = true;\n break;\n case 13:\n // return/enter\n result.key = '\\r';\n result.cancel = true;\n break;\n case 27:\n // escape\n result.key = '\\x1b';\n result.cancel = true;\n break;\n case 37:\n // left-arrow\n if (modifiers) {\n result.key = '\\x1b[1;' + (modifiers + 1) + 'D';\n // HACK: Make Alt + left-arrow behave like Ctrl + left-arrow: move one word backwards\n // http://unix.stackexchange.com/a/108106\n if (result.key == '\\x1b[1;3D') {\n result.key = '\\x1b[1;5D';\n }\n } else if (this.applicationCursor) {\n result.key = '\\x1bOD';\n } else {\n result.key = '\\x1b[D';\n }\n break;\n case 39:\n // right-arrow\n if (modifiers) {\n result.key = '\\x1b[1;' + (modifiers + 1) + 'C';\n // HACK: Make Alt + right-arrow behave like Ctrl + right-arrow: move one word forward\n // http://unix.stackexchange.com/a/108106\n if (result.key == '\\x1b[1;3C') {\n result.key = '\\x1b[1;5C';\n }\n } else if (this.applicationCursor) {\n result.key = '\\x1bOC';\n } else {\n result.key = '\\x1b[C';\n }\n break;\n case 38:\n // up-arrow\n if (modifiers) {\n result.key = '\\x1b[1;' + (modifiers + 1) + 'A';\n // HACK: Make Alt + up-arrow behave like Ctrl + up-arrow\n // http://unix.stackexchange.com/a/108106\n if (result.key == '\\x1b[1;3A') {\n result.key = '\\x1b[1;5A';\n }\n } else if (this.applicationCursor) {\n result.key = '\\x1bOA';\n } else {\n result.key = '\\x1b[A';\n }\n break;\n case 40:\n // down-arrow\n if (modifiers) {\n result.key = '\\x1b[1;' + (modifiers + 1) + 'B';\n // HACK: Make Alt + down-arrow behave like Ctrl + down-arrow\n // http://unix.stackexchange.com/a/108106\n if (result.key == '\\x1b[1;3B') {\n result.key = '\\x1b[1;5B';\n }\n } else if (this.applicationCursor) {\n result.key = '\\x1bOB';\n } else {\n result.key = '\\x1b[B';\n }\n break;\n case 45:\n // insert\n if (!ev.shiftKey && !ev.ctrlKey) {\n // <Ctrl> or <Shift> + <Insert> are used to\n // copy-paste on some systems.\n result.key = '\\x1b[2~';\n }\n break;\n case 46:\n // delete\n if (modifiers) {\n result.key = '\\x1b[3;' + (modifiers + 1) + '~';\n } else {\n result.key = '\\x1b[3~';\n }\n break;\n case 36:\n // home\n if (modifiers)\n result.key = '\\x1b[1;' + (modifiers + 1) + 'H';\n else if (this.applicationCursor)\n result.key = '\\x1bOH';\n else\n result.key = '\\x1b[H';\n break;\n case 35:\n // end\n if (modifiers)\n result.key = '\\x1b[1;' + (modifiers + 1) + 'F';\n else if (this.applicationCursor)\n result.key = '\\x1bOF';\n else\n result.key = '\\x1b[F';\n break;\n case 33:\n // page up\n if (ev.shiftKey) {\n result.scrollDisp = -(this.rows - 1);\n } else {\n result.key = '\\x1b[5~';\n }\n break;\n case 34:\n // page down\n if (ev.shiftKey) {\n result.scrollDisp = this.rows - 1;\n } else {\n result.key = '\\x1b[6~';\n }\n break;\n case 112:\n // F1-F12\n if (modifiers) {\n result.key = '\\x1b[1;' + (modifiers + 1) + 'P';\n } else {\n result.key = '\\x1bOP';\n }\n break;\n case 113:\n if (modifiers) {\n result.key = '\\x1b[1;' + (modifiers + 1) + 'Q';\n } else {\n result.key = '\\x1bOQ';\n }\n break;\n case 114:\n if (modifiers) {\n result.key = '\\x1b[1;' + (modifiers + 1) + 'R';\n } else {\n result.key = '\\x1bOR';\n }\n break;\n case 115:\n if (modifiers) {\n result.key = '\\x1b[1;' + (modifiers + 1) + 'S';\n } else {\n result.key = '\\x1bOS';\n }\n break;\n case 116:\n if (modifiers) {\n result.key = '\\x1b[15;' + (modifiers + 1) + '~';\n } else {\n result.key = '\\x1b[15~';\n }\n break;\n case 117:\n if (modifiers) {\n result.key = '\\x1b[17;' + (modifiers + 1) + '~';\n } else {\n result.key = '\\x1b[17~';\n }\n break;\n case 118:\n if (modifiers) {\n result.key = '\\x1b[18;' + (modifiers + 1) + '~';\n } else {\n result.key = '\\x1b[18~';\n }\n break;\n case 119:\n if (modifiers) {\n result.key = '\\x1b[19;' + (modifiers + 1) + '~';\n } else {\n result.key = '\\x1b[19~';\n }\n break;\n case 120:\n if (modifiers) {\n result.key = '\\x1b[20;' + (modifiers + 1) + '~';\n } else {\n result.key = '\\x1b[20~';\n }\n break;\n case 121:\n if (modifiers) {\n result.key = '\\x1b[21;' + (modifiers + 1) + '~';\n } else {\n result.key = '\\x1b[21~';\n }\n break;\n case 122:\n if (modifiers) {\n result.key = '\\x1b[23;' + (modifiers + 1) + '~';\n } else {\n result.key = '\\x1b[23~';\n }\n break;\n case 123:\n if (modifiers) {\n result.key = '\\x1b[24;' + (modifiers + 1) + '~';\n } else {\n result.key = '\\x1b[24~';\n }\n break;\n default:\n // a-z and space\n if (ev.ctrlKey && !ev.shiftKey && !ev.altKey && !ev.metaKey) {\n if (ev.keyCode >= 65 && ev.keyCode <= 90) {\n result.key = String.fromCharCode(ev.keyCode - 64);\n } else if (ev.keyCode === 32) {\n // NUL\n result.key = String.fromCharCode(0);\n } else if (ev.keyCode >= 51 && ev.keyCode <= 55) {\n // escape, file sep, group sep, record sep, unit sep\n result.key = String.fromCharCode(ev.keyCode - 51 + 27);\n } else if (ev.keyCode === 56) {\n // delete\n result.key = String.fromCharCode(127);\n } else if (ev.keyCode === 219) {\n // ^[ - escape\n result.key = String.fromCharCode(27);\n } else if (ev.keyCode === 221) {\n // ^] - group sep\n result.key = String.fromCharCode(29);\n }\n } else if (!this.browser.isMac && ev.altKey && !ev.ctrlKey && !ev.metaKey) {\n // On Mac this is a third level shift. Use <Esc> instead.\n if (ev.keyCode >= 65 && ev.keyCode <= 90) {\n result.key = '\\x1b' + String.fromCharCode(ev.keyCode + 32);\n } else if (ev.keyCode === 192) {\n result.key = '\\x1b`';\n } else if (ev.keyCode >= 48 && ev.keyCode <= 57) {\n result.key = '\\x1b' + (ev.keyCode - 48);\n }\n }\n break;\n }\n return result;\n};\n\n/**\n * Set the G level of the terminal\n * @param g\n */\nTerminal.prototype.setgLevel = function(g) {\n this.glevel = g;\n this.charset = this.charsets[g];\n};\n\n/**\n * Set the charset for the given G level of the terminal\n * @param g\n * @param charset\n */\nTerminal.prototype.setgCharset = function(g, charset) {\n this.charsets[g] = charset;\n if (this.glevel === g) {\n this.charset = charset;\n }\n};\n\n/**\n * Handle a keypress event.\n * Key Resources:\n * - https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent\n * @param {KeyboardEvent} ev The keypress event to be handled.\n */\nTerminal.prototype.keyPress = function(ev) {\n var key;\n\n this.cancel(ev);\n\n if (ev.charCode) {\n key = ev.charCode;\n } else if (ev.which == null) {\n key = ev.keyCode;\n } else if (ev.which !== 0 && ev.charCode !== 0) {\n key = ev.which;\n } else {\n return false;\n }\n\n if (!key || (\n (ev.altKey || ev.ctrlKey || ev.metaKey) && !isThirdLevelShift(this, ev)\n )) {\n return false;\n }\n\n key = String.fromCharCode(key);\n\n this.emit('keypress', key, ev);\n this.emit('key', key, ev);\n this.showCursor();\n this.handler(key);\n\n return false;\n};\n\n/**\n * Send data for handling to the terminal\n * @param {string} data\n */\nTerminal.prototype.send = function(data) {\n var self = this;\n\n if (!this.queue) {\n setTimeout(function() {\n self.handler(self.queue);\n self.queue = '';\n }, 1);\n }\n\n this.queue += data;\n};\n\n/**\n * Ring the bell.\n * Note: We could do sweet things with webaudio here\n */\nTerminal.prototype.bell = function() {\n if (!this.visualBell) return;\n var self = this;\n this.element.style.borderColor = 'white';\n setTimeout(function() {\n self.element.style.borderColor = '';\n }, 10);\n if (this.popOnBell) this.focus();\n};\n\n/**\n * Log the current state to the console.\n */\nTerminal.prototype.log = function() {\n if (!this.debug) return;\n if (!this.context.console || !this.context.console.log) return;\n var args = Array.prototype.slice.call(arguments);\n this.context.console.log.apply(this.context.console, args);\n};\n\n/**\n * Log the current state as error to the console.\n */\nTerminal.prototype.error = function() {\n if (!this.debug) return;\n if (!this.context.console || !this.context.console.error) return;\n var args = Array.prototype.slice.call(arguments);\n this.context.console.error.apply(this.context.console, args);\n};\n\n/**\n * Resizes the terminal.\n *\n * @param {number} x The number of columns to resize to.\n * @param {number} y The number of rows to resize to.\n */\nTerminal.prototype.resize = function(x, y) {\n var line\n , el\n , i\n , j\n , ch\n , addToY;\n\n if (x === this.cols && y === this.rows) {\n return;\n }\n\n if (x < 1) x = 1;\n if (y < 1) y = 1;\n\n // resize cols\n j = this.cols;\n if (j < x) {\n ch = [this.defAttr, ' ', 1]; // does xterm use the default attr?\n i = this.lines.length;\n while (i--) {\n while (this.lines[i].length < x) {\n this.lines[i].push(ch);\n }\n }\n } else { // (j > x)\n i = this.lines.length;\n while (i--) {\n while (this.lines[i].length > x) {\n this.lines[i].pop();\n }\n }\n }\n this.setupStops(j);\n this.cols = x;\n\n // resize rows\n j = this.rows;\n addToY = 0;\n if (j < y) {\n el = this.element;\n while (j++ < y) {\n // y is rows, not this.y\n if (this.lines.length < y + this.ybase) {\n if (this.ybase > 0 && this.lines.length <= this.ybase + this.y + addToY + 1) {\n // There is room above the buffer and there are no empty elements below the line,\n // scroll up\n this.ybase--;\n addToY++\n if (this.ydisp > 0) {\n // Viewport is at the top of the buffer, must increase downwards\n this.ydisp--;\n }\n } else {\n // Add a blank line if there is no buffer left at the top to scroll to, or if there\n // are blank lines after the cursor\n this.lines.push(this.blankLine());\n }\n }\n if (this.children.length < y) {\n this.insertRow();\n }\n }\n } else { // (j > y)\n while (j-- > y) {\n if (this.lines.length > y + this.ybase) {\n if (this.lines.length > this.ybase + this.y + 1) {\n // The line is a blank line below the cursor, remove it\n this.lines.pop();\n } else {\n // The line is the cursor, scroll down\n this.ybase++;\n this.ydisp++;\n }\n }\n if (this.children.length > y) {\n el = this.children.shift();\n if (!el) continue;\n el.parentNode.removeChild(el);\n }\n }\n }\n this.rows = y;\n\n // Make sure that the cursor stays on screen\n if (this.y >= y) {\n this.y = y - 1;\n }\n if (addToY) {\n this.y += addToY;\n }\n\n if (this.x >= x) {\n this.x = x - 1;\n }\n\n this.scrollTop = 0;\n this.scrollBottom = y - 1;\n\n this.refresh(0, this.rows - 1);\n\n this.normal = null;\n\n this.geometry = [this.cols, this.rows];\n this.emit('resize', {terminal: this, cols: x, rows: y});\n};\n\n/**\n * Updates the range of rows to refresh\n * @param {number} y The number of rows to refresh next.\n */\nTerminal.prototype.updateRange = function(y) {\n if (y < this.refreshStart) this.refreshStart = y;\n if (y > this.refreshEnd) this.refreshEnd = y;\n // if (y > this.refreshEnd) {\n // this.refreshEnd = y;\n // if (y > this.rows - 1) {\n // this.refreshEnd = this.rows - 1;\n // }\n // }\n};\n\n/**\n * Set the range of refreshing to the maximum value\n */\nTerminal.prototype.maxRange = function() {\n this.refreshStart = 0;\n this.refreshEnd = this.rows - 1;\n};\n\n\n\n/**\n * Setup the tab stops.\n * @param {number} i\n */\nTerminal.prototype.setupStops = function(i) {\n if (i != null) {\n if (!this.tabs[i]) {\n i = this.prevStop(i);\n }\n } else {\n this.tabs = {};\n i = 0;\n }\n\n for (; i < this.cols; i += 8) {\n this.tabs[i] = true;\n }\n};\n\n\n/**\n * Move the cursor to the previous tab stop from the given position (default is current).\n * @param {number} x The position to move the cursor to the previous tab stop.\n */\nTerminal.prototype.prevStop = function(x) {\n if (x == null) x = this.x;\n while (!this.tabs[--x] && x > 0);\n return x >= this.cols\n ? this.cols - 1\n : x < 0 ? 0 : x;\n};\n\n\n/**\n * Move the cursor one tab stop forward from the given position (default is current).\n * @param {number} x The position to move the cursor one tab stop forward.\n */\nTerminal.prototype.nextStop = function(x) {\n if (x == null) x = this.x;\n while (!this.tabs[++x] && x < this.cols);\n return x >= this.cols\n ? this.cols - 1\n : x < 0 ? 0 : x;\n};\n\n\n/**\n * Erase in the identified line everything from \"x\" to the end of the line (right).\n * @param {number} x The column from which to start erasing to the end of the line.\n * @param {number} y The line in which to operate.\n */\nTerminal.prototype.eraseRight = function(x, y) {\n var line = this.lines[this.ybase + y]\n , ch = [this.eraseAttr(), ' ', 1]; // xterm\n\n\n for (; x < this.cols; x++) {\n line[x] = ch;\n }\n\n this.updateRange(y);\n};\n\n\n\n/**\n * Erase in the identified line everything from \"x\" to the start of the line (left).\n * @param {number} x The column from which to start erasing to the start of the line.\n * @param {number} y The line in which to operate.\n */\nTerminal.prototype.eraseLeft = function(x, y) {\n var line = this.lines[this.ybase + y]\n , ch = [this.eraseAttr(), ' ', 1]; // xterm\n\n x++;\n while (x--) line[x] = ch;\n\n this.updateRange(y);\n};\n\n/**\n * Clears the entire buffer, making the prompt line the new first line.\n */\nTerminal.prototype.clear = function() {\n if (this.ybase === 0 && this.y === 0) {\n // Don't clear if it's already clear\n return;\n }\n this.lines = [this.lines[this.ybase + this.y]];\n this.ydisp = 0;\n this.ybase = 0;\n this.y = 0;\n for (var i = 1; i < this.rows; i++) {\n this.lines.push(this.blankLine());\n }\n this.refresh(0, this.rows - 1);\n this.emit('scroll', this.ydisp);\n};\n\n/**\n * Erase all content in the given line\n * @param {number} y The line to erase all of its contents.\n */\nTerminal.prototype.eraseLine = function(y) {\n this.eraseRight(0, y);\n};\n\n\n/**\n * Return the data array of a blank line/\n * @param {number} cur First bunch of data for each \"blank\" character.\n */\nTerminal.prototype.blankLine = function(cur) {\n var attr = cur\n ? this.eraseAttr()\n : this.defAttr;\n\n var ch = [attr, ' ', 1] // width defaults to 1 halfwidth character\n , line = []\n , i = 0;\n\n for (; i < this.cols; i++) {\n line[i] = ch;\n }\n\n return line;\n};\n\n\n/**\n * If cur return the back color xterm feature attribute. Else return defAttr.\n * @param {object} cur\n */\nTerminal.prototype.ch = function(cur) {\n return cur\n ? [this.eraseAttr(), ' ', 1]\n : [this.defAttr, ' ', 1];\n};\n\n\n/**\n * Evaluate if the current erminal is the given argument.\n * @param {object} term The terminal to evaluate\n */\nTerminal.prototype.is = function(term) {\n var name = this.termName;\n return (name + '').indexOf(term) === 0;\n};\n\n\n/**\n * Emit the 'data' event and populate the given data.\n * @param {string} data The data to populate in the event.\n */\nTerminal.prototype.handler = function(data) {\n this.emit('data', data);\n};\n\n\n/**\n * Emit the 'title' event and populate the given title.\n * @param {string} title The title to populate in the event.\n */\nTerminal.prototype.handleTitle = function(title) {\n this.emit('title', title);\n};\n\n\n/**\n * ESC\n */\n\n/**\n * ESC D Index (IND is 0x84).\n */\nTerminal.prototype.index = function() {\n this.y++;\n if (this.y > this.scrollBottom) {\n this.y--;\n this.scroll();\n }\n this.state = normal;\n};\n\n\n/**\n * ESC M Reverse Index (RI is 0x8d).\n */\nTerminal.prototype.reverseIndex = function() {\n var j;\n this.y--;\n if (this.y < this.scrollTop) {\n this.y++;\n // possibly move the code below to term.reverseScroll();\n // test: echo -ne '\\e[1;1H\\e[44m\\eM\\e[0m'\n // blankLine(true) is xterm/linux behavior\n this.lines.splice(this.y + this.ybase, 0, this.blankLine(true));\n j = this.rows - 1 - this.scrollBottom;\n this.lines.splice(this.rows - 1 + this.ybase - j + 1, 1);\n // this.maxRange();\n this.updateRange(this.scrollTop);\n this.updateRange(this.scrollBottom);\n }\n this.state = normal;\n};\n\n\n/**\n * ESC c Full Reset (RIS).\n */\nTerminal.prototype.reset = function() {\n this.options.rows = this.rows;\n this.options.cols = this.cols;\n var customKeydownHandler = this.customKeydownHandler;\n Terminal.call(this, this.options);\n this.customKeydownHandler = customKeydownHandler;\n this.refresh(0, this.rows - 1);\n this.viewport.syncScrollArea();\n};\n\n\n/**\n * ESC H Tab Set (HTS is 0x88).\n */\nTerminal.prototype.tabSet = function() {\n this.tabs[this.x] = true;\n this.state = normal;\n};\n\n\n/**\n * CSI\n */\n\n/**\n * CSI Ps A\n * Cursor Up Ps Times (default = 1) (CUU).\n */\nTerminal.prototype.cursorUp = function(params) {\n var param = params[0];\n if (param < 1) param = 1;\n this.y -= param;\n if (this.y < 0) this.y = 0;\n};\n\n\n/**\n * CSI Ps B\n * Cursor Down Ps Times (default = 1) (CUD).\n */\nTerminal.prototype.cursorDown = function(params) {\n var param = params[0];\n if (param < 1) param = 1;\n this.y += param;\n if (this.y >= this.rows) {\n this.y = this.rows - 1;\n }\n};\n\n\n/**\n * CSI Ps C\n * Cursor Forward Ps Times (default = 1) (CUF).\n */\nTerminal.prototype.cursorForward = function(params) {\n var param = params[0];\n if (param < 1) param = 1;\n this.x += param;\n if (this.x >= this.cols) {\n this.x = this.cols - 1;\n }\n};\n\n\n/**\n * CSI Ps D\n * Cursor Backward Ps Times (default = 1) (CUB).\n */\nTerminal.prototype.cursorBackward = function(params) {\n var param = params[0];\n if (param < 1) param = 1;\n this.x -= param;\n if (this.x < 0) this.x = 0;\n};\n\n\n/**\n * CSI Ps ; Ps H\n * Cursor Position [row;column] (default = [1,1]) (CUP).\n */\nTerminal.prototype.cursorPos = function(params) {\n var row, col;\n\n row = params[0] - 1;\n\n if (params.length >= 2) {\n col = params[1] - 1;\n } else {\n col = 0;\n }\n\n if (row < 0) {\n row = 0;\n } else if (row >= this.rows) {\n row = this.rows - 1;\n }\n\n if (col < 0) {\n col = 0;\n } else if (col >= this.cols) {\n col = this.cols - 1;\n }\n\n this.x = col;\n this.y = row;\n};\n\n\n/**\n * CSI Ps J Erase in Display (ED).\n * Ps = 0 -> Erase Below (default).\n * Ps = 1 -> Erase Above.\n * Ps = 2 -> Erase All.\n * Ps = 3 -> Erase Saved Lines (xterm).\n * CSI ? Ps J\n * Erase in Display (DECSED).\n * Ps = 0 -> Selective Erase Below (default).\n * Ps = 1 -> Selective Erase Above.\n * Ps = 2 -> Selective Erase All.\n */\nTerminal.prototype.eraseInDisplay = function(params) {\n var j;\n switch (params[0]) {\n case 0:\n this.eraseRight(this.x, this.y);\n j = this.y + 1;\n for (; j < this.rows; j++) {\n this.eraseLine(j);\n }\n break;\n case 1:\n this.eraseLeft(this.x, this.y);\n j = this.y;\n while (j--) {\n this.eraseLine(j);\n }\n break;\n case 2:\n j = this.rows;\n while (j--) this.eraseLine(j);\n break;\n case 3:\n ; // no saved lines\n break;\n }\n};\n\n\n/**\n * CSI Ps K Erase in Line (EL).\n * Ps = 0 -> Erase to Right (default).\n * Ps = 1 -> Erase to Left.\n * Ps = 2 -> Erase All.\n * CSI ? Ps K\n * Erase in Line (DECSEL).\n * Ps = 0 -> Selective Erase to Right (default).\n * Ps = 1 -> Selective Erase to Left.\n * Ps = 2 -> Selective Erase All.\n */\nTerminal.prototype.eraseInLine = function(params) {\n switch (params[0]) {\n case 0:\n this.eraseRight(this.x, this.y);\n break;\n case 1:\n this.eraseLeft(this.x, this.y);\n break;\n case 2:\n this.eraseLine(this.y);\n break;\n }\n};\n\n\n/**\n * CSI Pm m Character Attributes (SGR).\n * Ps = 0 -> Normal (default).\n * Ps = 1 -> Bold.\n * Ps = 4 -> Underlined.\n * Ps = 5 -> Blink (appears as Bold).\n * Ps = 7 -> Inverse.\n * Ps = 8 -> Invisible, i.e., hidden (VT300).\n * Ps = 2 2 -> Normal (neither bold nor faint).\n * Ps = 2 4 -> Not underlined.\n * Ps = 2 5 -> Steady (not blinking).\n * Ps = 2 7 -> Positive (not inverse).\n * Ps = 2 8 -> Visible, i.e., not hidden (VT300).\n * Ps = 3 0 -> Set foreground color to Black.\n * Ps = 3 1 -> Set foreground color to Red.\n * Ps = 3 2 -> Set foreground color to Green.\n * Ps = 3 3 -> Set foreground color to Yellow.\n * Ps = 3 4 -> Set foreground color to Blue.\n * Ps = 3 5 -> Set foreground color to Magenta.\n * Ps = 3 6 -> Set foreground color to Cyan.\n * Ps = 3 7 -> Set foreground color to White.\n * Ps = 3 9 -> Set foreground color to default (original).\n * Ps = 4 0 -> Set background color to Black.\n * Ps = 4 1 -> Set background color to Red.\n * Ps = 4 2 -> Set background color to Green.\n * Ps = 4 3 -> Set background color to Yellow.\n * Ps = 4 4 -> Set background color to Blue.\n * Ps = 4 5 -> Set background color to Magenta.\n * Ps = 4 6 -> Set background color to Cyan.\n * Ps = 4 7 -> Set background color to White.\n * Ps = 4 9 -> Set background color to default (original).\n *\n * If 16-color support is compiled, the following apply. Assume\n * that xterm's resources are set so that the ISO color codes are\n * the first 8 of a set of 16. Then the aixterm colors are the\n * bright versions of the ISO colors:\n * Ps = 9 0 -> Set foreground color to Black.\n * Ps = 9 1 -> Set foreground color to Red.\n * Ps = 9 2 -> Set foreground color to Green.\n * Ps = 9 3 -> Set foreground color to Yellow.\n * Ps = 9 4 -> Set foreground color to Blue.\n * Ps = 9 5 -> Set foreground color to Magenta.\n * Ps = 9 6 -> Set foreground color to Cyan.\n * Ps = 9 7 -> Set foreground color to White.\n * Ps = 1 0 0 -> Set background color to Black.\n * Ps = 1 0 1 -> Set background color to Red.\n * Ps = 1 0 2 -> Set background color to Green.\n * Ps = 1 0 3 -> Set background color to Yellow.\n * Ps = 1 0 4 -> Set background color to Blue.\n * Ps = 1 0 5 -> Set background color to Magenta.\n * Ps = 1 0 6 -> Set background color to Cyan.\n * Ps = 1 0 7 -> Set background color to White.\n *\n * If xterm is compiled with the 16-color support disabled, it\n * supports the following, from rxvt:\n * Ps = 1 0 0 -> Set foreground and background color to\n * default.\n *\n * If 88- or 256-color support is compiled, the following apply.\n * Ps = 3 8 ; 5 ; Ps -> Set foreground color to the second\n * Ps.\n * Ps = 4 8 ; 5 ; Ps -> Set background color to the second\n * Ps.\n */\nTerminal.prototype.charAttributes = function(params) {\n // Optimize a single SGR0.\n if (params.length === 1 && params[0] === 0) {\n this.curAttr = this.defAttr;\n return;\n }\n\n var l = params.length\n , i = 0\n , flags = this.curAttr >> 18\n , fg = (this.curAttr >> 9) & 0x1ff\n , bg = this.curAttr & 0x1ff\n , p;\n\n for (; i < l; i++) {\n p = params[i];\n if (p >= 30 && p <= 37) {\n // fg color 8\n fg = p - 30;\n } else if (p >= 40 && p <= 47) {\n // bg color 8\n bg = p - 40;\n } else if (p >= 90 && p <= 97) {\n // fg color 16\n p += 8;\n fg = p - 90;\n } else if (p >= 100 && p <= 107) {\n // bg color 16\n p += 8;\n bg = p - 100;\n } else if (p === 0) {\n // default\n flags = this.defAttr >> 18;\n fg = (this.defAttr >> 9) & 0x1ff;\n bg = this.defAttr & 0x1ff;\n // flags = 0;\n // fg = 0x1ff;\n // bg = 0x1ff;\n } else if (p === 1) {\n // bold text\n flags |= 1;\n } else if (p === 4) {\n // underlined text\n flags |= 2;\n } else if (p === 5) {\n // blink\n flags |= 4;\n } else if (p === 7) {\n // inverse and positive\n // test with: echo -e '\\e[31m\\e[42mhello\\e[7mworld\\e[27mhi\\e[m'\n flags |= 8;\n } else if (p === 8) {\n // invisible\n flags |= 16;\n } else if (p === 22) {\n // not bold\n flags &= ~1;\n } else if (p === 24) {\n // not underlined\n flags &= ~2;\n } else if (p === 25) {\n // not blink\n flags &= ~4;\n } else if (p === 27) {\n // not inverse\n flags &= ~8;\n } else if (p === 28) {\n // not invisible\n flags &= ~16;\n } else if (p === 39) {\n // reset fg\n fg = (this.defAttr >> 9) & 0x1ff;\n } else if (p === 49) {\n // reset bg\n bg = this.defAttr & 0x1ff;\n } else if (p === 38) {\n // fg color 256\n if (params[i + 1] === 2) {\n i += 2;\n fg = matchColor(\n params[i] & 0xff,\n params[i + 1] & 0xff,\n params[i + 2] & 0xff);\n if (fg === -1) fg = 0x1ff;\n i += 2;\n } else if (params[i + 1] === 5) {\n i += 2;\n p = params[i] & 0xff;\n fg = p;\n }\n } else if (p === 48) {\n // bg color 256\n if (params[i + 1] === 2) {\n i += 2;\n bg = matchColor(\n params[i] & 0xff,\n params[i + 1] & 0xff,\n params[i + 2] & 0xff);\n if (bg === -1) bg = 0x1ff;\n i += 2;\n } else if (params[i + 1] === 5) {\n i += 2;\n p = params[i] & 0xff;\n bg = p;\n }\n } else if (p === 100) {\n // reset fg/bg\n fg = (this.defAttr >> 9) & 0x1ff;\n bg = this.defAttr & 0x1ff;\n } else {\n this.error('Unknown SGR attribute: %d.', p);\n }\n }\n\n this.curAttr = (flags << 18) | (fg << 9) | bg;\n};\n\n\n/**\n * CSI Ps n Device Status Report (DSR).\n * Ps = 5 -> Status Report. Result (``OK'') is\n * CSI 0 n\n * Ps = 6 -> Report Cursor Position (CPR) [row;column].\n * Result is\n * CSI r ; c R\n * CSI ? Ps n\n * Device Status Report (DSR, DEC-specific).\n * Ps = 6 -> Report Cursor Position (CPR) [row;column] as CSI\n * ? r ; c R (assumes page is zero).\n * Ps = 1 5 -> Report Printer status as CSI ? 1 0 n (ready).\n * or CSI ? 1 1 n (not ready).\n * Ps = 2 5 -> Report UDK status as CSI ? 2 0 n (unlocked)\n * or CSI ? 2 1 n (locked).\n * Ps = 2 6 -> Report Keyboard status as\n * CSI ? 2 7 ; 1 ; 0 ; 0 n (North American).\n * The last two parameters apply to VT400 & up, and denote key-\n * board ready and LK01 respectively.\n * Ps = 5 3 -> Report Locator status as\n * CSI ? 5 3 n Locator available, if compiled-in, or\n * CSI ? 5 0 n No Locator, if not.\n */\nTerminal.prototype.deviceStatus = function(params) {\n if (!this.prefix) {\n switch (params[0]) {\n case 5:\n // status report\n this.send('\\x1b[0n');\n break;\n case 6:\n // cursor position\n this.send('\\x1b['\n + (this.y + 1)\n + ';'\n + (this.x + 1)\n + 'R');\n break;\n }\n } else if (this.prefix === '?') {\n // modern xterm doesnt seem to\n // respond to any of these except ?6, 6, and 5\n switch (params[0]) {\n case 6:\n // cursor position\n this.send('\\x1b[?'\n + (this.y + 1)\n + ';'\n + (this.x + 1)\n + 'R');\n break;\n case 15:\n // no printer\n // this.send('\\x1b[?11n');\n break;\n case 25:\n // dont support user defined keys\n // this.send('\\x1b[?21n');\n break;\n case 26:\n // north american keyboard\n // this.send('\\x1b[?27;1;0;0n');\n break;\n case 53:\n // no dec locator/mouse\n // this.send('\\x1b[?50n');\n break;\n }\n }\n};\n\n\n/**\n * Additions\n */\n\n/**\n * CSI Ps @\n * Insert Ps (Blank) Character(s) (default = 1) (ICH).\n */\nTerminal.prototype.insertChars = function(params) {\n var param, row, j, ch;\n\n param = params[0];\n if (param < 1) param = 1;\n\n row = this.y + this.ybase;\n j = this.x;\n ch = [this.eraseAttr(), ' ', 1]; // xterm\n\n while (param-- && j < this.cols) {\n this.lines[row].splice(j++, 0, ch);\n this.lines[row].pop();\n }\n};\n\n/**\n * CSI Ps E\n * Cursor Next Line Ps Times (default = 1) (CNL).\n * same as CSI Ps B ?\n */\nTerminal.prototype.cursorNextLine = function(params) {\n var param = params[0];\n if (param < 1) param = 1;\n this.y += param;\n if (this.y >= this.rows) {\n this.y = this.rows - 1;\n }\n this.x = 0;\n};\n\n\n/**\n * CSI Ps F\n * Cursor Preceding Line Ps Times (default = 1) (CNL).\n * reuse CSI Ps A ?\n */\nTerminal.prototype.cursorPrecedingLine = function(params) {\n var param = params[0];\n if (param < 1) param = 1;\n this.y -= param;\n if (this.y < 0) this.y = 0;\n this.x = 0;\n};\n\n\n/**\n * CSI Ps G\n * Cursor Character Absolute [column] (default = [row,1]) (CHA).\n */\nTerminal.prototype.cursorCharAbsolute = function(params) {\n var param = params[0];\n if (param < 1) param = 1;\n this.x = param - 1;\n};\n\n\n/**\n * CSI Ps L\n * Insert Ps Line(s) (default = 1) (IL).\n */\nTerminal.prototype.insertLines = function(params) {\n var param, row, j;\n\n param = params[0];\n if (param < 1) param = 1;\n row = this.y + this.ybase;\n\n j = this.rows - 1 - this.scrollBottom;\n j = this.rows - 1 + this.ybase - j + 1;\n\n while (param--) {\n // test: echo -e '\\e[44m\\e[1L\\e[0m'\n // blankLine(true) - xterm/linux behavior\n this.lines.splice(row, 0, this.blankLine(true));\n this.lines.splice(j, 1);\n }\n\n // this.maxRange();\n this.updateRange(this.y);\n this.updateRange(this.scrollBottom);\n};\n\n\n/**\n * CSI Ps M\n * Delete Ps Line(s) (default = 1) (DL).\n */\nTerminal.prototype.deleteLines = function(params) {\n var param, row, j;\n\n param = params[0];\n if (param < 1) param = 1;\n row = this.y + this.ybase;\n\n j = this.rows - 1 - this.scrollBottom;\n j = this.rows - 1 + this.ybase - j;\n\n while (param--) {\n // test: echo -e '\\e[44m\\e[1M\\e[0m'\n // blankLine(true) - xterm/linux behavior\n this.lines.splice(j + 1, 0, this.blankLine(true));\n this.lines.splice(row, 1);\n }\n\n // this.maxRange();\n this.updateRange(this.y);\n this.updateRange(this.scrollBottom);\n};\n\n\n/**\n * CSI Ps P\n * Delete Ps Character(s) (default = 1) (DCH).\n */\nTerminal.prototype.deleteChars = function(params) {\n var param, row, ch;\n\n param = params[0];\n if (param < 1) param = 1;\n\n row = this.y + this.ybase;\n ch = [this.eraseAttr(), ' ', 1]; // xterm\n\n while (param--) {\n this.lines[row].splice(this.x, 1);\n this.lines[row].push(ch);\n }\n};\n\n/**\n * CSI Ps X\n * Erase Ps Character(s) (default = 1) (ECH).\n */\nTerminal.prototype.eraseChars = function(params) {\n var param, row, j, ch;\n\n param = params[0];\n if (param < 1) param = 1;\n\n row = this.y + this.ybase;\n j = this.x;\n ch = [this.eraseAttr(), ' ', 1]; // xterm\n\n while (param-- && j < this.cols) {\n this.lines[row][j++] = ch;\n }\n};\n\n/**\n * CSI Pm ` Character Position Absolute\n * [column] (default = [row,1]) (HPA).\n */\nTerminal.prototype.charPosAbsolute = function(params) {\n var param = params[0];\n if (param < 1) param = 1;\n this.x = param - 1;\n if (this.x >= this.cols) {\n this.x = this.cols - 1;\n }\n};\n\n\n/**\n * 141 61 a * HPR -\n * Horizontal Position Relative\n * reuse CSI Ps C ?\n */\nTerminal.prototype.HPositionRelative = function(params) {\n var param = params[0];\n if (param < 1) param = 1;\n this.x += param;\n if (this.x >= this.cols) {\n this.x = this.cols - 1;\n }\n};\n\n\n/**\n * CSI Ps c Send Device Attributes (Primary DA).\n * Ps = 0 or omitted -> request attributes from terminal. The\n * response depends on the decTerminalID resource setting.\n * -> CSI ? 1 ; 2 c (``VT100 with Advanced Video Option'')\n * -> CSI ? 1 ; 0 c (``VT101 with No Options'')\n * -> CSI ? 6 c (``VT102'')\n * -> CSI ? 6 0 ; 1 ; 2 ; 6 ; 8 ; 9 ; 1 5 ; c (``VT220'')\n * The VT100-style response parameters do not mean anything by\n * themselves. VT220 parameters do, telling the host what fea-\n * tures the terminal supports:\n * Ps = 1 -> 132-columns.\n * Ps = 2 -> Printer.\n * Ps = 6 -> Selective erase.\n * Ps = 8 -> User-defined keys.\n * Ps = 9 -> National replacement character sets.\n * Ps = 1 5 -> Technical characters.\n * Ps = 2 2 -> ANSI color, e.g., VT525.\n * Ps = 2 9 -> ANSI text locator (i.e., DEC Locator mode).\n * CSI > Ps c\n * Send Device Attributes (Secondary DA).\n * Ps = 0 or omitted -> request the terminal's identification\n * code. The response depends on the decTerminalID resource set-\n * ting. It should apply only to VT220 and up, but xterm extends\n * this to VT100.\n * -> CSI > Pp ; Pv ; Pc c\n * where Pp denotes the terminal type\n * Pp = 0 -> ``VT100''.\n * Pp = 1 -> ``VT220''.\n * and Pv is the firmware version (for xterm, this was originally\n * the XFree86 patch number, starting with 95). In a DEC termi-\n * nal, Pc indicates the ROM cartridge registration number and is\n * always zero.\n * More information:\n * xterm/charproc.c - line 2012, for more information.\n * vim responds with ^[[?0c or ^[[?1c after the terminal's response (?)\n */\nTerminal.prototype.sendDeviceAttributes = function(params) {\n if (params[0] > 0) return;\n\n if (!this.prefix) {\n if (this.is('xterm')\n || this.is('rxvt-unicode')\n || this.is('screen')) {\n this.send('\\x1b[?1;2c');\n } else if (this.is('linux')) {\n this.send('\\x1b[?6c');\n }\n } else if (this.prefix === '>') {\n // xterm and urxvt\n // seem to spit this\n // out around ~370 times (?).\n if (this.is('xterm')) {\n this.send('\\x1b[>0;276;0c');\n } else if (this.is('rxvt-unicode')) {\n this.send('\\x1b[>85;95;0c');\n } else if (this.is('linux')) {\n // not supported by linux console.\n // linux console echoes parameters.\n this.send(params[0] + 'c');\n } else if (this.is('screen')) {\n this.send('\\x1b[>83;40003;0c');\n }\n }\n};\n\n\n/**\n * CSI Pm d\n * Line Position Absolute [row] (default = [1,column]) (VPA).\n */\nTerminal.prototype.linePosAbsolute = function(params) {\n var param = params[0];\n if (param < 1) param = 1;\n this.y = param - 1;\n if (this.y >= this.rows) {\n this.y = this.rows - 1;\n }\n};\n\n\n/**\n * 145 65 e * VPR - Vertical Position Relative\n * reuse CSI Ps B ?\n */\nTerminal.prototype.VPositionRelative = function(params) {\n var param = params[0];\n if (param < 1) param = 1;\n this.y += param;\n if (this.y >= this.rows) {\n this.y = this.rows - 1;\n }\n};\n\n\n/**\n * CSI Ps ; Ps f\n * Horizontal and Vertical Position [row;column] (default =\n * [1,1]) (HVP).\n */\nTerminal.prototype.HVPosition = function(params) {\n if (params[0] < 1) params[0] = 1;\n if (params[1] < 1) params[1] = 1;\n\n this.y = params[0] - 1;\n if (this.y >= this.rows) {\n this.y = this.rows - 1;\n }\n\n this.x = params[1] - 1;\n if (this.x >= this.cols) {\n this.x = this.cols - 1;\n }\n};\n\n\n/**\n * CSI Pm h Set Mode (SM).\n * Ps = 2 -> Keyboard Action Mode (AM).\n * Ps = 4 -> Insert Mode (IRM).\n * Ps = 1 2 -> Send/receive (SRM).\n * Ps = 2 0 -> Automatic Newline (LNM).\n * CSI ? Pm h\n * DEC Private Mode Set (DECSET).\n * Ps = 1 -> Application Cursor Keys (DECCKM).\n * Ps = 2 -> Designate USASCII for character sets G0-G3\n * (DECANM), and set VT100 mode.\n * Ps = 3 -> 132 Column Mode (DECCOLM).\n * Ps = 4 -> Smooth (Slow) Scroll (DECSCLM).\n * Ps = 5 -> Reverse Video (DECSCNM).\n * Ps = 6 -> Origin Mode (DECOM).\n * Ps = 7 -> Wraparound Mode (DECAWM).\n * Ps = 8 -> Auto-repeat Keys (DECARM).\n * Ps = 9 -> Send Mouse X & Y on button press. See the sec-\n * tion Mouse Tracking.\n * Ps = 1 0 -> Show toolbar (rxvt).\n * Ps = 1 2 -> Start Blinking Cursor (att610).\n * Ps = 1 8 -> Print form feed (DECPFF).\n * Ps = 1 9 -> Set print extent to full screen (DECPEX).\n * Ps = 2 5 -> Show Cursor (DECTCEM).\n * Ps = 3 0 -> Show scrollbar (rxvt).\n * Ps = 3 5 -> Enable font-shifting functions (rxvt).\n * Ps = 3 8 -> Enter Tektronix Mode (DECTEK).\n * Ps = 4 0 -> Allow 80 -> 132 Mode.\n * Ps = 4 1 -> more(1) fix (see curses resource).\n * Ps = 4 2 -> Enable Nation Replacement Character sets (DECN-\n * RCM).\n * Ps = 4 4 -> Turn On Margin Bell.\n * Ps = 4 5 -> Reverse-wraparound Mode.\n * Ps = 4 6 -> Start Logging. This is normally disabled by a\n * compile-time option.\n * Ps = 4 7 -> Use Alternate Screen Buffer. (This may be dis-\n * abled by the titeInhibit resource).\n * Ps = 6 6 -> Application keypad (DECNKM).\n * Ps = 6 7 -> Backarrow key sends backspace (DECBKM).\n * Ps = 1 0 0 0 -> Send Mouse X & Y on button press and\n * release. See the section Mouse Tracking.\n * Ps = 1 0 0 1 -> Use Hilite Mouse Tracking.\n * Ps = 1 0 0 2 -> Use Cell Motion Mouse Tracking.\n * Ps = 1 0 0 3 -> Use All Motion Mouse Tracking.\n * Ps = 1 0 0 4 -> Send FocusIn/FocusOut events.\n * Ps = 1 0 0 5 -> Enable Extended Mouse Mode.\n * Ps = 1 0 1 0 -> Scroll to bottom on tty output (rxvt).\n * Ps = 1 0 1 1 -> Scroll to bottom on key press (rxvt).\n * Ps = 1 0 3 4 -> Interpret \"meta\" key, sets eighth bit.\n * (enables the eightBitInput resource).\n * Ps = 1 0 3 5 -> Enable special modifiers for Alt and Num-\n * Lock keys. (This enables the numLock resource).\n * Ps = 1 0 3 6 -> Send ESC when Meta modifies a key. (This\n * enables the metaSendsEscape resource).\n * Ps = 1 0 3 7 -> Send DEL from the editing-keypad Delete\n * key.\n * Ps = 1 0 3 9 -> Send ESC when Alt modifies a key. (This\n * enables the altSendsEscape resource).\n * Ps = 1 0 4 0 -> Keep selection even if not highlighted.\n * (This enables the keepSelection resource).\n * Ps = 1 0 4 1 -> Use the CLIPBOARD selection. (This enables\n * the selectToClipboard resource).\n * Ps = 1 0 4 2 -> Enable Urgency window manager hint when\n * Control-G is received. (This enables the bellIsUrgent\n * resource).\n * Ps = 1 0 4 3 -> Enable raising of the window when Control-G\n * is received. (enables the popOnBell resource).\n * Ps = 1 0 4 7 -> Use Alternate Screen Buffer. (This may be\n * disabled by the titeInhibit resource).\n * Ps = 1 0 4 8 -> Save cursor as in DECSC. (This may be dis-\n * abled by the titeInhibit resource).\n * Ps = 1 0 4 9 -> Save cursor as in DECSC and use Alternate\n * Screen Buffer, clearing it first. (This may be disabled by\n * the titeInhibit resource). This combines the effects of the 1\n * 0 4 7 and 1 0 4 8 modes. Use this with terminfo-based\n * applications rather than the 4 7 mode.\n * Ps = 1 0 5 0 -> Set terminfo/termcap function-key mode.\n * Ps = 1 0 5 1 -> Set Sun function-key mode.\n * Ps = 1 0 5 2 -> Set HP function-key mode.\n * Ps = 1 0 5 3 -> Set SCO function-key mode.\n * Ps = 1 0 6 0 -> Set legacy keyboard emulation (X11R6).\n * Ps = 1 0 6 1 -> Set VT220 keyboard emulation.\n * Ps = 2 0 0 4 -> Set bracketed paste mode.\n * Modes:\n * http: *vt100.net/docs/vt220-rm/chapter4.html\n */\nTerminal.prototype.setMode = function(params) {\n if (typeof params === 'object') {\n var l = params.length\n , i = 0;\n\n for (; i < l; i++) {\n this.setMode(params[i]);\n }\n\n return;\n }\n\n if (!this.prefix) {\n switch (params) {\n case 4:\n this.insertMode = true;\n break;\n case 20:\n //this.convertEol = true;\n break;\n }\n } else if (this.prefix === '?') {\n switch (params) {\n case 1:\n this.applicationCursor = true;\n break;\n case 2:\n this.setgCharset(0, Terminal.charsets.US);\n this.setgCharset(1, Terminal.charsets.US);\n this.setgCharset(2, Terminal.charsets.US);\n this.setgCharset(3, Terminal.charsets.US);\n // set VT100 mode here\n break;\n case 3: // 132 col mode\n this.savedCols = this.cols;\n this.resize(132, this.rows);\n break;\n case 6:\n this.originMode = true;\n break;\n case 7:\n this.wraparoundMode = true;\n break;\n case 12:\n // this.cursorBlink = true;\n break;\n case 66:\n this.log('Serial port requested application keypad.');\n this.applicationKeypad = true;\n this.viewport.syncScrollArea();\n break;\n case 9: // X10 Mouse\n // no release, no motion, no wheel, no modifiers.\n case 1000: // vt200 mouse\n // no motion.\n // no modifiers, except control on the wheel.\n case 1002: // button event mouse\n case 1003: // any event mouse\n // any event - sends motion events,\n // even if there is no button held down.\n this.x10Mouse = params === 9;\n this.vt200Mouse = params === 1000;\n this.normalMouse = params > 1000;\n this.mouseEvents = true;\n this.element.style.cursor = 'default';\n this.log('Binding to mouse events.');\n break;\n case 1004: // send focusin/focusout events\n // focusin: ^[[I\n // focusout: ^[[O\n this.sendFocus = true;\n break;\n case 1005: // utf8 ext mode mouse\n this.utfMouse = true;\n // for wide terminals\n // simply encodes large values as utf8 characters\n break;\n case 1006: // sgr ext mode mouse\n this.sgrMouse = true;\n // for wide terminals\n // does not add 32 to fields\n // press: ^[[<b;x;yM\n // release: ^[[<b;x;ym\n break;\n case 1015: // urxvt ext mode mouse\n this.urxvtMouse = true;\n // for wide terminals\n // numbers for fields\n // press: ^[[b;x;yM\n // motion: ^[[b;x;yT\n break;\n case 25: // show cursor\n this.cursorHidden = false;\n break;\n case 1049: // alt screen buffer cursor\n //this.saveCursor();\n ; // FALL-THROUGH\n case 47: // alt screen buffer\n case 1047: // alt screen buffer\n if (!this.normal) {\n var normal = {\n lines: this.lines,\n ybase: this.ybase,\n ydisp: this.ydisp,\n x: this.x,\n y: this.y,\n scrollTop: this.scrollTop,\n scrollBottom: this.scrollBottom,\n tabs: this.tabs\n // XXX save charset(s) here?\n // charset: this.charset,\n // glevel: this.glevel,\n // charsets: this.charsets\n };\n this.reset();\n this.normal = normal;\n this.showCursor();\n }\n break;\n }\n }\n};\n\n/**\n * CSI Pm l Reset Mode (RM).\n * Ps = 2 -> Keyboard Action Mode (AM).\n * Ps = 4 -> Replace Mode (IRM).\n * Ps = 1 2 -> Send/receive (SRM).\n * Ps = 2 0 -> Normal Linefeed (LNM).\n * CSI ? Pm l\n * DEC Private Mode Reset (DECRST).\n * Ps = 1 -> Normal Cursor Keys (DECCKM).\n * Ps = 2 -> Designate VT52 mode (DECANM).\n * Ps = 3 -> 80 Column Mode (DECCOLM).\n * Ps = 4 -> Jump (Fast) Scroll (DECSCLM).\n * Ps = 5 -> Normal Video (DECSCNM).\n * Ps = 6 -> Normal Cursor Mode (DECOM).\n * Ps = 7 -> No Wraparound Mode (DECAWM).\n * Ps = 8 -> No Auto-repeat Keys (DECARM).\n * Ps = 9 -> Don't send Mouse X & Y on button press.\n * Ps = 1 0 -> Hide toolbar (rxvt).\n * Ps = 1 2 -> Stop Blinking Cursor (att610).\n * Ps = 1 8 -> Don't print form feed (DECPFF).\n * Ps = 1 9 -> Limit print to scrolling region (DECPEX).\n * Ps = 2 5 -> Hide Cursor (DECTCEM).\n * Ps = 3 0 -> Don't show scrollbar (rxvt).\n * Ps = 3 5 -> Disable font-shifting functions (rxvt).\n * Ps = 4 0 -> Disallow 80 -> 132 Mode.\n * Ps = 4 1 -> No more(1) fix (see curses resource).\n * Ps = 4 2 -> Disable Nation Replacement Character sets (DEC-\n * NRCM).\n * Ps = 4 4 -> Turn Off Margin Bell.\n * Ps = 4 5 -> No Reverse-wraparound Mode.\n * Ps = 4 6 -> Stop Logging. (This is normally disabled by a\n * compile-time option).\n * Ps = 4 7 -> Use Normal Screen Buffer.\n * Ps = 6 6 -> Numeric keypad (DECNKM).\n * Ps = 6 7 -> Backarrow key sends delete (DECBKM).\n * Ps = 1 0 0 0 -> Don't send Mouse X & Y on button press and\n * release. See the section Mouse Tracking.\n * Ps = 1 0 0 1 -> Don't use Hilite Mouse Tracking.\n * Ps = 1 0 0 2 -> Don't use Cell Motion Mouse Tracking.\n * Ps = 1 0 0 3 -> Don't use All Motion Mouse Tracking.\n * Ps = 1 0 0 4 -> Don't send FocusIn/FocusOut events.\n * Ps = 1 0 0 5 -> Disable Extended Mouse Mode.\n * Ps = 1 0 1 0 -> Don't scroll to bottom on tty output\n * (rxvt).\n * Ps = 1 0 1 1 -> Don't scroll to bottom on key press (rxvt).\n * Ps = 1 0 3 4 -> Don't interpret \"meta\" key. (This disables\n * the eightBitInput resource).\n * Ps = 1 0 3 5 -> Disable special modifiers for Alt and Num-\n * Lock keys. (This disables the numLock resource).\n * Ps = 1 0 3 6 -> Don't send ESC when Meta modifies a key.\n * (This disables the metaSendsEscape resource).\n * Ps = 1 0 3 7 -> Send VT220 Remove from the editing-keypad\n * Delete key.\n * Ps = 1 0 3 9 -> Don't send ESC when Alt modifies a key.\n * (This disables the altSendsEscape resource).\n * Ps = 1 0 4 0 -> Do not keep selection when not highlighted.\n * (This disables the keepSelection resource).\n * Ps = 1 0 4 1 -> Use the PRIMARY selection. (This disables\n * the selectToClipboard resource).\n * Ps = 1 0 4 2 -> Disable Urgency window manager hint when\n * Control-G is received. (This disables the bellIsUrgent\n * resource).\n * Ps = 1 0 4 3 -> Disable raising of the window when Control-\n * G is received. (This disables the popOnBell resource).\n * Ps = 1 0 4 7 -> Use Normal Screen Buffer, clearing screen\n * first if in the Alternate Screen. (This may be disabled by\n * the titeInhibit resource).\n * Ps = 1 0 4 8 -> Restore cursor as in DECRC. (This may be\n * disabled by the titeInhibit resource).\n * Ps = 1 0 4 9 -> Use Normal Screen Buffer and restore cursor\n * as in DECRC. (This may be disabled by the titeInhibit\n * resource). This combines the effects of the 1 0 4 7 and 1 0\n * 4 8 modes. Use this with terminfo-based applications rather\n * than the 4 7 mode.\n * Ps = 1 0 5 0 -> Reset terminfo/termcap function-key mode.\n * Ps = 1 0 5 1 -> Reset Sun function-key mode.\n * Ps = 1 0 5 2 -> Reset HP function-key mode.\n * Ps = 1 0 5 3 -> Reset SCO function-key mode.\n * Ps = 1 0 6 0 -> Reset legacy keyboard emulation (X11R6).\n * Ps = 1 0 6 1 -> Reset keyboard emulation to Sun/PC style.\n * Ps = 2 0 0 4 -> Reset bracketed paste mode.\n */\nTerminal.prototype.resetMode = function(params) {\n if (typeof params === 'object') {\n var l = params.length\n , i = 0;\n\n for (; i < l; i++) {\n this.resetMode(params[i]);\n }\n\n return;\n }\n\n if (!this.prefix) {\n switch (params) {\n case 4:\n this.insertMode = false;\n break;\n case 20:\n //this.convertEol = false;\n break;\n }\n } else if (this.prefix === '?') {\n switch (params) {\n case 1:\n this.applicationCursor = false;\n break;\n case 3:\n if (this.cols === 132 && this.savedCols) {\n this.resize(this.savedCols, this.rows);\n }\n delete this.savedCols;\n break;\n case 6:\n this.originMode = false;\n break;\n case 7:\n this.wraparoundMode = false;\n break;\n case 12:\n // this.cursorBlink = false;\n break;\n case 66:\n this.log('Switching back to normal keypad.');\n this.applicationKeypad = false;\n this.viewport.syncScrollArea();\n break;\n case 9: // X10 Mouse\n case 1000: // vt200 mouse\n case 1002: // button event mouse\n case 1003: // any event mouse\n this.x10Mouse = false;\n this.vt200Mouse = false;\n this.normalMouse = false;\n this.mouseEvents = false;\n this.element.style.cursor = '';\n break;\n case 1004: // send focusin/focusout events\n this.sendFocus = false;\n break;\n case 1005: // utf8 ext mode mouse\n this.utfMouse = false;\n break;\n case 1006: // sgr ext mode mouse\n this.sgrMouse = false;\n break;\n case 1015: // urxvt ext mode mouse\n this.urxvtMouse = false;\n break;\n case 25: // hide cursor\n this.cursorHidden = true;\n break;\n case 1049: // alt screen buffer cursor\n ; // FALL-THROUGH\n case 47: // normal screen buffer\n case 1047: // normal screen buffer - clearing it first\n if (this.normal) {\n this.lines = this.normal.lines;\n this.ybase = this.normal.ybase;\n this.ydisp = this.normal.ydisp;\n this.x = this.normal.x;\n this.y = this.normal.y;\n this.scrollTop = this.normal.scrollTop;\n this.scrollBottom = this.normal.scrollBottom;\n this.tabs = this.normal.tabs;\n this.normal = null;\n // if (params === 1049) {\n // this.x = this.savedX;\n // this.y = this.savedY;\n // }\n this.refresh(0, this.rows - 1);\n this.showCursor();\n }\n break;\n }\n }\n};\n\n\n/**\n * CSI Ps ; Ps r\n * Set Scrolling Region [top;bottom] (default = full size of win-\n * dow) (DECSTBM).\n * CSI ? Pm r\n */\nTerminal.prototype.setScrollRegion = function(params) {\n if (this.prefix) return;\n this.scrollTop = (params[0] || 1) - 1;\n this.scrollBottom = (params[1] || this.rows) - 1;\n this.x = 0;\n this.y = 0;\n};\n\n\n/**\n * CSI s\n * Save cursor (ANSI.SYS).\n */\nTerminal.prototype.saveCursor = function(params) {\n this.savedX = this.x;\n this.savedY = this.y;\n};\n\n\n/**\n * CSI u\n * Restore cursor (ANSI.SYS).\n */\nTerminal.prototype.restoreCursor = function(params) {\n this.x = this.savedX || 0;\n this.y = this.savedY || 0;\n};\n\n\n/**\n * Lesser Used\n */\n\n/**\n * CSI Ps I\n * Cursor Forward Tabulation Ps tab stops (default = 1) (CHT).\n */\nTerminal.prototype.cursorForwardTab = function(params) {\n var param = params[0] || 1;\n while (param--) {\n this.x = this.nextStop();\n }\n};\n\n\n/**\n * CSI Ps S Scroll up Ps lines (default = 1) (SU).\n */\nTerminal.prototype.scrollUp = function(params) {\n var param = params[0] || 1;\n while (param--) {\n this.lines.splice(this.ybase + this.scrollTop, 1);\n this.lines.splice(this.ybase + this.scrollBottom, 0, this.blankLine());\n }\n // this.maxRange();\n this.updateRange(this.scrollTop);\n this.updateRange(this.scrollBottom);\n};\n\n\n/**\n * CSI Ps T Scroll down Ps lines (default = 1) (SD).\n */\nTerminal.prototype.scrollDown = function(params) {\n var param = params[0] || 1;\n while (param--) {\n this.lines.splice(this.ybase + this.scrollBottom, 1);\n this.lines.splice(this.ybase + this.scrollTop, 0, this.blankLine());\n }\n // this.maxRange();\n this.updateRange(this.scrollTop);\n this.updateRange(this.scrollBottom);\n};\n\n\n/**\n * CSI Ps ; Ps ; Ps ; Ps ; Ps T\n * Initiate highlight mouse tracking. Parameters are\n * [func;startx;starty;firstrow;lastrow]. See the section Mouse\n * Tracking.\n */\nTerminal.prototype.initMouseTracking = function(params) {\n // Relevant: DECSET 1001\n};\n\n\n/**\n * CSI > Ps; Ps T\n * Reset one or more features of the title modes to the default\n * value. Normally, \"reset\" disables the feature. It is possi-\n * ble to disable the ability to reset features by compiling a\n * different default for the title modes into xterm.\n * Ps = 0 -> Do not set window/icon labels using hexadecimal.\n * Ps = 1 -> Do not query window/icon labels using hexadeci-\n * mal.\n * Ps = 2 -> Do not set window/icon labels using UTF-8.\n * Ps = 3 -> Do not query window/icon labels using UTF-8.\n * (See discussion of \"Title Modes\").\n */\nTerminal.prototype.resetTitleModes = function(params) {\n ;\n};\n\n\n/**\n * CSI Ps Z Cursor Backward Tabulation Ps tab stops (default = 1) (CBT).\n */\nTerminal.prototype.cursorBackwardTab = function(params) {\n var param = params[0] || 1;\n while (param--) {\n this.x = this.prevStop();\n }\n};\n\n\n/**\n * CSI Ps b Repeat the preceding graphic character Ps times (REP).\n */\nTerminal.prototype.repeatPrecedingCharacter = function(params) {\n var param = params[0] || 1\n , line = this.lines[this.ybase + this.y]\n , ch = line[this.x - 1] || [this.defAttr, ' ', 1];\n\n while (param--) line[this.x++] = ch;\n};\n\n\n/**\n * CSI Ps g Tab Clear (TBC).\n * Ps = 0 -> Clear Current Column (default).\n * Ps = 3 -> Clear All.\n * Potentially:\n * Ps = 2 -> Clear Stops on Line.\n * http://vt100.net/annarbor/aaa-ug/section6.html\n */\nTerminal.prototype.tabClear = function(params) {\n var param = params[0];\n if (param <= 0) {\n delete this.tabs[this.x];\n } else if (param === 3) {\n this.tabs = {};\n }\n};\n\n\n/**\n * CSI Pm i Media Copy (MC).\n * Ps = 0 -> Print screen (default).\n * Ps = 4 -> Turn off printer controller mode.\n * Ps = 5 -> Turn on printer controller mode.\n * CSI ? Pm i\n * Media Copy (MC, DEC-specific).\n * Ps = 1 -> Print line containing cursor.\n * Ps = 4 -> Turn off autoprint mode.\n * Ps = 5 -> Turn on autoprint mode.\n * Ps = 1 0 -> Print composed display, ignores DECPEX.\n * Ps = 1 1 -> Print all pages.\n */\nTerminal.prototype.mediaCopy = function(params) {\n ;\n};\n\n\n/**\n * CSI > Ps; Ps m\n * Set or reset resource-values used by xterm to decide whether\n * to construct escape sequences holding information about the\n * modifiers pressed with a given key. The first parameter iden-\n * tifies the resource to set/reset. The second parameter is the\n * value to assign to the resource. If the second parameter is\n * omitted, the resource is reset to its initial value.\n * Ps = 1 -> modifyCursorKeys.\n * Ps = 2 -> modifyFunctionKeys.\n * Ps = 4 -> modifyOtherKeys.\n * If no parameters are given, all resources are reset to their\n * initial values.\n */\nTerminal.prototype.setResources = function(params) {\n ;\n};\n\n\n/**\n * CSI > Ps n\n * Disable modifiers which may be enabled via the CSI > Ps; Ps m\n * sequence. This corresponds to a resource value of \"-1\", which\n * cannot be set with the other sequence. The parameter identi-\n * fies the resource to be disabled:\n * Ps = 1 -> modifyCursorKeys.\n * Ps = 2 -> modifyFunctionKeys.\n * Ps = 4 -> modifyOtherKeys.\n * If the parameter is omitted, modifyFunctionKeys is disabled.\n * When modifyFunctionKeys is disabled, xterm uses the modifier\n * keys to make an extended sequence of functions rather than\n * adding a parameter to each function key to denote the modi-\n * fiers.\n */\nTerminal.prototype.disableModifiers = function(params) {\n ;\n};\n\n\n/**\n * CSI > Ps p\n * Set resource value pointerMode. This is used by xterm to\n * decide whether to hide the pointer cursor as the user types.\n * Valid values for the parameter:\n * Ps = 0 -> never hide the pointer.\n * Ps = 1 -> hide if the mouse tracking mode is not enabled.\n * Ps = 2 -> always hide the pointer. If no parameter is\n * given, xterm uses the default, which is 1 .\n */\nTerminal.prototype.setPointerMode = function(params) {\n ;\n};\n\n\n/**\n * CSI ! p Soft terminal reset (DECSTR).\n * http://vt100.net/docs/vt220-rm/table4-10.html\n */\nTerminal.prototype.softReset = function(params) {\n this.cursorHidden = false;\n this.insertMode = false;\n this.originMode = false;\n this.wraparoundMode = false; // autowrap\n this.applicationKeypad = false; // ?\n this.viewport.syncScrollArea();\n this.applicationCursor = false;\n this.scrollTop = 0;\n this.scrollBottom = this.rows - 1;\n this.curAttr = this.defAttr;\n this.x = this.y = 0; // ?\n this.charset = null;\n this.glevel = 0; // ??\n this.charsets = [null]; // ??\n};\n\n\n/**\n * CSI Ps$ p\n * Request ANSI mode (DECRQM). For VT300 and up, reply is\n * CSI Ps; Pm$ y\n * where Ps is the mode number as in RM, and Pm is the mode\n * value:\n * 0 - not recognized\n * 1 - set\n * 2 - reset\n * 3 - permanently set\n * 4 - permanently reset\n */\nTerminal.prototype.requestAnsiMode = function(params) {\n ;\n};\n\n\n/**\n * CSI ? Ps$ p\n * Request DEC private mode (DECRQM). For VT300 and up, reply is\n * CSI ? Ps; Pm$ p\n * where Ps is the mode number as in DECSET, Pm is the mode value\n * as in the ANSI DECRQM.\n */\nTerminal.prototype.requestPrivateMode = function(params) {\n ;\n};\n\n\n/**\n * CSI Ps ; Ps \" p\n * Set conformance level (DECSCL). Valid values for the first\n * parameter:\n * Ps = 6 1 -> VT100.\n * Ps = 6 2 -> VT200.\n * Ps = 6 3 -> VT300.\n * Valid values for the second parameter:\n * Ps = 0 -> 8-bit controls.\n * Ps = 1 -> 7-bit controls (always set for VT100).\n * Ps = 2 -> 8-bit controls.\n */\nTerminal.prototype.setConformanceLevel = function(params) {\n ;\n};\n\n\n/**\n * CSI Ps q Load LEDs (DECLL).\n * Ps = 0 -> Clear all LEDS (default).\n * Ps = 1 -> Light Num Lock.\n * Ps = 2 -> Light Caps Lock.\n * Ps = 3 -> Light Scroll Lock.\n * Ps = 2 1 -> Extinguish Num Lock.\n * Ps = 2 2 -> Extinguish Caps Lock.\n * Ps = 2 3 -> Extinguish Scroll Lock.\n */\nTerminal.prototype.loadLEDs = function(params) {\n ;\n};\n\n\n/**\n * CSI Ps SP q\n * Set cursor style (DECSCUSR, VT520).\n * Ps = 0 -> blinking block.\n * Ps = 1 -> blinking block (default).\n * Ps = 2 -> steady block.\n * Ps = 3 -> blinking underline.\n * Ps = 4 -> steady underline.\n */\nTerminal.prototype.setCursorStyle = function(params) {\n ;\n};\n\n\n/**\n * CSI Ps \" q\n * Select character protection attribute (DECSCA). Valid values\n * for the parameter:\n * Ps = 0 -> DECSED and DECSEL can erase (default).\n * Ps = 1 -> DECSED and DECSEL cannot erase.\n * Ps = 2 -> DECSED and DECSEL can erase.\n */\nTerminal.prototype.setCharProtectionAttr = function(params) {\n ;\n};\n\n\n/**\n * CSI ? Pm r\n * Restore DEC Private Mode Values. The value of Ps previously\n * saved is restored. Ps values are the same as for DECSET.\n */\nTerminal.prototype.restorePrivateValues = function(params) {\n ;\n};\n\n\n/**\n * CSI Pt; Pl; Pb; Pr; Ps$ r\n * Change Attributes in Rectangular Area (DECCARA), VT400 and up.\n * Pt; Pl; Pb; Pr denotes the rectangle.\n * Ps denotes the SGR attributes to change: 0, 1, 4, 5, 7.\n * NOTE: xterm doesn't enable this code by default.\n */\nTerminal.prototype.setAttrInRectangle = function(params) {\n var t = params[0]\n , l = params[1]\n , b = params[2]\n , r = params[3]\n , attr = params[4];\n\n var line\n , i;\n\n for (; t < b + 1; t++) {\n line = this.lines[this.ybase + t];\n for (i = l; i < r; i++) {\n line[i] = [attr, line[i][1]];\n }\n }\n\n // this.maxRange();\n this.updateRange(params[0]);\n this.updateRange(params[2]);\n};\n\n\n/**\n * CSI Pc; Pt; Pl; Pb; Pr$ x\n * Fill Rectangular Area (DECFRA), VT420 and up.\n * Pc is the character to use.\n * Pt; Pl; Pb; Pr denotes the rectangle.\n * NOTE: xterm doesn't enable this code by default.\n */\nTerminal.prototype.fillRectangle = function(params) {\n var ch = params[0]\n , t = params[1]\n , l = params[2]\n , b = params[3]\n , r = params[4];\n\n var line\n , i;\n\n for (; t < b + 1; t++) {\n line = this.lines[this.ybase + t];\n for (i = l; i < r; i++) {\n line[i] = [line[i][0], String.fromCharCode(ch)];\n }\n }\n\n // this.maxRange();\n this.updateRange(params[1]);\n this.updateRange(params[3]);\n};\n\n\n/**\n * CSI Ps ; Pu ' z\n * Enable Locator Reporting (DECELR).\n * Valid values for the first parameter:\n * Ps = 0 -> Locator disabled (default).\n * Ps = 1 -> Locator enabled.\n * Ps = 2 -> Locator enabled for one report, then disabled.\n * The second parameter specifies the coordinate unit for locator\n * reports.\n * Valid values for the second parameter:\n * Pu = 0 <- or omitted -> default to character cells.\n * Pu = 1 <- device physical pixels.\n * Pu = 2 <- character cells.\n */\nTerminal.prototype.enableLocatorReporting = function(params) {\n var val = params[0] > 0;\n //this.mouseEvents = val;\n //this.decLocator = val;\n};\n\n\n/**\n * CSI Pt; Pl; Pb; Pr$ z\n * Erase Rectangular Area (DECERA), VT400 and up.\n * Pt; Pl; Pb; Pr denotes the rectangle.\n * NOTE: xterm doesn't enable this code by default.\n */\nTerminal.prototype.eraseRectangle = function(params) {\n var t = params[0]\n , l = params[1]\n , b = params[2]\n , r = params[3];\n\n var line\n , i\n , ch;\n\n ch = [this.eraseAttr(), ' ', 1]; // xterm?\n\n for (; t < b + 1; t++) {\n line = this.lines[this.ybase + t];\n for (i = l; i < r; i++) {\n line[i] = ch;\n }\n }\n\n // this.maxRange();\n this.updateRange(params[0]);\n this.updateRange(params[2]);\n};\n\n\n/**\n * CSI P m SP }\n * Insert P s Column(s) (default = 1) (DECIC), VT420 and up.\n * NOTE: xterm doesn't enable this code by default.\n */\nTerminal.prototype.insertColumns = function() {\n var param = params[0]\n , l = this.ybase + this.rows\n , ch = [this.eraseAttr(), ' ', 1] // xterm?\n , i;\n\n while (param--) {\n for (i = this.ybase; i < l; i++) {\n this.lines[i].splice(this.x + 1, 0, ch);\n this.lines[i].pop();\n }\n }\n\n this.maxRange();\n};\n\n\n/**\n * CSI P m SP ~\n * Delete P s Column(s) (default = 1) (DECDC), VT420 and up\n * NOTE: xterm doesn't enable this code by default.\n */\nTerminal.prototype.deleteColumns = function() {\n var param = params[0]\n , l = this.ybase + this.rows\n , ch = [this.eraseAttr(), ' ', 1] // xterm?\n , i;\n\n while (param--) {\n for (i = this.ybase; i < l; i++) {\n this.lines[i].splice(this.x, 1);\n this.lines[i].push(ch);\n }\n }\n\n this.maxRange();\n};\n\n/**\n * Character Sets\n */\n\nTerminal.charsets = {};\n\n// DEC Special Character and Line Drawing Set.\n// http://vt100.net/docs/vt102-ug/table5-13.html\n// A lot of curses apps use this if they see TERM=xterm.\n// testing: echo -e '\\e(0a\\e(B'\n// The xterm output sometimes seems to conflict with the\n// reference above. xterm seems in line with the reference\n// when running vttest however.\n// The table below now uses xterm's output from vttest.\nTerminal.charsets.SCLD = { // (0\n '`': '\\u25c6', // '◆'\n 'a': '\\u2592', // '▒'\n 'b': '\\u0009', // '\\t'\n 'c': '\\u000c', // '\\f'\n 'd': '\\u000d', // '\\r'\n 'e': '\\u000a', // '\\n'\n 'f': '\\u00b0', // '°'\n 'g': '\\u00b1', // '±'\n 'h': '\\u2424', // '\\u2424' (NL)\n 'i': '\\u000b', // '\\v'\n 'j': '\\u2518', // '┘'\n 'k': '\\u2510', // '┐'\n 'l': '\\u250c', // '┌'\n 'm': '\\u2514', // '└'\n 'n': '\\u253c', // '┼'\n 'o': '\\u23ba', // '⎺'\n 'p': '\\u23bb', // '⎻'\n 'q': '\\u2500', // '─'\n 'r': '\\u23bc', // '⎼'\n 's': '\\u23bd', // '⎽'\n 't': '\\u251c', // '├'\n 'u': '\\u2524', // '┤'\n 'v': '\\u2534', // '┴'\n 'w': '\\u252c', // '┬'\n 'x': '\\u2502', // '│'\n 'y': '\\u2264', // '≤'\n 'z': '\\u2265', // '≥'\n '{': '\\u03c0', // 'π'\n '|': '\\u2260', // '≠'\n '}': '\\u00a3', // '£'\n '~': '\\u00b7' // '·'\n};\n\nTerminal.charsets.UK = null; // (A\nTerminal.charsets.US = null; // (B (USASCII)\nTerminal.charsets.Dutch = null; // (4\nTerminal.charsets.Finnish = null; // (C or (5\nTerminal.charsets.French = null; // (R\nTerminal.charsets.FrenchCanadian = null; // (Q\nTerminal.charsets.German = null; // (K\nTerminal.charsets.Italian = null; // (Y\nTerminal.charsets.NorwegianDanish = null; // (E or (6\nTerminal.charsets.Spanish = null; // (Z\nTerminal.charsets.Swedish = null; // (H or (7\nTerminal.charsets.Swiss = null; // (=\nTerminal.charsets.ISOLatin = null; // /A\n\n/**\n * Helpers\n */\n\nfunction on(el, type, handler, capture) {\n if (!Array.isArray(el)) {\n el = [el];\n }\n el.forEach(function (element) {\n element.addEventListener(type, handler, capture || false);\n });\n}\n\nfunction off(el, type, handler, capture) {\n el.removeEventListener(type, handler, capture || false);\n}\n\nfunction cancel(ev, force) {\n if (!this.cancelEvents && !force) {\n return;\n }\n ev.preventDefault();\n ev.stopPropagation();\n return false;\n}\n\nfunction inherits(child, parent) {\n function f() {\n this.constructor = child;\n }\n f.prototype = parent.prototype;\n child.prototype = new f;\n}\n\n// if bold is broken, we can't\n// use it in the terminal.\nfunction isBoldBroken(document) {\n var body = document.getElementsByTagName('body')[0];\n var el = document.createElement('span');\n el.innerHTML = 'hello world';\n body.appendChild(el);\n var w1 = el.scrollWidth;\n el.style.fontWeight = 'bold';\n var w2 = el.scrollWidth;\n body.removeChild(el);\n return w1 !== w2;\n}\n\nfunction indexOf(obj, el) {\n var i = obj.length;\n while (i--) {\n if (obj[i] === el) return i;\n }\n return -1;\n}\n\nfunction isThirdLevelShift(term, ev) {\n var thirdLevelKey =\n (term.browser.isMac && ev.altKey && !ev.ctrlKey && !ev.metaKey) ||\n (term.browser.isMSWindows && ev.altKey && ev.ctrlKey && !ev.metaKey);\n\n if (ev.type == 'keypress') {\n return thirdLevelKey;\n }\n\n // Don't invoke for arrows, pageDown, home, backspace, etc. (on non-keypress events)\n return thirdLevelKey && (!ev.keyCode || ev.keyCode > 47);\n}\n\nfunction matchColor(r1, g1, b1) {\n var hash = (r1 << 16) | (g1 << 8) | b1;\n\n if (matchColor._cache[hash] != null) {\n return matchColor._cache[hash];\n }\n\n var ldiff = Infinity\n , li = -1\n , i = 0\n , c\n , r2\n , g2\n , b2\n , diff;\n\n for (; i < Terminal.vcolors.length; i++) {\n c = Terminal.vcolors[i];\n r2 = c[0];\n g2 = c[1];\n b2 = c[2];\n\n diff = matchColor.distance(r1, g1, b1, r2, g2, b2);\n\n if (diff === 0) {\n li = i;\n break;\n }\n\n if (diff < ldiff) {\n ldiff = diff;\n li = i;\n }\n }\n\n return matchColor._cache[hash] = li;\n}\n\nmatchColor._cache = {};\n\n// http://stackoverflow.com/questions/1633828\nmatchColor.distance = function(r1, g1, b1, r2, g2, b2) {\n return Math.pow(30 * (r1 - r2), 2)\n + Math.pow(59 * (g1 - g2), 2)\n + Math.pow(11 * (b1 - b2), 2);\n};\n\nfunction each(obj, iter, con) {\n if (obj.forEach) return obj.forEach(iter, con);\n for (var i = 0; i < obj.length; i++) {\n iter.call(con, obj[i], i, obj);\n }\n}\n\nfunction keys(obj) {\n if (Object.keys) return Object.keys(obj);\n var key, keys = [];\n for (key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n keys.push(key);\n }\n }\n return keys;\n}\n\nvar wcwidth = (function(opts) {\n // extracted from https://www.cl.cam.ac.uk/%7Emgk25/ucs/wcwidth.c\n // combining characters\n var COMBINING = [\n [0x0300, 0x036F], [0x0483, 0x0486], [0x0488, 0x0489],\n [0x0591, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2],\n [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0600, 0x0603],\n [0x0610, 0x0615], [0x064B, 0x065E], [0x0670, 0x0670],\n [0x06D6, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED],\n [0x070F, 0x070F], [0x0711, 0x0711], [0x0730, 0x074A],\n [0x07A6, 0x07B0], [0x07EB, 0x07F3], [0x0901, 0x0902],\n [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D],\n [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981],\n [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD],\n [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C],\n [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D],\n [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC],\n [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD],\n [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C],\n [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D],\n [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0],\n [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48],\n [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBC, 0x0CBC],\n [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD],\n [0x0CE2, 0x0CE3], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D],\n [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6],\n [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E],\n [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC],\n [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35],\n [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E],\n [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97],\n [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030],\n [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039],\n [0x1058, 0x1059], [0x1160, 0x11FF], [0x135F, 0x135F],\n [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753],\n [0x1772, 0x1773], [0x17B4, 0x17B5], [0x17B7, 0x17BD],\n [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD],\n [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922],\n [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B],\n [0x1A17, 0x1A18], [0x1B00, 0x1B03], [0x1B34, 0x1B34],\n [0x1B36, 0x1B3A], [0x1B3C, 0x1B3C], [0x1B42, 0x1B42],\n [0x1B6B, 0x1B73], [0x1DC0, 0x1DCA], [0x1DFE, 0x1DFF],\n [0x200B, 0x200F], [0x202A, 0x202E], [0x2060, 0x2063],\n [0x206A, 0x206F], [0x20D0, 0x20EF], [0x302A, 0x302F],\n [0x3099, 0x309A], [0xA806, 0xA806], [0xA80B, 0xA80B],\n [0xA825, 0xA826], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F],\n [0xFE20, 0xFE23], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB],\n [0x10A01, 0x10A03], [0x10A05, 0x10A06], [0x10A0C, 0x10A0F],\n [0x10A38, 0x10A3A], [0x10A3F, 0x10A3F], [0x1D167, 0x1D169],\n [0x1D173, 0x1D182], [0x1D185, 0x1D18B], [0x1D1AA, 0x1D1AD],\n [0x1D242, 0x1D244], [0xE0001, 0xE0001], [0xE0020, 0xE007F],\n [0xE0100, 0xE01EF]\n ];\n // binary search\n function bisearch(ucs) {\n var min = 0;\n var max = COMBINING.length - 1;\n var mid;\n if (ucs < COMBINING[0][0] || ucs > COMBINING[max][1])\n return false;\n while (max >= min) {\n mid = Math.floor((min + max) / 2);\n if (ucs > COMBINING[mid][1])\n min = mid + 1;\n else if (ucs < COMBINING[mid][0])\n max = mid - 1;\n else\n return true;\n }\n return false;\n }\n function wcwidth(ucs) {\n // test for 8-bit control characters\n if (ucs === 0)\n return opts.nul;\n if (ucs < 32 || (ucs >= 0x7f && ucs < 0xa0))\n return opts.control;\n // binary search in table of non-spacing characters\n if (bisearch(ucs))\n return 0;\n // if we arrive here, ucs is not a combining or C0/C1 control character\n return 1 +\n (\n ucs >= 0x1100 &&\n (\n ucs <= 0x115f || // Hangul Jamo init. consonants\n ucs == 0x2329 ||\n ucs == 0x232a ||\n (ucs >= 0x2e80 && ucs <= 0xa4cf && ucs != 0x303f) || // CJK..Yi\n (ucs >= 0xac00 && ucs <= 0xd7a3) || // Hangul Syllables\n (ucs >= 0xf900 && ucs <= 0xfaff) || // CJK Compat Ideographs\n (ucs >= 0xfe10 && ucs <= 0xfe19) || // Vertical forms\n (ucs >= 0xfe30 && ucs <= 0xfe6f) || // CJK Compat Forms\n (ucs >= 0xff00 && ucs <= 0xff60) || // Fullwidth Forms\n (ucs >= 0xffe0 && ucs <= 0xffe6) ||\n (ucs >= 0x20000 && ucs <= 0x2fffd) ||\n (ucs >= 0x30000 && ucs <= 0x3fffd)\n )\n );\n }\n return wcwidth;\n})({nul: 0, control: 0}); // configurable options\n\n/**\n * Expose\n */\n\nTerminal.EventEmitter = EventEmitter;\nTerminal.CompositionHelper = CompositionHelper;\nTerminal.Viewport = Viewport;\nTerminal.inherits = inherits;\n\n/**\n * Adds an event listener to the terminal.\n *\n * @param {string} event The name of the event. TODO: Document all event types\n * @param {function} callback The function to call when the event is triggered.\n */\nTerminal.on = on;\nTerminal.off = off;\nTerminal.cancel = cancel;\n\nmodule.exports = Terminal;\n"
26 ]
27 }