|
@@ -237,7 +237,8 @@ export class Terminal extends Widget implements ITerminal.ITerminal {
|
|
|
* Initialize the terminal object.
|
|
|
*/
|
|
|
private _initializeTerm(): void {
|
|
|
- this._term.on('data', (data: string) => {
|
|
|
+ const term = this._term;
|
|
|
+ term.on('data', (data: string) => {
|
|
|
if (this.isDisposed) {
|
|
|
return;
|
|
|
}
|
|
@@ -247,9 +248,32 @@ export class Terminal extends Widget implements ITerminal.ITerminal {
|
|
|
});
|
|
|
});
|
|
|
|
|
|
- this._term.on('title', (title: string) => {
|
|
|
+ term.on('title', (title: string) => {
|
|
|
this.title.label = title;
|
|
|
});
|
|
|
+
|
|
|
+ term.attachCustomKeyEventHandler(event => {
|
|
|
+ if (
|
|
|
+ (event.ctrlKey || event.metaKey) &&
|
|
|
+ event.key === 'c' &&
|
|
|
+ term.hasSelection()
|
|
|
+ ) {
|
|
|
+ // Return so that the usual OS copy happens
|
|
|
+ // instead of interrupt signal.
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (
|
|
|
+ (event.ctrlKey || event.metaKey) &&
|
|
|
+ event.key === 'v' &&
|
|
|
+ this._options.pasteWithCtrlV
|
|
|
+ ) {
|
|
|
+ // Return so that the usual paste happens.
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -303,7 +327,7 @@ export class Terminal extends Widget implements ITerminal.ITerminal {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private _term: Xterm;
|
|
|
+ private readonly _term: Xterm;
|
|
|
private _needsResize = true;
|
|
|
private _termOpened = false;
|
|
|
private _offsetWidth = -1;
|