void (@NotNull Editor editor, VisualPosition currentVisual) { CaretModel caretModel = editor.getCaretModel(); int startLineOffset = editor.visualPositionToOffset(new VisualPosition(currentVisual.line, 0)); SoftWrapModel softWrapModel = editor.getSoftWrapModel(); SoftWrap softWrap = softWrapModel.getSoftWrap(startLineOffset); if (softWrap == null) { // Don't expect to be here. int column = findFirstNonSpaceColumnOnTheLine(editor, currentVisual.line); int columnToMove = column; if (column < 0 || currentVisual.column <= column && currentVisual.column > 0) { columnToMove = 0; } caretModel.moveToVisualPosition(new VisualPosition(currentVisual.line, columnToMove)); return; } if (currentVisual.column > softWrap.getIndentInColumns()) { caretModel.moveToOffset(softWrap.getStart()); } else if (currentVisual.column > 0) { caretModel.moveToVisualPosition(new VisualPosition(currentVisual.line, 0)); } else { // We assume that caret is already located at zero visual column of soft-wrapped line if control flow reaches this place. int lineStartOffset = EditorUtil.getNotFoldedLineStartOffset(editor, startLineOffset); int visualLine = editor.offsetToVisualPosition(lineStartOffset).line; caretModel.moveToVisualPosition(new VisualPosition(visualLine, Math.max(0, findFirstNonSpaceColumnOnTheLine(editor, visualLine)))); } }