From 374e421b7d255ce1abe398c010d2078f09dc6bcf Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 20 Feb 2014 15:39:00 +0100 Subject: [PATCH] IDEA-76185 Macro: $SelectionStartColumn$ and $SelectionEndColumn$ external tools macros count tabs as expanded spaces --- .../com/intellij/ide/macro/ColumnNumberMacro.java | 2 +- .../src/com/intellij/ide/macro/EditorMacro.java | 12 ++++++++++++ .../intellij/ide/macro/SelectionEndColumnMacro.java | 2 +- .../ide/macro/SelectionStartColumnMacro.java | 2 +- 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/ide/macro/ColumnNumberMacro.java b/platform/lang-impl/src/com/intellij/ide/macro/ColumnNumberMacro.java index 666bac1a6a71..f9ee6b75e8a7 100644 --- a/platform/lang-impl/src/com/intellij/ide/macro/ColumnNumberMacro.java +++ b/platform/lang-impl/src/com/intellij/ide/macro/ColumnNumberMacro.java @@ -26,6 +26,6 @@ public final class ColumnNumberMacro extends EditorMacro { @Override protected String expand(Editor editor) { - return String.valueOf(editor.getCaretModel().getLogicalPosition().column + 1); + return getColumnNumber(editor, editor.getCaretModel().getLogicalPosition()); } } diff --git a/platform/lang-impl/src/com/intellij/ide/macro/EditorMacro.java b/platform/lang-impl/src/com/intellij/ide/macro/EditorMacro.java index d253ed586628..357a99f1d345 100644 --- a/platform/lang-impl/src/com/intellij/ide/macro/EditorMacro.java +++ b/platform/lang-impl/src/com/intellij/ide/macro/EditorMacro.java @@ -18,6 +18,8 @@ package com.intellij.ide.macro; import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.editor.LogicalPosition; +import com.intellij.openapi.editor.ex.util.EditorUtil; import com.intellij.openapi.project.Project; import com.intellij.openapi.wm.ToolWindowManager; import org.jetbrains.annotations.Nullable; @@ -57,6 +59,16 @@ public abstract class EditorMacro extends Macro { return null; } + protected static String getColumnNumber(Editor editor, LogicalPosition pos) { + if (EditorUtil.inVirtualSpace(editor, pos)) { + return String.valueOf(pos.column + 1); + } + + int offset = editor.logicalPositionToOffset(pos); + int lineStart = editor.getDocument().getLineStartOffset(editor.getDocument().getLineNumber(offset)); + return String.valueOf(offset - lineStart + 1); + } + @Nullable protected abstract String expand(Editor editor); } diff --git a/platform/lang-impl/src/com/intellij/ide/macro/SelectionEndColumnMacro.java b/platform/lang-impl/src/com/intellij/ide/macro/SelectionEndColumnMacro.java index 4110c088ccee..97326c0f3cb6 100644 --- a/platform/lang-impl/src/com/intellij/ide/macro/SelectionEndColumnMacro.java +++ b/platform/lang-impl/src/com/intellij/ide/macro/SelectionEndColumnMacro.java @@ -32,6 +32,6 @@ public class SelectionEndColumnMacro extends EditorMacro { if (selectionEndPosition == null) { return null; } - return String.valueOf(editor.visualToLogicalPosition(selectionEndPosition).column + 1); + return getColumnNumber(editor, editor.visualToLogicalPosition(selectionEndPosition)); } } diff --git a/platform/lang-impl/src/com/intellij/ide/macro/SelectionStartColumnMacro.java b/platform/lang-impl/src/com/intellij/ide/macro/SelectionStartColumnMacro.java index 30b82c76cade..7578eb491687 100644 --- a/platform/lang-impl/src/com/intellij/ide/macro/SelectionStartColumnMacro.java +++ b/platform/lang-impl/src/com/intellij/ide/macro/SelectionStartColumnMacro.java @@ -32,6 +32,6 @@ public class SelectionStartColumnMacro extends EditorMacro { if (selectionStartPosition == null) { return null; } - return String.valueOf(editor.visualToLogicalPosition(selectionStartPosition).column + 1); + return getColumnNumber(editor, editor.visualToLogicalPosition(selectionStartPosition)); } }