Skip to content

Commit

Permalink
Fix typeahead backspace cleanup (#293)
Browse files Browse the repository at this point in the history
  • Loading branch information
dingfeli authored Dec 9, 2024
1 parent e07722f commit fffb6fc
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public int getNewDistanceTraversedOnDeleteAndUpdateBracketState(final int inputL
final int currentDistanceTraversed, final IQInlineBracket[] brackets) {
int numCharDeleted = inputLength;
int paddingLength = 0;
for (int i = 1; i <= numCharDeleted; i++) {
for (int i = 1; i <= numCharDeleted && i <= currentDistanceTraversed; i++) {
var bracket = brackets[currentDistanceTraversed - i];
if (bracket != null) {
if ((bracket instanceof QInlineSuggestionOpenBracketSegment)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ public void onNewSuggestion() {
List<IQInlineSuggestionSegment> segments = IQInlineSuggestionSegmentFactory.getSegmentsFromSuggestion(session);
brackets = new IQInlineBracket[session.getCurrentSuggestion().getInsertText().length()];
if (lineIdx < contentInLine.length()) {
rightCtxBuf = contentInLine.substring(lineIdx) + delimiter;
rightCtxBuf = contentInLine.substring(lineIdx);
}
int normalSegmentNum = 0;
for (var segment : segments) {
Expand Down Expand Up @@ -174,32 +174,31 @@ public void beforeRemoval() {
}
}
toAppend += rightCtxBuf;
if (rightCtxBuf.isEmpty()) {
toAppend += widget.getLineDelimiter();
}

suggestionSegments.stream().forEach((segment) -> segment.cleanUp());

final String toAppendFinal = toAppend;
int idx = distanceTraversed;
if (!toAppend.isEmpty()) {
try {
int currentOffset = session.getInvocationOffset() + idx;
int expandedCurrentOffset = QEclipseEditorUtils.getOffsetInFullyExpandedDocument(session.getViewer(),
currentOffset);
int lineNumber = doc.getLineOfOffset(expandedCurrentOffset);
int startLineOffset = doc.getLineOffset(lineNumber);
int curLineInDoc = widget.getLineAtOffset(currentOffset);
int lineIdx = expandedCurrentOffset - startLineOffset;
String contentInLine = widget.getLine(curLineInDoc) + widget.getLineDelimiter();
String currentRightCtx = "\n";
if (lineIdx < contentInLine.length()) {
currentRightCtx = contentInLine.substring(lineIdx);
try {
int currentOffset = session.getInvocationOffset() + idx;
int expandedCurrentOffset = QEclipseEditorUtils.getOffsetInFullyExpandedDocument(session.getViewer(),
currentOffset);
int lineNumber = doc.getLineOfOffset(expandedCurrentOffset);
int startLineOffset = doc.getLineOffset(lineNumber);
int curLineInDoc = widget.getLineAtOffset(currentOffset);
int lineIdx = expandedCurrentOffset - startLineOffset;
String contentInLine = widget.getLine(curLineInDoc);
String currentRightCtx = contentInLine.substring(lineIdx);
int distanceToNewLine = currentRightCtx.length();
Display.getCurrent().asyncExec(() -> {
try {
doc.replace(expandedCurrentOffset, distanceToNewLine, toAppendFinal);
} catch (BadLocationException e) {
Activator.getLogger().error("Error appending right context", e);
}
});
} catch (BadLocationException e) {
Activator.getLogger().error("Error retrieving line information for appending right context", e);
}
int distanceToNewLine = currentRightCtx.length();
doc.replace(expandedCurrentOffset, distanceToNewLine, toAppend);
} catch (BadLocationException e) {
Activator.getLogger().error(e.toString());
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -527,14 +527,19 @@ public void dispose() {
if (terminationListener != null) {
widget.removeFocusListener(terminationListener);
}
QInvocationSession.getInstance().getViewer().getTextWidget().redraw();
if (paintListener != null) {
paintListener.beforeRemoval();
widget.removePaintListener(paintListener);
}
if (caretListener != null) {
widget.removeCaretListener(caretListener);
}
Display.getDefault().asyncExec(() -> {
if (!widget.isDisposed()) {
widget.redraw();
widget.update();
}
});
paintListener = null;
caretListener = null;
inputListener = null;
Expand Down

0 comments on commit fffb6fc

Please sign in to comment.