From 665c0a3dd61a867021c09b557605e2d65747d0af Mon Sep 17 00:00:00 2001 From: Javier Godoy <11554739+javier-godoy@users.noreply.github.com> Date: Tue, 27 Dec 2022 15:31:35 -0300 Subject: [PATCH 1/8] build: set version to 2.2.0-SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a1cf116..3b09f69 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flowingcode.addons xterm-console - 2.1.2-SNAPSHOT + 2.2.0-SNAPSHOT XTerm Console Addon Integration of xterm.js for Vaadin Flow From a06db1590282b3c3314ff39d47c72152294ca877 Mon Sep 17 00:00:00 2001 From: Javier Godoy <11554739+javier-godoy@users.noreply.github.com> Date: Tue, 27 Dec 2022 15:31:40 -0300 Subject: [PATCH 2/8] build: upgrade to XTerm version 5.1.0 --- .../java/com/flowingcode/vaadin/addons/xterm/XTermBase.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/flowingcode/vaadin/addons/xterm/XTermBase.java b/src/main/java/com/flowingcode/vaadin/addons/xterm/XTermBase.java index 3817981..c073c0c 100644 --- a/src/main/java/com/flowingcode/vaadin/addons/xterm/XTermBase.java +++ b/src/main/java/com/flowingcode/vaadin/addons/xterm/XTermBase.java @@ -57,7 +57,7 @@ /** Server-side component for the XTerm component. */ @SuppressWarnings("serial") -@NpmPackage(value = "xterm", version = "4.19.0") +@NpmPackage(value = "xterm", version = "5.1.0") @JsModule("./fc-xterm/xterm-element.ts") @CssImport("xterm/css/xterm.css") public abstract class XTermBase extends Component From 4a63eaf808aa4a6267742c2cd94666eb6a9245df Mon Sep 17 00:00:00 2001 From: Javier Godoy <11554739+javier-godoy@users.noreply.github.com> Date: Tue, 27 Dec 2022 15:51:20 -0300 Subject: [PATCH 3/8] build: upgrade to xterm-addon-fit version 0.7.0 --- .../java/com/flowingcode/vaadin/addons/xterm/ITerminalFit.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/flowingcode/vaadin/addons/xterm/ITerminalFit.java b/src/main/java/com/flowingcode/vaadin/addons/xterm/ITerminalFit.java index 6a41cdd..d90d607 100644 --- a/src/main/java/com/flowingcode/vaadin/addons/xterm/ITerminalFit.java +++ b/src/main/java/com/flowingcode/vaadin/addons/xterm/ITerminalFit.java @@ -22,7 +22,7 @@ import com.vaadin.flow.component.HasElement; import com.vaadin.flow.component.dependency.NpmPackage; -@NpmPackage(value = "xterm-addon-fit", version = "0.5.0") +@NpmPackage(value = "xterm-addon-fit", version = "0.7.0") public interface ITerminalFit extends HasElement { default void fit() { From 34d570e41e5cea9788684a04aa0ba450143a1054 Mon Sep 17 00:00:00 2001 From: Javier Godoy <11554739+javier-godoy@users.noreply.github.com> Date: Tue, 27 Dec 2022 16:03:20 -0300 Subject: [PATCH 4/8] refactor: replace ISelectionPosition with IBufferRange See xtermjs/xterm.js#3952 --- .../META-INF/frontend/fc-xterm/xterm-selection-mixin.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/resources/META-INF/frontend/fc-xterm/xterm-selection-mixin.ts b/src/main/resources/META-INF/frontend/fc-xterm/xterm-selection-mixin.ts index 86ba033..9917b92 100644 --- a/src/main/resources/META-INF/frontend/fc-xterm/xterm-selection-mixin.ts +++ b/src/main/resources/META-INF/frontend/fc-xterm/xterm-selection-mixin.ts @@ -97,12 +97,12 @@ class SelectionAddon extends TerminalAddon { let buffer = (terminal.buffer.active as any)._buffer; let range = buffer.getWrappedRangeForLine(buffer.ybase+buffer.y); - let pos = terminal.getSelectionPosition() || {startRow: buffer.ybase+buffer.y, startColumn: buffer.x}; + let pos = terminal.getSelectionPosition() || {start: {y: buffer.ybase+buffer.y, x: buffer.x}}; resetSelection(); ensureSelection(); let dx = range.first * terminal.cols - this.__selectionAnchor!; - if (pos.startRow != range.first || pos.startColumn != promptLength()) { + if (pos.start.y != range.first || pos.start.x != promptLength()) { dx+= promptLength(); } @@ -126,8 +126,7 @@ class SelectionAddon extends TerminalAddon { let buffer = (terminal.buffer.active as any)._buffer; let range = buffer.getWrappedRangeForLine(buffer.ybase+buffer.y); let pos = terminal.getSelectionPosition(); - if (pos && pos.startRow>=range.first && pos.endRow<=range.last) { - //let selectionStart = pos.startRow * terminal.cols + pos.startColumn; + if (pos && pos.start.y>=range.first && pos.end.y<=range.last) { if (!this.__selectionRight) { //cursor backward wrapped terminal.write("\x1b[<" + this.__selectionLength + "L"); From 141578323ab082326b668c123c54c95814613744 Mon Sep 17 00:00:00 2001 From: Javier Godoy <11554739+javier-godoy@users.noreply.github.com> Date: Wed, 28 Dec 2022 12:17:38 -0300 Subject: [PATCH 5/8] docs: document insertfix-mixin algorithm --- .../META-INF/frontend/fc-xterm/xterm-insertfix-mixin.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/resources/META-INF/frontend/fc-xterm/xterm-insertfix-mixin.ts b/src/main/resources/META-INF/frontend/fc-xterm/xterm-insertfix-mixin.ts index b4e513d..fb5b5e5 100644 --- a/src/main/resources/META-INF/frontend/fc-xterm/xterm-insertfix-mixin.ts +++ b/src/main/resources/META-INF/frontend/fc-xterm/xterm-insertfix-mixin.ts @@ -43,6 +43,7 @@ class InsertFixAddon extends TerminalAddon { const printedLength = end-start; let trimmedLength = bufferRow.getTrimmedLength(); + //If the inserted characters would overflow the current liner if (buffer.x!=trimmedLength && trimmedLength+printedLength > bufferRow.length) { let range = buffer.getWrappedRangeForLine(buffer.y + buffer.ybase) range.first = buffer.y + buffer.ybase; @@ -54,7 +55,10 @@ class InsertFixAddon extends TerminalAddon { src = buffer.lines.get(range.last); trimmedLength = src.getTrimmedLength(); } + + //If the inserted characters would overflow the last line in wrapped range if (trimmedLength+printedLength > src.length) { + //Then wrap the next row if (range.last == buffer._rows - 1) { inputHandler._bufferService.scroll(inputHandler._eraseAttrData(), true); } @@ -64,6 +68,8 @@ class InsertFixAddon extends TerminalAddon { inputHandler._dirtyRowService.markDirty(buffer.y+1); } + //Allocate space for the characters to be inserted + //Wrap-move characters in page memory to the next line for (let y=range.last;y>range.first;y--) { let dst = src; src= buffer.lines.get(y-1); From f04a894708aa3655e16d4e45267e00642ce1ccc0 Mon Sep 17 00:00:00 2001 From: Javier Godoy <11554739+javier-godoy@users.noreply.github.com> Date: Wed, 28 Dec 2022 12:18:26 -0300 Subject: [PATCH 6/8] refactor: use _dirtyRowTracker instead of _dirtyRowService Close #70 --- .../META-INF/frontend/fc-xterm/xterm-insertfix-mixin.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/META-INF/frontend/fc-xterm/xterm-insertfix-mixin.ts b/src/main/resources/META-INF/frontend/fc-xterm/xterm-insertfix-mixin.ts index fb5b5e5..e4122a6 100644 --- a/src/main/resources/META-INF/frontend/fc-xterm/xterm-insertfix-mixin.ts +++ b/src/main/resources/META-INF/frontend/fc-xterm/xterm-insertfix-mixin.ts @@ -65,7 +65,7 @@ class InsertFixAddon extends TerminalAddon { const dst = buffer.lines.get(range.last+1); dst.isWrapped = true; dst.copyCellsFrom(src, trimmedLength-printedLength, 0, printedLength); - inputHandler._dirtyRowService.markDirty(buffer.y+1); + inputHandler._dirtyRowTracker.markDirty(buffer.y+1); } //Allocate space for the characters to be inserted @@ -75,7 +75,7 @@ class InsertFixAddon extends TerminalAddon { src= buffer.lines.get(y-1); dst.insertCells(0, printedLength, buffer.getNullCell(inputHandler._eraseAttrData())); dst.copyCellsFrom(src, buffer._cols-printedLength, 0, printedLength); - inputHandler._dirtyRowService.markDirty(y); + inputHandler._dirtyRowTracker.markDirty(y); } } } From 832bf0eaad07727581f3e89d6d68e462f1409f60 Mon Sep 17 00:00:00 2001 From: Javier Godoy <11554739+javier-godoy@users.noreply.github.com> Date: Wed, 28 Dec 2022 16:42:46 -0300 Subject: [PATCH 7/8] refactor: add bellSound and bellStyle as properties of fc-xterm Close #73 --- .../vaadin/addons/xterm/XTermBase.java | 6 ++++- .../frontend/fc-xterm/xterm-element.ts | 22 ++++++++++++++----- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/flowingcode/vaadin/addons/xterm/XTermBase.java b/src/main/java/com/flowingcode/vaadin/addons/xterm/XTermBase.java index c073c0c..e82ce5f 100644 --- a/src/main/java/com/flowingcode/vaadin/addons/xterm/XTermBase.java +++ b/src/main/java/com/flowingcode/vaadin/addons/xterm/XTermBase.java @@ -124,7 +124,11 @@ private CompletableFuture invoke(boolean hasResult, String name, Obje } else { arg = (Serializable) args[0]; } - return executeJs(false, "this.terminal.options[$0]=$1", name, arg); + if (name.equals("bellStyle") || name.equals("bellSound")) { + return executeJs(false, "this[$0]=$1", name, arg); + } else { + return executeJs(false, "this.terminal.options[$0]=$1", name, arg); + } } else if (args == null || args.length == 0) { return executeJs(hasResult, "return this.terminal[$0]()", name); } else if (args.length == 1) { diff --git a/src/main/resources/META-INF/frontend/fc-xterm/xterm-element.ts b/src/main/resources/META-INF/frontend/fc-xterm/xterm-element.ts index ba00c4a..e825f64 100644 --- a/src/main/resources/META-INF/frontend/fc-xterm/xterm-element.ts +++ b/src/main/resources/META-INF/frontend/fc-xterm/xterm-element.ts @@ -136,7 +136,10 @@ export class XTermElement extends LitElement implements TerminalMixin { terminal: Terminal; disabled: boolean = false; node: XTermElement; - + + bellSound: string; + bellStyle: 'none' | 'sound' + customKeyEventHandlers: CustomKeyEventHandlerRegistry; render(): TemplateResult { @@ -150,6 +153,12 @@ export class XTermElement extends LitElement implements TerminalMixin { this.customKeyEventHandlers = new CustomKeyEventHandlerRegistry(); this.terminal = new Terminal(); this.node = this; + + //https://gist.github.com/literallylara/7ece1983fab47365108c47119afb51c7 + //(C) Lara Sophie Schütt 2016, CC0 + for(var i=44100*0.1,d="";i--;)d+=String.fromCharCode(~~((Math.sin(i/44100*2*Math.PI*800)+1)*128)); + this.bellSound = "data:Audio/WAV;base64,"+btoa("RIFFdataWAVEfmt "+atob("EAAAAAEAAQBErAAARKwAAAEACABkYXRh/////w==")+d); + this.bellStyle = 'none'; } connectedCallback() { @@ -163,11 +172,12 @@ export class XTermElement extends LitElement implements TerminalMixin { term.onData(e => { term.write(e.replace(/\r/g,'\x1b[ { + if (this.bellStyle == 'sound') { + new Audio(this.bellSound).play(); + } + }); term.attachCustomKeyEventHandler(ev => { if (ev.type!=='keydown') return false; From d85dc158de606aef1ec57e1a897c18b0f2ced2c7 Mon Sep 17 00:00:00 2001 From: Javier Godoy <11554739+javier-godoy@users.noreply.github.com> Date: Thu, 23 Feb 2023 10:09:54 -0300 Subject: [PATCH 8/8] revert: chore: version tsconfig.json This reverts commit 99cba3aaf7bce1d7e9e1fbc052529b14210b9c95. --- .gitignore | 1 + tsconfig.json | 39 --------------------------------------- 2 files changed, 1 insertion(+), 39 deletions(-) delete mode 100644 tsconfig.json diff --git a/.gitignore b/.gitignore index efd533f..b3e145a 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ package.json webpack.config.js /error-screenshots drivers +tsconfig.json .idea types.d.ts /frontend/generated diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index 20d40d9..0000000 --- a/tsconfig.json +++ /dev/null @@ -1,39 +0,0 @@ -// This TypeScript configuration file is generated by vaadin-maven-plugin. -// This is needed for TypeScript compiler to compile your TypeScript code in the project. -// It is recommended to commit this file to the VCS. -// You might want to change the configurations to fit your preferences -// For more information about the configurations, please refer to http://www.typescriptlang.org/docs/handbook/tsconfig-json.html -{ - "flow_version": "23.3.0", - "compilerOptions": { - "sourceMap": true, - "inlineSources": true, - "module": "esNext", - "target": "es2020", - "moduleResolution": "node", - "strict": true, - "skipLibCheck": true, - "noFallthroughCasesInSwitch": true, - "noImplicitReturns": true, - "noImplicitAny": true, - "noImplicitThis": false, - "noUnusedLocals": false, - "noUnusedParameters": false, - "experimentalDecorators": true, - "useDefineForClassFields": false, - "baseUrl": "frontend", - "paths": { - "@vaadin/flow-frontend": ["generated/jar-resources"], - "@vaadin/flow-frontend/*": ["generated/jar-resources/*"], - "Frontend/*": ["*"] - } - }, - "include": [ - "frontend/**/*.ts", - "frontend/index.js", - "types.d.ts" - ], - "exclude": [ - "frontend/generated/jar-resources" - ] -}