From 6549a62893148d6ffdb46873c2b749a55737366e Mon Sep 17 00:00:00 2001 From: "Denis.Zhdanov" Date: Fri, 25 May 2012 09:15:44 +0400 Subject: [PATCH] IDEA-86397 Delete line (Ctrl+Y) moves caret to the 1st column position --- .../openapi/editor/EditorModificationUtil.java | 7 +++++-- ...ftWrapApplianceOnDocumentModificationTest.java | 15 +++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/platform/platform-api/src/com/intellij/openapi/editor/EditorModificationUtil.java b/platform/platform-api/src/com/intellij/openapi/editor/EditorModificationUtil.java index 96fe2949971e..e80150193419 100644 --- a/platform/platform-api/src/com/intellij/openapi/editor/EditorModificationUtil.java +++ b/platform/platform-api/src/com/intellij/openapi/editor/EditorModificationUtil.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2011 JetBrains s.r.o. + * Copyright 2000-2012 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -44,9 +44,12 @@ public class EditorModificationUtil { int selectionStart = selectionModel.getSelectionStart(); int selectionEnd = selectionModel.getSelectionEnd(); - editor.getCaretModel().moveToOffset(selectionStart); + final CaretModel caretModel = editor.getCaretModel(); + final VisualPosition position = caretModel.getVisualPosition(); + caretModel.moveToOffset(selectionStart); selectionModel.removeSelection(); editor.getDocument().deleteString(selectionStart, selectionEnd); + caretModel.moveToVisualPosition(position); // Try to preserve visual caret position editor.getScrollingModel().scrollToCaret(ScrollType.RELATIVE); } diff --git a/platform/platform-tests/testSrc/com/intellij/openapi/editor/impl/softwrap/mapping/SoftWrapApplianceOnDocumentModificationTest.java b/platform/platform-tests/testSrc/com/intellij/openapi/editor/impl/softwrap/mapping/SoftWrapApplianceOnDocumentModificationTest.java index 6b4342aeadb0..bf71ec861559 100644 --- a/platform/platform-tests/testSrc/com/intellij/openapi/editor/impl/softwrap/mapping/SoftWrapApplianceOnDocumentModificationTest.java +++ b/platform/platform-tests/testSrc/com/intellij/openapi/editor/impl/softwrap/mapping/SoftWrapApplianceOnDocumentModificationTest.java @@ -980,6 +980,21 @@ public class SoftWrapApplianceOnDocumentModificationTest extends AbstractEditorP assertEquals(text, myEditor.getSelectionModel().getSelectedText()); } + public void testCaretPositionAfterLineRemoval() throws IOException { + final String text = + "123456\n" + + "123456\n" + + "line towrapbecauseitislong\n" + + "923456"; + init(8, text); + final CaretModel caretModel = myEditor.getCaretModel(); + caretModel.moveToOffset(text.indexOf("e")); + final VisualPosition position = caretModel.getVisualPosition(); + deleteLine(); + assertEquals(text.substring(0, text.indexOf("line")) + text.substring(text.indexOf('9')), myEditor.getDocument().getText()); + assertEquals(position, caretModel.getVisualPosition()); + } + private void init(final int visibleWidthInColumns, @NotNull String fileText) throws IOException { int symbolWidthInPixels = 7; init(visibleWidthInColumns * symbolWidthInPixels, fileText, symbolWidthInPixels);