Skip to content

Commit 1a26b31

Browse files
javier-godoymlopezFC
authored andcommitted
feat: add Java API for setting insertMode
Part of #17
1 parent 7a64e44 commit 1a26b31

File tree

2 files changed

+24
-8
lines changed

2 files changed

+24
-8
lines changed

src/main/java/com/flowingcode/vaadin/addons/xterm/ITerminalConsole.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,10 @@ default Registration addLineListener(ComponentEventListener<LineEvent> listener)
5454
Component terminal = getElement().getComponent().get();
5555
return ComponentUtil.addListener(terminal, LineEvent.class, listener);
5656
}
57+
58+
/** Set the insert mode. */
59+
default void setInsertMode(boolean insertMode) {
60+
((XTermBase) this).executeJs("this.insertMode=$0", insertMode);
61+
}
62+
5763
}

src/main/resources/META-INF/frontend/fc-xterm/xterm-console-mixin.ts

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import { TerminalMixin, TerminalAddon } from '@vaadin/flow-frontend/fc-xterm/xte
2222

2323
interface IConsoleMixin extends TerminalMixin {
2424
escapeEnabled: Boolean;
25+
insertMode: Boolean;
2526
}
2627

2728
class ConsoleAddon extends TerminalAddon<IConsoleMixin> {
@@ -145,12 +146,7 @@ class ConsoleAddon extends TerminalAddon<IConsoleMixin> {
145146
this.$node.customKeyEventHandlers.register(ev=> ev.key=='Delete', ()=> terminal.write('\x1b[<D')),
146147

147148
this.$node.customKeyEventHandlers.register(ev=> ev.key=='Insert', ev=>{
148-
let ins = inputHandler._coreService.modes.insertMode;
149-
if (ins) {
150-
terminal.write('\x1b[4l\x1b[2 q');
151-
} else {
152-
terminal.write('\x1b[4h\x1b[3 q');
153-
}
149+
this.$.insertMode = !this.$.insertMode;
154150
}),
155151

156152
this.$node.customKeyEventHandlers.register(ev=> ev.key=='Enter', ()=>{
@@ -193,5 +189,19 @@ export function XTermConsoleMixin<TBase extends Constructor<TerminalMixin>>(Base
193189
addon.$=this;
194190
this.node.terminal.loadAddon(addon);
195191
}
196-
}
197-
}
192+
193+
get insertMode(): Boolean {
194+
return this.node.terminal.modes.insertMode;
195+
}
196+
197+
set insertMode(value: Boolean) {
198+
if (value) {
199+
this.node.terminal.write('\x1b[4h\x1b[3 q');
200+
} else {
201+
this.node.terminal.write('\x1b[4l\x1b[2 q');
202+
}
203+
}
204+
205+
}
206+
}
207+

0 commit comments

Comments
 (0)