Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 16 additions & 17 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,19 +1,18 @@
/.settings
/target
/.classpath
/.project
/node_modules
/frontend
/webpack.generated.js
/node
/drivers
/package-lock.json
/webpack.config.js
/package.json
node_modules
target
.vscode
.settings
.project
.classpath
webpack.generated.js
package-lock.json
package.json
webpack.config.js
/error-screenshots
/tsconfig.json
/.npmrc
/pnpm-lock.yaml
/pnpmfile.js
/types.d.ts
drivers
tsconfig.json
.idea
types.d.ts
/frontend/generated
/frontend/index.html
vite.generated.ts
25 changes: 23 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@
<dependency>
<groupId>com.flowingcode.vaadin.addons.demo</groupId>
<artifactId>commons-demo</artifactId>
<version>3.5.0</version>
<version>3.5.1</version>
<scope>test</scope>
</dependency>
<dependency>
Expand Down Expand Up @@ -455,7 +455,28 @@
</plugins>
</build>
</profile>


<profile>
<id>v24</id>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<vaadin.version>24.0.0.alpha5</vaadin.version>
<jetty.version>11.0.12</jetty.version>
</properties>
<repositories>
<repository>
<id>vaadin-prerelease</id>
<url>https://maven.vaadin.com/vaadin-prereleases</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>vaadin-prerelease</id>
<url>https://maven.vaadin.com/vaadin-prereleases</url>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>

</project>
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,8 @@ class ClipboardAddon extends TerminalAddon<IClipboardMixin> {
}

let onEvent = (event, listener) => {
terminal.element.addEventListener(event, listener);
return {dispose : () => terminal.element.removeEventListener(event, listener)};
terminal.element!.addEventListener(event, listener);
return {dispose : () => terminal.element!.removeEventListener(event, listener)};
};


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,11 +56,11 @@ class ConsoleAddon extends TerminalAddon<IConsoleMixin> {
this._activeBuffer.x = Math.min(col, terminal.cols);
}).bind(inputHandler);

let cursorForwardWrapped = (function(params: any) {
let cursorForwardWrapped = (function(params: any = [0]) {
let buffer = this._bufferService.buffer;
let x = buffer.x;
let y = buffer.y;
for (let i=(params && params[0] || 1); i>0; --i) {
for (let i=(params[0] || 1); i>0; --i) {
let apply=false;
if (buffer.x>=this._bufferService.cols-1) {
let next = buffer.lines.get(buffer.y+buffer.ybase+1);
Expand All @@ -85,13 +85,13 @@ class ConsoleAddon extends TerminalAddon<IConsoleMixin> {
return true;
}).bind(inputHandler);

let cursorBackwardWrapped = (function(params : any) {
let cursorBackwardWrapped = (function(params : any = [0]) {
let buffer = this._bufferService.buffer;
let x = buffer.x;
let y = buffer.y;
let apply=false;

for (let i=0; i< (params && params[0] || 1); i++) {
for (let i=0; i< (params[0] || 1); i++) {
let line = buffer.lines.get(buffer.y+buffer.ybase);
if (!line.isWrapped && buffer.x< 1+promptLength()) {
break;
Expand All @@ -115,11 +115,11 @@ class ConsoleAddon extends TerminalAddon<IConsoleMixin> {
return apply;
}).bind(inputHandler);

let deleteChar = (function(params: any) {
let deleteChar = (function(params: any = [0]) {
let buffer = this._bufferService.buffer;
let x = buffer.x;
let y = buffer.y;
for (let j=0; j< (params && params[0] || 1); j++) {
for (let j=0; j< (params[0] || 1); j++) {
this.deleteChars({params:[1]});
let line = buffer.lines.get(buffer.ybase+buffer.y);
let range = buffer.getWrappedRangeForLine(buffer.y + buffer.ybase)
Expand Down Expand Up @@ -204,27 +204,32 @@ class ConsoleAddon extends TerminalAddon<IConsoleMixin> {
}).bind(inputHandler);

let hasModifiers = (ev:KeyboardEvent) => ev.shiftKey || ev.altKey || ev.metaKey || ev.ctrlKey;

function probe_others<T>(callback: ((params: T[]) => void)): ((params: T[]) => boolean) {
// execute callback and also probe for other handlers
return params => {callback(params); return false;}
};

this._disposables = [
terminal.parser.registerCsiHandler({prefix: '<', final: 'H'}, cursorHome),
terminal.parser.registerCsiHandler({prefix: '<', final: 'H'}, probe_others(cursorHome)),
this.$node.customKeyEventHandlers.register(ev=> ev.key=='Home' && !hasModifiers(ev), ()=> terminal.write('\x1b[<H')),

terminal.parser.registerCsiHandler({prefix: '<', final: 'E'}, cursorEnd),
terminal.parser.registerCsiHandler({prefix: '<', final: 'E'}, probe_others(cursorEnd)),
this.$node.customKeyEventHandlers.register(ev=> ev.key=='End' && !hasModifiers(ev), ()=> terminal.write('\x1b[<E')),

terminal.parser.registerCsiHandler({prefix: '<', final: 'L'}, cursorBackwardWrapped),
terminal.parser.registerCsiHandler({prefix: '<', final: 'L'}, probe_others(cursorBackwardWrapped)),
this.$node.customKeyEventHandlers.register(ev=> ev.key=='ArrowLeft' && !hasModifiers(ev), ()=> terminal.write('\x1b[<L')),

terminal.parser.registerCsiHandler({prefix: '<', final: 'R'}, cursorForwardWrapped),
terminal.parser.registerCsiHandler({prefix: '<', final: 'R'}, probe_others(cursorForwardWrapped)),
this.$node.customKeyEventHandlers.register(ev=> ev.key=='ArrowRight' && !hasModifiers(ev), ()=> terminal.write('\x1b[<R')),

terminal.parser.registerCsiHandler({prefix: '<', final: 'B'}, backspace),
terminal.parser.registerCsiHandler({prefix: '<', final: 'B'}, probe_others(backspace)),
this.$node.customKeyEventHandlers.register(ev=> ev.key=='Backspace' && !hasModifiers(ev), ()=> terminal.write('\x1b[<B')),

terminal.parser.registerCsiHandler({prefix: '<', final: 'D'}, deleteChar),
terminal.parser.registerCsiHandler({prefix: '<', final: 'D'}, probe_others(deleteChar)),
this.$node.customKeyEventHandlers.register(ev=> ev.key=='Delete' && !hasModifiers(ev), ()=> terminal.write('\x1b[<D')),

terminal.parser.registerCsiHandler({prefix: '<', final: 'K'}, eraseInLine),
terminal.parser.registerCsiHandler({prefix: '<', final: 'K'}, probe_others(eraseInLine)),

this.$node.customKeyEventHandlers.register(ev=> ev.key=='Insert' && !hasModifiers(ev), ev=>{
this.$.insertMode = !this.$.insertMode;
Expand All @@ -248,9 +253,9 @@ class ConsoleAddon extends TerminalAddon<IConsoleMixin> {
'F5',
'F6',
'F12'
].includes(ev.key), null),
].includes(ev.key), undefined),

terminal.parser.registerCsiHandler({prefix: '<', final: 'N'}, linefeed)
terminal.parser.registerCsiHandler({prefix: '<', final: 'N'}, probe_others(linefeed))

];

Expand Down Expand Up @@ -312,12 +317,12 @@ export function XTermConsoleMixin<TBase extends Constructor<TerminalMixin>>(Base
}

get currentLine() : string {
return this._consoleAddon.currentLine;
return this._consoleAddon!.currentLine;
}

writePrompt() {
//execute writePrompt with blocking semantics
this.node.terminal.write('', ()=>this._consoleAddon.writePrompt());
this.node.terminal.write('', ()=>this._consoleAddon!.writePrompt());
}

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,9 @@ class CustomKeyEventHandlerRegistry {
private handlers: CustomKeyEventHandler[] = [];
private next:integer=0;

register(customKey: CustomKey, handle: (event: KeyboardEvent) => void): CustomKeyEventHandlerRegistryDisposable;
register(predicate: KeyboardEventPredicate, handle: KeyboardEventHandler) : CustomKeyEventHandlerRegistryDisposable;
register(arg: CustomKey | KeyboardEventPredicate, handle: KeyboardEventHandler) : CustomKeyEventHandlerRegistryDisposable {
register(customKey: CustomKey, handle?: (event: KeyboardEvent) => void): CustomKeyEventHandlerRegistryDisposable;
register(predicate: KeyboardEventPredicate, handle?: KeyboardEventHandler) : CustomKeyEventHandlerRegistryDisposable;
register(arg: CustomKey | KeyboardEventPredicate, handle?: KeyboardEventHandler) : CustomKeyEventHandlerRegistryDisposable {
let predicate : KeyboardEventPredicate;
if ((typeof arg) === 'object') {
let customKey = arg as any;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,10 +86,10 @@ export function XTermFitMixin<TBase extends Constructor<TerminalMixin>>(Base: TB
}

fit() {
this._fitAddon.proposeDimensions();
this._fitAddon!.proposeDimensions();
window.setTimeout(()=>{
try {
this._fitAddon?.fit();
this._fitAddon!.fit();
} catch (e) {
console.warn(e);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ interface ISelectionMixin extends TerminalMixin {
class SelectionAddon extends TerminalAddon<ISelectionMixin> {

__selectionLength: number;
__selectionAnchor: number;
__selectionAnchor?: number;
__selectionRight: boolean = true;

activateCallback(terminal: Terminal): void {
Expand Down Expand Up @@ -69,7 +69,7 @@ class SelectionAddon extends TerminalAddon<ISelectionMixin> {
this.__selectionRight = !this.__selectionRight;
}

let newSelectionStart = this.__selectionAnchor;
let newSelectionStart = this.__selectionAnchor!;
if (!this.__selectionRight) {
newSelectionStart -= newSelectionLength;
}
Expand Down Expand Up @@ -101,7 +101,7 @@ class SelectionAddon extends TerminalAddon<ISelectionMixin> {

resetSelection();
ensureSelection();
let dx = range.first * terminal.cols - this.__selectionAnchor;
let dx = range.first * terminal.cols - this.__selectionAnchor!;
if (pos.startRow != range.first || pos.startColumn != promptLength()) {
dx+= promptLength();
}
Expand All @@ -117,7 +117,7 @@ class SelectionAddon extends TerminalAddon<ISelectionMixin> {

resetSelection();
ensureSelection();
moveSelection(range.last * terminal.cols + buffer.lines.get(range.last).getTrimmedLength() - this.__selectionAnchor);
moveSelection(range.last * terminal.cols + buffer.lines.get(range.last).getTrimmedLength() - this.__selectionAnchor!);
};

let deleteSelection = (ev: KeyboardEvent) => {
Expand Down