Merge branch 'master' into 3579
This commit is contained in:
@@ -179,7 +179,7 @@ Xterm.js is used in several world-class applications to provide great terminal e
|
|||||||
- [**WizardWebssh**](https://gitlab.com/mikeramsey/wizardwebssh): A terminal with Pyqt5 Widget for embedding, which can be used as an ssh client to connect to your ssh servers. It is written in Python, based on tornado, paramiko, and xterm.js.
|
- [**WizardWebssh**](https://gitlab.com/mikeramsey/wizardwebssh): A terminal with Pyqt5 Widget for embedding, which can be used as an ssh client to connect to your ssh servers. It is written in Python, based on tornado, paramiko, and xterm.js.
|
||||||
- [**Wizard Assistant**](https://wizardassistant.com/): Wizard Assistant comes with advanced automation tools, preloaded common and special time-saving commands, and a built-in SSH terminal. Now you can remotely administer, troubleshoot, and analyze any system with ease.
|
- [**Wizard Assistant**](https://wizardassistant.com/): Wizard Assistant comes with advanced automation tools, preloaded common and special time-saving commands, and a built-in SSH terminal. Now you can remotely administer, troubleshoot, and analyze any system with ease.
|
||||||
- [**ucli**](https://github.com/tsadarsh/ucli): Command Line for everyone :family_man_woman_girl_boy: at [www.ucli.tech](https://www.ucli.tech).
|
- [**ucli**](https://github.com/tsadarsh/ucli): Command Line for everyone :family_man_woman_girl_boy: at [www.ucli.tech](https://www.ucli.tech).
|
||||||
- [**Tess**](https://github.com/SquitchYT/Tess/): Simple Terminal Fully Customizable for Everyone.
|
- [**Tess**](https://github.com/SquitchYT/Tess/): Simple Terminal Fully Customizable for Everyone. Discover more at [tessapp.dev](https://tessapp.dev)
|
||||||
- [**HashiCorp Nomad**](https://www.nomadproject.io/): A container orchestrator with the ability to connect to remote tasks via a web interface using websockets and xterm.js.
|
- [**HashiCorp Nomad**](https://www.nomadproject.io/): A container orchestrator with the ability to connect to remote tasks via a web interface using websockets and xterm.js.
|
||||||
- [**TermPair**](https://github.com/cs01/termpair): View and control terminals from your browser with end-to-end encryption
|
- [**TermPair**](https://github.com/cs01/termpair): View and control terminals from your browser with end-to-end encryption
|
||||||
- [**gdbgui**](https://github.com/cs01/gdbgui): Browser-based frontend to gdb (gnu debugger)
|
- [**gdbgui**](https://github.com/cs01/gdbgui): Browser-based frontend to gdb (gnu debugger)
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ function handleLink(event: MouseEvent, uri: string): void {
|
|||||||
interface ILinkProviderOptions {
|
interface ILinkProviderOptions {
|
||||||
hover?(event: MouseEvent, text: string, location: IViewportRange): void;
|
hover?(event: MouseEvent, text: string, location: IViewportRange): void;
|
||||||
leave?(event: MouseEvent, text: string): void;
|
leave?(event: MouseEvent, text: string): void;
|
||||||
|
urlRegex?: RegExp;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class WebLinksAddon implements ITerminalAddon {
|
export class WebLinksAddon implements ITerminalAddon {
|
||||||
@@ -62,7 +63,8 @@ export class WebLinksAddon implements ITerminalAddon {
|
|||||||
|
|
||||||
if (this._useLinkProvider && 'registerLinkProvider' in this._terminal) {
|
if (this._useLinkProvider && 'registerLinkProvider' in this._terminal) {
|
||||||
const options = this._options as ILinkProviderOptions;
|
const options = this._options as ILinkProviderOptions;
|
||||||
this._linkProvider = this._terminal.registerLinkProvider(new WebLinkProvider(this._terminal, strictUrlRegex, this._handler, options));
|
const regex = options.urlRegex || strictUrlRegex;
|
||||||
|
this._linkProvider = this._terminal.registerLinkProvider(new WebLinkProvider(this._terminal, regex, this._handler, options));
|
||||||
} else {
|
} else {
|
||||||
// TODO: This should be removed eventually
|
// TODO: This should be removed eventually
|
||||||
const options = this._options as ILinkMatcherOptions;
|
const options = this._options as ILinkMatcherOptions;
|
||||||
|
|||||||
@@ -14,8 +14,8 @@ import { AttributeData } from 'common/buffer/AttributeData';
|
|||||||
import { channels, rgba } from 'browser/Color';
|
import { channels, rgba } from 'browser/Color';
|
||||||
import { tryDrawCustomChar } from 'browser/renderer/CustomGlyphs';
|
import { tryDrawCustomChar } from 'browser/renderer/CustomGlyphs';
|
||||||
|
|
||||||
// In practice we're probably never going to exhaust a texture this large. For debugging purposes,
|
// For debugging purposes, it can be useful to set this to a really tiny value,
|
||||||
// however, it can be useful to set this to a really tiny value, to verify that LRU eviction works.
|
// to verify that LRU eviction works.
|
||||||
const TEXTURE_WIDTH = 1024;
|
const TEXTURE_WIDTH = 1024;
|
||||||
const TEXTURE_HEIGHT = 1024;
|
const TEXTURE_HEIGHT = 1024;
|
||||||
|
|
||||||
@@ -463,7 +463,7 @@ export class WebglCharAtlas implements IDisposable {
|
|||||||
const clippedImageData = this._clipImageData(imageData, this._workBoundingBox);
|
const clippedImageData = this._clipImageData(imageData, this._workBoundingBox);
|
||||||
|
|
||||||
// Check if there is enough room in the current row and go to next if needed
|
// Check if there is enough room in the current row and go to next if needed
|
||||||
if (this._currentRowX + this._config.scaledCharWidth > TEXTURE_WIDTH) {
|
if (this._currentRowX + rasterizedGlyph.size.x > TEXTURE_WIDTH) {
|
||||||
this._currentRowX = 0;
|
this._currentRowX = 0;
|
||||||
this._currentRowY += this._currentRowHeight;
|
this._currentRowY += this._currentRowHeight;
|
||||||
this._currentRowHeight = 0;
|
this._currentRowHeight = 0;
|
||||||
|
|||||||
@@ -1169,6 +1169,10 @@ export class Terminal extends CoreTerminal implements ITerminal {
|
|||||||
|
|
||||||
this._keyPressHandled = true;
|
this._keyPressHandled = true;
|
||||||
|
|
||||||
|
// The key was handled so clear the dead key state, otherwise certain keystrokes like arrow
|
||||||
|
// keys could be ignored
|
||||||
|
this._unprocessedDeadKey = false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1181,11 +1185,15 @@ export class Terminal extends CoreTerminal implements ITerminal {
|
|||||||
protected _inputEvent(ev: InputEvent): boolean {
|
protected _inputEvent(ev: InputEvent): boolean {
|
||||||
// Only support emoji IMEs when screen reader mode is disabled as the event must bubble up to
|
// Only support emoji IMEs when screen reader mode is disabled as the event must bubble up to
|
||||||
// support reading out character input which can doubling up input characters
|
// support reading out character input which can doubling up input characters
|
||||||
if (ev.data && ev.inputType === 'insertText' && !this.optionsService.options.screenReaderMode) {
|
if (ev.data && ev.inputType === 'insertText' && !ev.composed && !this.optionsService.options.screenReaderMode) {
|
||||||
if (this._keyPressHandled) {
|
if (this._keyPressHandled) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The key was handled so clear the dead key state, otherwise certain keystrokes like arrow
|
||||||
|
// keys could be ignored
|
||||||
|
this._unprocessedDeadKey = false;
|
||||||
|
|
||||||
const text = ev.data;
|
const text = ev.data;
|
||||||
this.coreService.triggerDataEvent(text, true);
|
this.coreService.triggerDataEvent(text, true);
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ export function generateConfig(scaledCharWidth: number, scaledCharHeight: number
|
|||||||
cursor: undefined,
|
cursor: undefined,
|
||||||
cursorAccent: undefined,
|
cursorAccent: undefined,
|
||||||
selection: undefined,
|
selection: undefined,
|
||||||
ansi: colors.ansi
|
ansi: [...colors.ansi]
|
||||||
};
|
};
|
||||||
return {
|
return {
|
||||||
devicePixelRatio: window.devicePixelRatio,
|
devicePixelRatio: window.devicePixelRatio,
|
||||||
|
|||||||
Reference in New Issue
Block a user