diff --git a/ICSharpCode.AvalonEdit/Editing/EditingCommandHandler.cs b/ICSharpCode.AvalonEdit/Editing/EditingCommandHandler.cs index fcdda52c..94a99263 100644 --- a/ICSharpCode.AvalonEdit/Editing/EditingCommandHandler.cs +++ b/ICSharpCode.AvalonEdit/Editing/EditingCommandHandler.cs @@ -197,7 +197,7 @@ static void OnTab(object target, ExecutedRoutedEventArgs args) TextArea textArea = GetTextArea(target); if (textArea != null && textArea.Document != null) { using (textArea.Document.RunUpdate()) { - if (textArea.Selection.IsMultiline) { + if (textArea.Selection.IsMultiline && !textArea.Selection.IsEmpty) { var segment = textArea.Selection.SurroundingSegment; DocumentLine start = textArea.Document.GetLineByOffset(segment.Offset); DocumentLine end = textArea.Document.GetLineByOffset(segment.EndOffset); diff --git a/ICSharpCode.AvalonEdit/Editing/RectangleSelection.cs b/ICSharpCode.AvalonEdit/Editing/RectangleSelection.cs index 60888d88..7c3f505b 100644 --- a/ICSharpCode.AvalonEdit/Editing/RectangleSelection.cs +++ b/ICSharpCode.AvalonEdit/Editing/RectangleSelection.cs @@ -331,7 +331,10 @@ public override void ReplaceSelectionWithText(string newText) pos = new TextViewPosition(document.GetLocation(editOffset + firstInsertionLength)); textArea.ClearSelection(); } - textArea.Caret.Position = textArea.TextView.GetPosition(new Point(GetXPos(textArea, pos), textArea.TextView.GetVisualTopByDocumentLine(Math.Max(startLine, endLine)))).GetValueOrDefault(); + + DocumentLine documentLine = textArea.Document.GetLineByNumber(Math.Max(startLine, endLine)); + VisualLine visualLine = textArea.TextView.GetOrConstructVisualLine(documentLine); + textArea.Caret.Position = visualLine.GetTextViewPosition(new Point(GetXPos(textArea, pos), visualLine.VisualTop), EnableVirtualSpace); } }