Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4cf2f9a847 | ||
|
|
2fce845ea6 | ||
|
|
9914fd9a38 | ||
|
|
a221a3c9f8 | ||
|
|
b1058b9fcc | ||
|
|
4c2508028a | ||
|
|
d516d4df7c | ||
|
|
d20c36dff2 | ||
|
|
a523803d37 | ||
|
|
bbb688313e | ||
|
|
d6c8369630 | ||
|
|
05eb5df93c | ||
|
|
51fe17ee43 | ||
|
|
1d5737f843 | ||
|
|
13103aecb2 | ||
|
|
e9d2c806ba | ||
|
|
932ab00a53 | ||
|
|
6cfd957697 | ||
|
|
f00d8964c2 | ||
|
|
9ef6b52352 |
@@ -6,7 +6,7 @@ Xterm.js supplies a modular, event-based interface that lets developers build ad
|
|||||||
|
|
||||||
Xterm.js serves as foundation for the terminal found at www.sourcelair.com.
|
Xterm.js serves as foundation for the terminal found at www.sourcelair.com.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### Contribution and License Agreement
|
### Contribution and License Agreement
|
||||||
|
|
||||||
@@ -14,6 +14,6 @@ If you contribute code to this project, you are implicitly allowing your code to
|
|||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
Copyright (c) 2014-2015, SourceLair, Ltd (www.sourcelair.com) (MIT License)
|
Copyright (c) 2014-2015, SourceLair, Private Company (www.sourcelair.com) (MIT License)
|
||||||
|
|
||||||
Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)
|
Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)
|
||||||
|
|||||||
+103
-33
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Implements the attach method, that
|
* Implements the attach method, that
|
||||||
* attaches the terminal to a WebSocket stream.
|
* attaches the terminal to a WebSocket stream.
|
||||||
*
|
*
|
||||||
* The bidirectional argument indicates, whether the terminal should
|
* The bidirectional argument indicates, whether the terminal should
|
||||||
* send data to the socket as well and is true, by default.
|
* send data to the socket as well and is true, by default.
|
||||||
*/
|
*/
|
||||||
@@ -15,45 +15,115 @@
|
|||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
* Plain browser environment
|
* Plain browser environment
|
||||||
*/
|
*/
|
||||||
attach(this.Xterm);
|
attach(this.Xterm);
|
||||||
}
|
}
|
||||||
})(function (Xterm) {
|
})(function (Xterm) {
|
||||||
Xterm.prototype.attach = function (socket, bidirectional) {
|
'use strict';
|
||||||
var term = this;
|
|
||||||
|
|
||||||
bidirectional = (typeof bidirectional == 'undefined') ? true : bidirectional;
|
/**
|
||||||
this.socket = socket;
|
* This module provides methods for attaching a terminal to a WebSocket
|
||||||
|
* stream.
|
||||||
|
*
|
||||||
|
* @module xterm/addons/attach/attach
|
||||||
|
*/
|
||||||
|
var exports = {};
|
||||||
|
|
||||||
term._getMessage = function (ev) {
|
/**
|
||||||
term.write(ev.data);
|
* Attaches the given terminal to the given socket.
|
||||||
};
|
*
|
||||||
|
* @param {Xterm} term - The terminal to be attached to the given socket.
|
||||||
term._sendData = function (data) {
|
* @param {WebSocket} socket - The socket to attach the current terminal.
|
||||||
socket.send(data);
|
* @param {boolean} bidirectional - Whether the terminal should send data
|
||||||
};
|
* to the socket as well.
|
||||||
|
* @param {boolean} buffered - Whether the rendering of incoming data
|
||||||
|
* should happen instantly or at a maximum
|
||||||
|
* frequency of 1 rendering per 10ms.
|
||||||
|
*/
|
||||||
|
exports.attach = function (term, socket, bidirectional, buffered) {
|
||||||
|
bidirectional = (typeof bidirectional == 'undefined') ? true : bidirectional;
|
||||||
|
term.socket = socket;
|
||||||
|
|
||||||
socket.addEventListener('message', term._getMessage);
|
term._flushBuffer = function () {
|
||||||
|
term.write(term._attachSocketBuffer);
|
||||||
|
term._attachSocketBuffer = null;
|
||||||
|
clearTimeout(term._attachSocketBufferTimer);
|
||||||
|
term._attachSocketBufferTimer = null;
|
||||||
|
};
|
||||||
|
|
||||||
if (bidirectional) {
|
term._pushToBuffer = function (data) {
|
||||||
this.on('data', term._sendData);
|
if (term._attachSocketBuffer) {
|
||||||
}
|
term._attachSocketBuffer += data;
|
||||||
|
} else {
|
||||||
socket.addEventListener('close', term.detach.bind(term, socket));
|
term._attachSocketBuffer = data;
|
||||||
socket.addEventListener('error', term.detach.bind(term, socket));
|
setTimeout(term._flushBuffer, 10);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
term._getMessage = function (ev) {
|
||||||
|
if (buffered) {
|
||||||
|
term._pushToBuffer(ev.data);
|
||||||
|
} else {
|
||||||
|
term.write(ev.data);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
term._sendData = function (data) {
|
||||||
|
socket.send(data);
|
||||||
|
};
|
||||||
|
|
||||||
|
socket.addEventListener('message', term._getMessage);
|
||||||
|
|
||||||
|
if (bidirectional) {
|
||||||
|
term.on('data', term._sendData);
|
||||||
|
}
|
||||||
|
|
||||||
|
socket.addEventListener('close', term.detach.bind(term, socket));
|
||||||
|
socket.addEventListener('error', term.detach.bind(term, socket));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Detaches the given terminal from the given socket
|
||||||
|
*
|
||||||
|
* @param {Xterm} term - The terminal to be detached from the given socket.
|
||||||
|
* @param {WebSocket} socket - The socket from which to detach the current
|
||||||
|
* terminal.
|
||||||
|
*/
|
||||||
|
exports.detach = function (term, socket) {
|
||||||
|
term.off('data', term._sendData);
|
||||||
|
|
||||||
|
socket = (typeof socket == 'undefined') ? term.socket : socket;
|
||||||
|
|
||||||
|
if (socket) {
|
||||||
|
socket.removeEventListener('message', term._getMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
delete term.socket;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attaches the current terminal to the given socket
|
||||||
|
*
|
||||||
|
* @param {WebSocket} socket - The socket to attach the current terminal.
|
||||||
|
* @param {boolean} bidirectional - Whether the terminal should send data
|
||||||
|
* to the socket as well.
|
||||||
|
* @param {boolean} buffered - Whether the rendering of incoming data
|
||||||
|
* should happen instantly or at a maximum
|
||||||
|
* frequency of 1 rendering per 10ms.
|
||||||
|
*/
|
||||||
|
Xterm.prototype.attach = function (socket, bidirectional, buffered) {
|
||||||
|
return exports.attach(this, socket, bidirectional, buffered);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Detaches the current terminal from the given socket.
|
||||||
|
*
|
||||||
|
* @param {WebSocket} socket - The socket from which to detach the current
|
||||||
|
* terminal.
|
||||||
|
*/
|
||||||
Xterm.prototype.detach = function (socket) {
|
Xterm.prototype.detach = function (socket) {
|
||||||
var term = this;
|
return exports.detach(this, socket);
|
||||||
|
|
||||||
term.off('data', term._sendData);
|
|
||||||
|
|
||||||
socket = (typeof socket == 'undefined') ? term.socket : socket;
|
|
||||||
|
|
||||||
if (socket) {
|
|
||||||
socket.removeEventListener('message', term._getMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
delete term.socket;
|
|
||||||
};
|
};
|
||||||
});
|
|
||||||
|
return exports;
|
||||||
|
});
|
||||||
|
|||||||
+35
-18
@@ -7,14 +7,14 @@
|
|||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
* Plain browser environment
|
* Plain browser environment
|
||||||
*/
|
*/
|
||||||
linkify(this.Xterm);
|
linkify(this.Xterm);
|
||||||
}
|
}
|
||||||
})(function (Xterm) {
|
})(function (Xterm) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This module provides methods for convertings valid URL substrings
|
* This module provides methods for convertings valid URL substrings
|
||||||
* into HTML anchor elements (links), inside a terminal view.
|
* into HTML anchor elements (links), inside a terminal view.
|
||||||
*
|
*
|
||||||
* @module xterm/addons/linkify/linkify
|
* @module xterm/addons/linkify/linkify
|
||||||
@@ -31,8 +31,11 @@
|
|||||||
bodyClause = hostClause + pathClause,
|
bodyClause = hostClause + pathClause,
|
||||||
start = '(?:^|' + negatedDomainCharacterSet + ')(',
|
start = '(?:^|' + negatedDomainCharacterSet + ')(',
|
||||||
end = ')($|' + negatedPathCharacterSet + ')',
|
end = ')($|' + negatedPathCharacterSet + ')',
|
||||||
urlClause = start + protocolClause + '?' + bodyClause + end,
|
lenientUrlClause = start + protocolClause + '?' + bodyClause + end,
|
||||||
urlRegex = new RegExp(urlClause);
|
strictUrlClause = start + protocolClause + bodyClause + end,
|
||||||
|
lenientUrlRegex = new RegExp(lenientUrlClause),
|
||||||
|
strictUrlRegex = new RegExp(strictUrlClause);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts all valid URLs found in the given terminal line into
|
* Converts all valid URLs found in the given terminal line into
|
||||||
@@ -43,10 +46,12 @@
|
|||||||
* @param {Xterm} terminal - The terminal that owns the given line.
|
* @param {Xterm} terminal - The terminal that owns the given line.
|
||||||
* @param {number|HTMLDivElement} line - The terminal line that should get
|
* @param {number|HTMLDivElement} line - The terminal line that should get
|
||||||
* "linkified".
|
* "linkified".
|
||||||
|
* @param {boolean} lenient - The regex type that will be used to identify links. If lenient is
|
||||||
|
* false, the regex requires a protocol clause. Defaults to true.
|
||||||
* @emits linkify
|
* @emits linkify
|
||||||
* @emits linkify:line
|
* @emits linkify:line
|
||||||
*/
|
*/
|
||||||
exports.linkifyTerminalLine = function (terminal, line) {
|
exports.linkifyTerminalLine = function (terminal, line, lenient) {
|
||||||
if (typeof line == 'number') {
|
if (typeof line == 'number') {
|
||||||
line = terminal.rowContainer.children[line];
|
line = terminal.rowContainer.children[line];
|
||||||
} else if (! (line instanceof HTMLDivElement)) {
|
} else if (! (line instanceof HTMLDivElement)) {
|
||||||
@@ -60,7 +65,8 @@
|
|||||||
nodes = line.childNodes;
|
nodes = line.childNodes;
|
||||||
|
|
||||||
for (var j=0; j<nodes.length; j++) {
|
for (var j=0; j<nodes.length; j++) {
|
||||||
var node = nodes[j];
|
var node = nodes[j],
|
||||||
|
match;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Since we cannot access the TextNode's HTML representation
|
* Since we cannot access the TextNode's HTML representation
|
||||||
@@ -79,8 +85,12 @@
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
var match = node.data.match(urlRegex);
|
if (lenient) {
|
||||||
|
match = node.data.match(lenientUrlRegex);
|
||||||
|
} else {
|
||||||
|
match = node.data.match(strictUrlRegex);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If no URL was found in the current text, return.
|
* If no URL was found in the current text, return.
|
||||||
@@ -114,18 +124,21 @@
|
|||||||
* Converts all valid URLs found in the terminal view into hyperlinks.
|
* Converts all valid URLs found in the terminal view into hyperlinks.
|
||||||
*
|
*
|
||||||
* @param {Xterm} terminal - The terminal that should get "linkified".
|
* @param {Xterm} terminal - The terminal that should get "linkified".
|
||||||
|
* @param {boolean} lenient - The regex type that will be used to identify links. If lenient is
|
||||||
|
* false, the regex requires a protocol clause. Defaults to true.
|
||||||
* @emits linkify
|
* @emits linkify
|
||||||
* @emits linkify:line
|
* @emits linkify:line
|
||||||
*/
|
*/
|
||||||
exports.linkify = function (terminal) {
|
exports.linkify = function (terminal, lenient) {
|
||||||
var rows = terminal.rowContainer.children;
|
var rows = terminal.rowContainer.children;
|
||||||
|
|
||||||
|
lenient = (typeof lenient == "boolean") ? lenient : true;
|
||||||
for (var i=0; i<rows.length; i++) {
|
for (var i=0; i<rows.length; i++) {
|
||||||
var line = rows[i];
|
var line = rows[i];
|
||||||
|
|
||||||
exports.linkifyTerminalLine(terminal, line);
|
exports.linkifyTerminalLine(terminal, line, lenient);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This event gets emitted when conversion of all URL substrings to
|
* This event gets emitted when conversion of all URL substrings to
|
||||||
* HTML anchor elements (links) has finished for the current Xterm
|
* HTML anchor elements (links) has finished for the current Xterm
|
||||||
@@ -147,19 +160,23 @@
|
|||||||
* @memberof Xterm
|
* @memberof Xterm
|
||||||
* @param {number|HTMLDivElement} line - The terminal line that should get
|
* @param {number|HTMLDivElement} line - The terminal line that should get
|
||||||
* "linkified".
|
* "linkified".
|
||||||
*/
|
* @param {boolean} lenient - The regex type that will be used to identify links. If lenient is
|
||||||
Xterm.prototype.linkifyTerminalLine = function (line) {
|
* false, the regex requires a protocol clause. Defaults to true.
|
||||||
return exports.linkifyTerminalLine(this, line);
|
*/
|
||||||
|
Xterm.prototype.linkifyTerminalLine = function (line, lenient) {
|
||||||
|
return exports.linkifyTerminalLine(this, line, lenient);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts all valid URLs found in the current terminal into hyperlinks.
|
* Converts all valid URLs found in the current terminal into hyperlinks.
|
||||||
*
|
*
|
||||||
* @memberof Xterm
|
* @memberof Xterm
|
||||||
*/
|
* @param {boolean} lenient - The regex type that will be used to identify links. If lenient is
|
||||||
Xterm.prototype.linkify = function () {
|
* false, the regex requires a protocol clause. Defaults to true.
|
||||||
return exports.linkify(this);
|
*/
|
||||||
|
Xterm.prototype.linkify = function (lenient) {
|
||||||
|
return exports.linkify(this, lenient);
|
||||||
};
|
};
|
||||||
|
|
||||||
return exports;
|
return exports;
|
||||||
});
|
});
|
||||||
|
|||||||
+2
-2
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "xterm.js",
|
"name": "xterm.js",
|
||||||
"version": "0.27",
|
"version": "0.31",
|
||||||
"ignore": ["demo", "docs", "test", ".gitignore"]
|
"ignore": ["demo", "test", ".gitignore"]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"source": {
|
||||||
|
"include": [
|
||||||
|
"src/xterm.js",
|
||||||
|
"addons/attach/attach.js",
|
||||||
|
"addons/fit/fit.js",
|
||||||
|
"addons/fullscreen/fullscreen.js",
|
||||||
|
"addons/linkify/linkify.js"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"opts": {
|
||||||
|
"readme": "README.md"
|
||||||
|
}
|
||||||
|
}
|
||||||
+3
-3
@@ -1,12 +1,12 @@
|
|||||||
var terminalContainer = document.getElementById('terminal-container'),
|
var terminalContainer = document.getElementById('terminal-container'),
|
||||||
term = new Terminal(),
|
term = new Terminal(),
|
||||||
prompt = '> ';
|
shellprompt = '> ';
|
||||||
|
|
||||||
term.open(terminalContainer);
|
term.open(terminalContainer);
|
||||||
term.fit();
|
term.fit();
|
||||||
|
|
||||||
term.prompt = function () {
|
term.prompt = function () {
|
||||||
term.write('\r\n' + prompt);
|
term.write('\r\n' + shellprompt);
|
||||||
};
|
};
|
||||||
|
|
||||||
term.writeln('Welcome to xterm.js');
|
term.writeln('Welcome to xterm.js');
|
||||||
@@ -29,4 +29,4 @@ term.on('key', function (key, ev) {
|
|||||||
} else if (printable) {
|
} else if (printable) {
|
||||||
term.write(key);
|
term.write(key);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
-177
@@ -1,177 +0,0 @@
|
|||||||
# Makefile for Sphinx documentation
|
|
||||||
#
|
|
||||||
|
|
||||||
# You can set these variables from the command line.
|
|
||||||
SPHINXOPTS =
|
|
||||||
SPHINXBUILD = sphinx-build
|
|
||||||
PAPER =
|
|
||||||
BUILDDIR = _build
|
|
||||||
|
|
||||||
# User-friendly check for sphinx-build
|
|
||||||
ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
|
|
||||||
$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Internal variables.
|
|
||||||
PAPEROPT_a4 = -D latex_paper_size=a4
|
|
||||||
PAPEROPT_letter = -D latex_paper_size=letter
|
|
||||||
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
|
|
||||||
# the i18n builder cannot share the environment and doctrees with the others
|
|
||||||
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
|
|
||||||
|
|
||||||
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
|
|
||||||
|
|
||||||
help:
|
|
||||||
@echo "Please use \`make <target>' where <target> is one of"
|
|
||||||
@echo " html to make standalone HTML files"
|
|
||||||
@echo " dirhtml to make HTML files named index.html in directories"
|
|
||||||
@echo " singlehtml to make a single large HTML file"
|
|
||||||
@echo " pickle to make pickle files"
|
|
||||||
@echo " json to make JSON files"
|
|
||||||
@echo " htmlhelp to make HTML files and a HTML help project"
|
|
||||||
@echo " qthelp to make HTML files and a qthelp project"
|
|
||||||
@echo " devhelp to make HTML files and a Devhelp project"
|
|
||||||
@echo " epub to make an epub"
|
|
||||||
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
|
|
||||||
@echo " latexpdf to make LaTeX files and run them through pdflatex"
|
|
||||||
@echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
|
|
||||||
@echo " text to make text files"
|
|
||||||
@echo " man to make manual pages"
|
|
||||||
@echo " texinfo to make Texinfo files"
|
|
||||||
@echo " info to make Texinfo files and run them through makeinfo"
|
|
||||||
@echo " gettext to make PO message catalogs"
|
|
||||||
@echo " changes to make an overview of all changed/added/deprecated items"
|
|
||||||
@echo " xml to make Docutils-native XML files"
|
|
||||||
@echo " pseudoxml to make pseudoxml-XML files for display purposes"
|
|
||||||
@echo " linkcheck to check all external links for integrity"
|
|
||||||
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -rf $(BUILDDIR)/*
|
|
||||||
|
|
||||||
html:
|
|
||||||
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
|
|
||||||
@echo
|
|
||||||
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
|
|
||||||
|
|
||||||
dirhtml:
|
|
||||||
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
|
|
||||||
@echo
|
|
||||||
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
|
|
||||||
|
|
||||||
singlehtml:
|
|
||||||
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
|
|
||||||
@echo
|
|
||||||
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
|
|
||||||
|
|
||||||
pickle:
|
|
||||||
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
|
|
||||||
@echo
|
|
||||||
@echo "Build finished; now you can process the pickle files."
|
|
||||||
|
|
||||||
json:
|
|
||||||
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
|
|
||||||
@echo
|
|
||||||
@echo "Build finished; now you can process the JSON files."
|
|
||||||
|
|
||||||
htmlhelp:
|
|
||||||
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
|
|
||||||
@echo
|
|
||||||
@echo "Build finished; now you can run HTML Help Workshop with the" \
|
|
||||||
".hhp project file in $(BUILDDIR)/htmlhelp."
|
|
||||||
|
|
||||||
qthelp:
|
|
||||||
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
|
|
||||||
@echo
|
|
||||||
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
|
|
||||||
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
|
|
||||||
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/xtermjs.qhcp"
|
|
||||||
@echo "To view the help file:"
|
|
||||||
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/xtermjs.qhc"
|
|
||||||
|
|
||||||
devhelp:
|
|
||||||
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
|
|
||||||
@echo
|
|
||||||
@echo "Build finished."
|
|
||||||
@echo "To view the help file:"
|
|
||||||
@echo "# mkdir -p $$HOME/.local/share/devhelp/xtermjs"
|
|
||||||
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/xtermjs"
|
|
||||||
@echo "# devhelp"
|
|
||||||
|
|
||||||
epub:
|
|
||||||
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
|
|
||||||
@echo
|
|
||||||
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
|
|
||||||
|
|
||||||
latex:
|
|
||||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
|
||||||
@echo
|
|
||||||
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
|
|
||||||
@echo "Run \`make' in that directory to run these through (pdf)latex" \
|
|
||||||
"(use \`make latexpdf' here to do that automatically)."
|
|
||||||
|
|
||||||
latexpdf:
|
|
||||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
|
||||||
@echo "Running LaTeX files through pdflatex..."
|
|
||||||
$(MAKE) -C $(BUILDDIR)/latex all-pdf
|
|
||||||
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
|
|
||||||
|
|
||||||
latexpdfja:
|
|
||||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
|
||||||
@echo "Running LaTeX files through platex and dvipdfmx..."
|
|
||||||
$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
|
|
||||||
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
|
|
||||||
|
|
||||||
text:
|
|
||||||
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
|
|
||||||
@echo
|
|
||||||
@echo "Build finished. The text files are in $(BUILDDIR)/text."
|
|
||||||
|
|
||||||
man:
|
|
||||||
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
|
|
||||||
@echo
|
|
||||||
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
|
|
||||||
|
|
||||||
texinfo:
|
|
||||||
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
|
|
||||||
@echo
|
|
||||||
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
|
|
||||||
@echo "Run \`make' in that directory to run these through makeinfo" \
|
|
||||||
"(use \`make info' here to do that automatically)."
|
|
||||||
|
|
||||||
info:
|
|
||||||
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
|
|
||||||
@echo "Running Texinfo files through makeinfo..."
|
|
||||||
make -C $(BUILDDIR)/texinfo info
|
|
||||||
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
|
|
||||||
|
|
||||||
gettext:
|
|
||||||
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
|
|
||||||
@echo
|
|
||||||
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
|
|
||||||
|
|
||||||
changes:
|
|
||||||
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
|
|
||||||
@echo
|
|
||||||
@echo "The overview file is in $(BUILDDIR)/changes."
|
|
||||||
|
|
||||||
linkcheck:
|
|
||||||
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
|
|
||||||
@echo
|
|
||||||
@echo "Link check complete; look for any errors in the above output " \
|
|
||||||
"or in $(BUILDDIR)/linkcheck/output.txt."
|
|
||||||
|
|
||||||
doctest:
|
|
||||||
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
|
|
||||||
@echo "Testing of doctests in the sources finished, look at the " \
|
|
||||||
"results in $(BUILDDIR)/doctest/output.txt."
|
|
||||||
|
|
||||||
xml:
|
|
||||||
$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
|
|
||||||
@echo
|
|
||||||
@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
|
|
||||||
|
|
||||||
pseudoxml:
|
|
||||||
$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
|
|
||||||
@echo
|
|
||||||
@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
|
|
||||||
-258
@@ -1,258 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
#
|
|
||||||
# xterm.js documentation build configuration file, created by
|
|
||||||
# sphinx-quickstart on Tue Mar 25 17:38:05 2014.
|
|
||||||
#
|
|
||||||
# This file is execfile()d with the current directory set to its
|
|
||||||
# containing dir.
|
|
||||||
#
|
|
||||||
# Note that not all possible configuration values are present in this
|
|
||||||
# autogenerated file.
|
|
||||||
#
|
|
||||||
# All configuration values have a default; values that are commented out
|
|
||||||
# serve to show the default.
|
|
||||||
|
|
||||||
import sys
|
|
||||||
import os
|
|
||||||
|
|
||||||
# If extensions (or modules to document with autodoc) are in another directory,
|
|
||||||
# add these directories to sys.path here. If the directory is relative to the
|
|
||||||
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
|
||||||
#sys.path.insert(0, os.path.abspath('.'))
|
|
||||||
|
|
||||||
# -- General configuration ------------------------------------------------
|
|
||||||
|
|
||||||
# If your documentation needs a minimal Sphinx version, state it here.
|
|
||||||
#needs_sphinx = '1.0'
|
|
||||||
|
|
||||||
# Add any Sphinx extension module names here, as strings. They can be
|
|
||||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
|
||||||
# ones.
|
|
||||||
extensions = []
|
|
||||||
|
|
||||||
# Add any paths that contain templates here, relative to this directory.
|
|
||||||
templates_path = ['_templates']
|
|
||||||
|
|
||||||
# The suffix of source filenames.
|
|
||||||
source_suffix = '.rst'
|
|
||||||
|
|
||||||
# The encoding of source files.
|
|
||||||
#source_encoding = 'utf-8-sig'
|
|
||||||
|
|
||||||
# The master toctree document.
|
|
||||||
master_doc = 'index'
|
|
||||||
|
|
||||||
# General information about the project.
|
|
||||||
project = u'xterm.js'
|
|
||||||
copyright = u'2015, SourceLair Limited'
|
|
||||||
|
|
||||||
# The version info for the project you're documenting, acts as replacement for
|
|
||||||
# |version| and |release|, also used in various other places throughout the
|
|
||||||
# built documents.
|
|
||||||
#
|
|
||||||
# The short X.Y version.
|
|
||||||
version = '0.29'
|
|
||||||
# The full version, including alpha/beta/rc tags.
|
|
||||||
release = '0.29 Alpha'
|
|
||||||
|
|
||||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
|
||||||
# for a list of supported languages.
|
|
||||||
#language = None
|
|
||||||
|
|
||||||
# There are two options for replacing |today|: either, you set today to some
|
|
||||||
# non-false value, then it is used:
|
|
||||||
#today = ''
|
|
||||||
# Else, today_fmt is used as the format for a strftime call.
|
|
||||||
#today_fmt = '%B %d, %Y'
|
|
||||||
|
|
||||||
# List of patterns, relative to source directory, that match files and
|
|
||||||
# directories to ignore when looking for source files.
|
|
||||||
exclude_patterns = ['_build']
|
|
||||||
|
|
||||||
# The reST default role (used for this markup: `text`) to use for all
|
|
||||||
# documents.
|
|
||||||
#default_role = None
|
|
||||||
|
|
||||||
# If true, '()' will be appended to :func: etc. cross-reference text.
|
|
||||||
#add_function_parentheses = True
|
|
||||||
|
|
||||||
# If true, the current module name will be prepended to all description
|
|
||||||
# unit titles (such as .. function::).
|
|
||||||
#add_module_names = True
|
|
||||||
|
|
||||||
# If true, sectionauthor and moduleauthor directives will be shown in the
|
|
||||||
# output. They are ignored by default.
|
|
||||||
#show_authors = False
|
|
||||||
|
|
||||||
# The name of the Pygments (syntax highlighting) style to use.
|
|
||||||
pygments_style = 'sphinx'
|
|
||||||
|
|
||||||
# A list of ignored prefixes for module index sorting.
|
|
||||||
#modindex_common_prefix = []
|
|
||||||
|
|
||||||
# If true, keep warnings as "system message" paragraphs in the built documents.
|
|
||||||
#keep_warnings = False
|
|
||||||
|
|
||||||
|
|
||||||
# -- Options for HTML output ----------------------------------------------
|
|
||||||
|
|
||||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
|
||||||
# a list of builtin themes.
|
|
||||||
html_theme = 'default'
|
|
||||||
|
|
||||||
# Theme options are theme-specific and customize the look and feel of a theme
|
|
||||||
# further. For a list of options available for each theme, see the
|
|
||||||
# documentation.
|
|
||||||
#html_theme_options = {}
|
|
||||||
|
|
||||||
# Add any paths that contain custom themes here, relative to this directory.
|
|
||||||
#html_theme_path = []
|
|
||||||
|
|
||||||
# The name for this set of Sphinx documents. If None, it defaults to
|
|
||||||
# "<project> v<release> documentation".
|
|
||||||
#html_title = None
|
|
||||||
|
|
||||||
# A shorter title for the navigation bar. Default is the same as html_title.
|
|
||||||
#html_short_title = None
|
|
||||||
|
|
||||||
# The name of an image file (relative to this directory) to place at the top
|
|
||||||
# of the sidebar.
|
|
||||||
#html_logo = None
|
|
||||||
|
|
||||||
# The name of an image file (within the static path) to use as favicon of the
|
|
||||||
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
|
|
||||||
# pixels large.
|
|
||||||
#html_favicon = None
|
|
||||||
|
|
||||||
# Add any paths that contain custom static files (such as style sheets) here,
|
|
||||||
# relative to this directory. They are copied after the builtin static files,
|
|
||||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
|
||||||
html_static_path = ['_static']
|
|
||||||
|
|
||||||
# Add any extra paths that contain custom files (such as robots.txt or
|
|
||||||
# .htaccess) here, relative to this directory. These files are copied
|
|
||||||
# directly to the root of the documentation.
|
|
||||||
#html_extra_path = []
|
|
||||||
|
|
||||||
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
|
|
||||||
# using the given strftime format.
|
|
||||||
#html_last_updated_fmt = '%b %d, %Y'
|
|
||||||
|
|
||||||
# If true, SmartyPants will be used to convert quotes and dashes to
|
|
||||||
# typographically correct entities.
|
|
||||||
#html_use_smartypants = True
|
|
||||||
|
|
||||||
# Custom sidebar templates, maps document names to template names.
|
|
||||||
#html_sidebars = {}
|
|
||||||
|
|
||||||
# Additional templates that should be rendered to pages, maps page names to
|
|
||||||
# template names.
|
|
||||||
#html_additional_pages = {}
|
|
||||||
|
|
||||||
# If false, no module index is generated.
|
|
||||||
#html_domain_indices = True
|
|
||||||
|
|
||||||
# If false, no index is generated.
|
|
||||||
#html_use_index = True
|
|
||||||
|
|
||||||
# If true, the index is split into individual pages for each letter.
|
|
||||||
#html_split_index = False
|
|
||||||
|
|
||||||
# If true, links to the reST sources are added to the pages.
|
|
||||||
#html_show_sourcelink = True
|
|
||||||
|
|
||||||
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
|
|
||||||
#html_show_sphinx = True
|
|
||||||
|
|
||||||
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
|
|
||||||
#html_show_copyright = True
|
|
||||||
|
|
||||||
# If true, an OpenSearch description file will be output, and all pages will
|
|
||||||
# contain a <link> tag referring to it. The value of this option must be the
|
|
||||||
# base URL from which the finished HTML is served.
|
|
||||||
#html_use_opensearch = ''
|
|
||||||
|
|
||||||
# This is the file name suffix for HTML files (e.g. ".xhtml").
|
|
||||||
#html_file_suffix = None
|
|
||||||
|
|
||||||
# Output file base name for HTML help builder.
|
|
||||||
htmlhelp_basename = 'xtermjsdoc'
|
|
||||||
|
|
||||||
|
|
||||||
# -- Options for LaTeX output ---------------------------------------------
|
|
||||||
|
|
||||||
latex_elements = {
|
|
||||||
# The paper size ('letterpaper' or 'a4paper').
|
|
||||||
#'papersize': 'letterpaper',
|
|
||||||
|
|
||||||
# The font size ('10pt', '11pt' or '12pt').
|
|
||||||
#'pointsize': '10pt',
|
|
||||||
|
|
||||||
# Additional stuff for the LaTeX preamble.
|
|
||||||
#'preamble': '',
|
|
||||||
}
|
|
||||||
|
|
||||||
# Grouping the document tree into LaTeX files. List of tuples
|
|
||||||
# (source start file, target name, title,
|
|
||||||
# author, documentclass [howto, manual, or own class]).
|
|
||||||
latex_documents = [
|
|
||||||
('index', 'xtermjs.tex', u'xterm.js Documentation',
|
|
||||||
u'sourceLair Limited', 'manual'),
|
|
||||||
]
|
|
||||||
|
|
||||||
# The name of an image file (relative to this directory) to place at the top of
|
|
||||||
# the title page.
|
|
||||||
#latex_logo = None
|
|
||||||
|
|
||||||
# For "manual" documents, if this is true, then toplevel headings are parts,
|
|
||||||
# not chapters.
|
|
||||||
#latex_use_parts = False
|
|
||||||
|
|
||||||
# If true, show page references after internal links.
|
|
||||||
#latex_show_pagerefs = False
|
|
||||||
|
|
||||||
# If true, show URL addresses after external links.
|
|
||||||
#latex_show_urls = False
|
|
||||||
|
|
||||||
# Documents to append as an appendix to all manuals.
|
|
||||||
#latex_appendices = []
|
|
||||||
|
|
||||||
# If false, no module index is generated.
|
|
||||||
#latex_domain_indices = True
|
|
||||||
|
|
||||||
|
|
||||||
# -- Options for manual page output ---------------------------------------
|
|
||||||
|
|
||||||
# One entry per manual page. List of tuples
|
|
||||||
# (source start file, name, description, authors, manual section).
|
|
||||||
man_pages = [
|
|
||||||
('index', 'xtermjs', u'xterm.js Documentation',
|
|
||||||
[u'sourceLair Limited'], 1)
|
|
||||||
]
|
|
||||||
|
|
||||||
# If true, show URL addresses after external links.
|
|
||||||
#man_show_urls = False
|
|
||||||
|
|
||||||
|
|
||||||
# -- Options for Texinfo output -------------------------------------------
|
|
||||||
|
|
||||||
# Grouping the document tree into Texinfo files. List of tuples
|
|
||||||
# (source start file, target name, title, author,
|
|
||||||
# dir menu entry, description, category)
|
|
||||||
texinfo_documents = [
|
|
||||||
('index', 'xtermjs', u'xterm.js Documentation',
|
|
||||||
u'sourceLair Limited', 'xtermjs', 'One line description of project.',
|
|
||||||
'Miscellaneous'),
|
|
||||||
]
|
|
||||||
|
|
||||||
# Documents to append as an appendix to all manuals.
|
|
||||||
#texinfo_appendices = []
|
|
||||||
|
|
||||||
# If false, no module index is generated.
|
|
||||||
#texinfo_domain_indices = True
|
|
||||||
|
|
||||||
# How to display URL addresses: 'footnote', 'no', or 'inline'.
|
|
||||||
#texinfo_show_urls = 'footnote'
|
|
||||||
|
|
||||||
# If true, do not generate a @detailmenu in the "Top" node's menu.
|
|
||||||
#texinfo_no_detailmenu = False
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
------
|
|
||||||
Events
|
|
||||||
------
|
|
||||||
|
|
||||||
focus
|
|
||||||
^^^^^
|
|
||||||
This event is fired, when the Terminal gets focus.
|
|
||||||
|
|
||||||
blur
|
|
||||||
^^^^
|
|
||||||
This event is fired, when the Terminal loses focus.
|
|
||||||
|
|
||||||
open
|
|
||||||
^^^^
|
|
||||||
This event is fired, when the Terminal gets opened into a DOM Element.
|
|
||||||
|
|
||||||
keydown
|
|
||||||
^^^^^^^
|
|
||||||
This event is fired, when the `keydown` DOM Event gets triggered on the Terminal.
|
|
||||||
|
|
||||||
keypress
|
|
||||||
^^^^^^^^
|
|
||||||
This event is fired, when the `keypress` DOM Event gets triggered on the Terminal.
|
|
||||||
|
|
||||||
key
|
|
||||||
^^^
|
|
||||||
This event is fired, when a key is being handled by the Terminal.
|
|
||||||
|
|
||||||
resize
|
|
||||||
^^^^^^
|
|
||||||
This event is being fired, when the Terminal view gets resized by the `resize` method.
|
|
||||||
|
|
||||||
data
|
|
||||||
^^^^
|
|
||||||
This event is being fired, when a chunk of input data gets handled by the terminal.
|
|
||||||
|
|
||||||
copy
|
|
||||||
^^^^
|
|
||||||
This event is fired, when the `copy` DOM Event gets triggered on the Terminal.
|
|
||||||
|
|
||||||
paste
|
|
||||||
^^^^^
|
|
||||||
This event is fired, when the `paste` DOM Event gets triggered on the Terminal.
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
.. xterm.js documentation master file, created by
|
|
||||||
sphinx-quickstart on Tue Mar 25 17:38:05 2014.
|
|
||||||
You can adapt this file completely to your liking, but it should at least
|
|
||||||
contain the root `toctree` directive.
|
|
||||||
|
|
||||||
Welcome to xterm.js's documentation!
|
|
||||||
====================================
|
|
||||||
|
|
||||||
This is the documentation for xterm.js. Xterm.js is a full xterm clone, written completely in JavaScript.
|
|
||||||
|
|
||||||
Xterm.js supplies a modular, event-based interface that lets developers build addons and themes that augment
|
|
||||||
the experience of running a fully-feature terminal inside the browser.
|
|
||||||
|
|
||||||
Xterm.js serves as the foundation for the terminal found at www.sourcelair.com.
|
|
||||||
|
|
||||||
.. image:: screenshot.png
|
|
||||||
|
|
||||||
Getting started
|
|
||||||
^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
.. code-block:: javascript
|
|
||||||
|
|
||||||
var term = new Terminal(),
|
|
||||||
url = 'ws://docker/containers/mycontainer/attach/ws/?stdin=1&stdout=1&stderr=1&logs=1',
|
|
||||||
socket = new WebSocket(url);
|
|
||||||
|
|
||||||
term.open(document.body);
|
|
||||||
term.on('data', function (data) {
|
|
||||||
socket.send(data);
|
|
||||||
});
|
|
||||||
socket.onmessage = function (e) {
|
|
||||||
term.write(e.data);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Contents
|
|
||||||
^^^^^^^^
|
|
||||||
The standard way to create a terminal-based application with xterm.js is to work with its events and
|
|
||||||
methods, that let you manipulate input, output, state and size of the terminal.
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 1
|
|
||||||
|
|
||||||
methods
|
|
||||||
events
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
-------
|
|
||||||
Methods
|
|
||||||
-------
|
|
||||||
|
|
||||||
focus()
|
|
||||||
^^^^^^^
|
|
||||||
Sends focus to the terminal
|
|
||||||
|
|
||||||
blur()
|
|
||||||
^^^^^^
|
|
||||||
Blurs the Terminal
|
|
||||||
|
|
||||||
open(element)
|
|
||||||
^^^^
|
|
||||||
Open the Xterm terminal, inside the given element.
|
|
||||||
|
|
||||||
resize(x, y)
|
|
||||||
^^^^^^^^^^^^
|
|
||||||
Resize the terminal, according to the given columns and rows.
|
|
||||||
|
|
||||||
insertRow(row)
|
|
||||||
^^^^^^^^^^^^^^
|
|
||||||
Insert the given row in the terminal.
|
|
||||||
|
|
||||||
on(event, callback)
|
|
||||||
^^^^^^^^^^^^^^^^^^^
|
|
||||||
Hook the given callback, to the given event.
|
|
||||||
|
|
||||||
off(event, callback)
|
|
||||||
^^^^^^^^^^^^^^^^^^^
|
|
||||||
Remove the Hook of the given callback, from the given event.
|
|
||||||
|
|
||||||
once(event, callback)
|
|
||||||
^^^^^^^^^^^^^^^^^^^
|
|
||||||
Hook the given callback to the given event, for just a single invocation.
|
|
||||||
|
|
||||||
write(data)
|
|
||||||
^^^^^^^^^^^
|
|
||||||
Write the given data to the terminal.
|
|
||||||
|
|
||||||
writeln(data)
|
|
||||||
^^^^^^^^^^^^^
|
|
||||||
Write the given data to the terminal, followed by a carriage return and a new line.
|
|
||||||
|
|
||||||
handler(data)
|
|
||||||
^^^^^^^^^^^^^
|
|
||||||
Fire the data event, for the given data.
|
|
||||||
+5
-1
@@ -532,7 +532,9 @@
|
|||||||
* Create main element container
|
* Create main element container
|
||||||
*/
|
*/
|
||||||
this.element = this.document.createElement('div');
|
this.element = this.document.createElement('div');
|
||||||
this.element.classList.add('terminal', 'xterm', 'xterm-theme-' + this.theme);
|
this.element.classList.add('terminal');
|
||||||
|
this.element.classList.add('xterm');
|
||||||
|
this.element.classList.add('xterm-theme-' + this.theme);
|
||||||
this.element.setAttribute('tabindex', 0);
|
this.element.setAttribute('tabindex', 0);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -2201,6 +2203,7 @@
|
|||||||
// left-arrow
|
// left-arrow
|
||||||
case 37:
|
case 37:
|
||||||
if (ev.altKey) {
|
if (ev.altKey) {
|
||||||
|
this.cancel(ev, true);
|
||||||
key = '\x1bb' // Jump a word back
|
key = '\x1bb' // Jump a word back
|
||||||
break;
|
break;
|
||||||
} else if (this.applicationCursor) {
|
} else if (this.applicationCursor) {
|
||||||
@@ -2212,6 +2215,7 @@
|
|||||||
// right-arrow
|
// right-arrow
|
||||||
case 39:
|
case 39:
|
||||||
if (ev.altKey) {
|
if (ev.altKey) {
|
||||||
|
this.cancel(ev, true);
|
||||||
key = '\x1bf' // Jump a word forward
|
key = '\x1bf' // Jump a word forward
|
||||||
break;
|
break;
|
||||||
} else if (this.applicationCursor) {
|
} else if (this.applicationCursor) {
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 140 KiB After Width: | Height: | Size: 140 KiB |
Reference in New Issue
Block a user