in dsl/camel-jbang/camel-jbang-plugin-edit/src/main/java/org/apache/camel/dsl/jbang/core/commands/edit/CamelNanoLspEditor.java [1783:2029]
public void run() throws IOException {
if (buffers.isEmpty()) {
buffers.add(new Buffer(null));
}
buffer = buffers.get(bufferIndex);
Attributes attributes = terminal.getAttributes();
Attributes newAttr = new Attributes(attributes);
if (vsusp > 0) {
attributes.setControlChar(ControlChar.VSUSP, vsusp);
}
newAttr.setLocalFlags(EnumSet.of(LocalFlag.ICANON, LocalFlag.ECHO, LocalFlag.IEXTEN, LocalFlag.ISIG), false);
newAttr.setInputFlags(EnumSet.of(InputFlag.IXON, InputFlag.ICRNL, InputFlag.INLCR), false);
newAttr.setControlChar(ControlChar.VMIN, 1);
newAttr.setControlChar(ControlChar.VTIME, 0);
newAttr.setControlChar(ControlChar.VINTR, 0);
terminal.setAttributes(newAttr);
terminal.puts(Capability.enter_ca_mode);
terminal.puts(Capability.keypad_xmit);
if (mouseSupport) {
terminal.trackMouse(Terminal.MouseTracking.Any);
}
this.shortcuts = standardShortcuts();
SignalHandler prevHandler = null;
Status status = Status.getStatus(terminal, false);
try {
size.copy(terminal.getSize());
if (status != null) {
status.suspend();
}
buffer.open();
if (errorMessage != null) {
setMessage(errorMessage);
errorMessage = null;
} else if (buffer.file != null) {
setMessage("Read " + buffer.lines.size() + " lines");
}
display.clear();
display.reset();
display.resize(size.getRows(), size.getColumns());
prevHandler = terminal.handle(Signal.WINCH, this::handle);
display();
while (true) {
Operation op;
switch (op = readOperation(keys)) {
case QUIT:
if (help) {
resetSuggestion();
break;
}
if (quit()) {
return;
}
break;
case WRITE:
write();
break;
case READ:
read();
break;
case UP:
if (help && suggestionBox != null) {
suggestionBox.up();
} else {
buffer.moveUp(1);
}
break;
case DOWN:
if (help && suggestionBox != null) {
suggestionBox.down();
} else {
buffer.moveDown(1);
}
break;
case LEFT:
buffer.moveLeft(1);
if (help) {
resetSuggestion();
}
break;
case RIGHT:
buffer.moveRight(1);
if (help) {
resetSuggestion();
}
break;
case INSERT:
if (this.help) {
this.insertHelp = true;
} else {
buffer.insert(bindingReader.getLastBinding());
}
break;
case BACKSPACE:
buffer.backspace(1);
break;
case DELETE:
buffer.delete(1);
break;
case WRAP:
wrap();
break;
case NUMBERS:
numbers();
break;
case SMOOTH_SCROLLING:
smoothScrolling();
break;
case MOUSE_SUPPORT:
mouseSupport();
break;
case ONE_MORE_LINE:
oneMoreLine();
break;
case CLEAR_SCREEN:
clearScreen();
break;
case PREV_BUFFER:
prevBuffer();
break;
case NEXT_BUFFER:
nextBuffer();
break;
case CUR_POS:
curPos();
break;
case LSP_SUGGESTION:
help = true;
break;
case BEGINNING_OF_LINE:
buffer.beginningOfLine();
break;
case END_OF_LINE:
buffer.endOfLine();
break;
case FIRST_LINE:
buffer.firstLine();
break;
case LAST_LINE:
buffer.lastLine();
break;
case PREV_PAGE:
buffer.prevPage();
break;
case NEXT_PAGE:
buffer.nextPage();
break;
case SCROLL_UP:
buffer.scrollUp(1);
break;
case SCROLL_DOWN:
buffer.scrollDown(1);
break;
case SEARCH:
searchToReplace = false;
searchAndReplace();
break;
case REPLACE:
searchToReplace = true;
searchAndReplace();
break;
case NEXT_SEARCH:
buffer.nextSearch();
break;
case HELP:
help("edit-help.txt");
break;
case CONSTANT_CURSOR:
constantCursor();
break;
case VERBATIM:
buffer.insert(new String(Character.toChars(bindingReader.readCharacter())));
break;
case MATCHING:
buffer.matching();
break;
case MOUSE_EVENT:
mouseEvent();
break;
case TOGGLE_SUSPENSION:
toggleSuspension();
break;
case COPY:
buffer.copy();
break;
case CUT:
buffer.cut();
break;
case UNCUT:
buffer.uncut();
break;
case GOTO:
gotoLine();
curPos();
break;
case CUT_TO_END_TOGGLE:
cut2end = !cut2end;
setMessage("Cut to end " + (cut2end ? "enabled" : "disabled"));
break;
case CUT_TO_END:
buffer.cut(true);
break;
case MARK:
mark = !mark;
setMessage("Mark " + (mark ? "Set" : "Unset"));
buffer.mark();
break;
case HIGHLIGHT:
highlight = !highlight;
setMessage("Highlight " + (highlight ? "enabled" : "disabled"));
break;
case TABS_TO_SPACE:
tabsToSpaces = !tabsToSpaces;
setMessage("Conversion of typed tabs to spaces " + (tabsToSpaces ? "enabled" : "disabled"));
break;
case AUTO_INDENT:
autoIndent = !autoIndent;
setMessage("Auto indent " + (autoIndent ? "enabled" : "disabled"));
break;
default:
setMessage("Unsupported " + op.name().toLowerCase().replace('_', '-'));
break;
}
display();
}
} finally {
if (mouseSupport) {
terminal.writer().write("\033[?1005l\033[?1003l");
}
if (!terminal.puts(Capability.exit_ca_mode)) {
terminal.puts(Capability.clear_screen);
}
terminal.puts(Capability.keypad_local);
terminal.flush();
terminal.setAttributes(attributes);
terminal.handle(Signal.WINCH, prevHandler);
if (status != null) {
status.restore();
}
patternHistory.persist();
}
}