mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
pressing Backspace in virtual space doesn't delete innocent characters in the preceding line (PY-254)
This commit is contained in:
@@ -23,8 +23,11 @@ public class PythonBackspaceHandler extends BackspaceHandlerDelegate {
|
||||
if (myTargetPosition != null) {
|
||||
// Remove all the following spaces before moving to targetPosition
|
||||
final int offset = editor.getCaretModel().getOffset();
|
||||
editor.getSelectionModel().setSelection(offset - editor.getCaretModel().getVisualPosition().column + myTargetPosition.column, offset);
|
||||
EditorModificationUtil.deleteSelectedText(editor);
|
||||
if (EditorModificationUtil.calcAfterLineEnd(editor) == 0) {
|
||||
int delta = editor.getCaretModel().getVisualPosition().column - myTargetPosition.column;
|
||||
editor.getSelectionModel().setSelection(offset - delta, offset);
|
||||
EditorModificationUtil.deleteSelectedText(editor);
|
||||
}
|
||||
editor.getCaretModel().moveToLogicalPosition(myTargetPosition);
|
||||
myTargetPosition = null;
|
||||
return true;
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
package com.jetbrains.python;
|
||||
|
||||
import com.intellij.openapi.actionSystem.IdeActions;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.command.CommandProcessor;
|
||||
import com.intellij.openapi.editor.LogicalPosition;
|
||||
import com.intellij.openapi.util.Computable;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.jetbrains.python.fixtures.PyLightFixtureTestCase;
|
||||
@@ -23,6 +26,18 @@ public class PyEditingTest extends PyLightFixtureTestCase {
|
||||
assertEquals("r''", doTestTyping("r", 1, '\''));
|
||||
}
|
||||
|
||||
public void testGreedyBackspace() throws Exception { // PY-254
|
||||
myFixture.configureByFile("/editing/py254.py");
|
||||
myFixture.getEditor().getCaretModel().moveToLogicalPosition(new LogicalPosition(4, 8));
|
||||
CommandProcessor.getInstance().executeCommand(myFixture.getProject(), new Runnable() {
|
||||
public void run() {
|
||||
myFixture.performEditorAction(IdeActions.ACTION_EDITOR_BACKSPACE);
|
||||
}
|
||||
}, "", null);
|
||||
// this should not modify the text, so we can check against the same file
|
||||
myFixture.checkResultByFile("/editing/py254.py", true);
|
||||
}
|
||||
|
||||
private String doTestTyping(final String text, final int offset, final char character) {
|
||||
final PsiFile file = ApplicationManager.getApplication().runWriteAction(new Computable<PsiFile>() {
|
||||
public PsiFile compute() {
|
||||
|
||||
Reference in New Issue
Block a user