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"
- ]
-}