diff --git a/CHANGELOG.md b/CHANGELOG.md index 343e150..71be73b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## [2026.1.3] + +### Fixes + +- Fixed [Clicking gutter -> "Rollback Lines" loses newline](https://github.com/comod/git-scope-pro/issues/94) + ## [2026.1.2] ### Fixes diff --git a/gradle.properties b/gradle.properties index 676aaf1..cf36dd5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ pluginGroup=org.woelkit.plugins pluginName=Git Scope pluginRepositoryUrl=https://github.com/comod/git-scope-pro -pluginVersion=2026.1.2 +pluginVersion=2026.1.3 pluginSinceBuild=243 platformType=IU diff --git a/src/main/java/implementation/gutter/ScopeGutterPopupPanel.kt b/src/main/java/implementation/gutter/ScopeGutterPopupPanel.kt index 9b370c7..cad2c39 100644 --- a/src/main/java/implementation/gutter/ScopeGutterPopupPanel.kt +++ b/src/main/java/implementation/gutter/ScopeGutterPopupPanel.kt @@ -501,16 +501,22 @@ internal class ScopeGutterPopupPanel( val baseContent = diffViewer.getVcsContentForRange(range, includeContext = false) LOG.debug("Restoring deleted content: ${baseContent.length} chars") if (baseContent.isNotEmpty()) { - val offset = editor.logicalPositionToOffset(LogicalPosition(range.line1, 0)) - document.insertString(offset, baseContent + "\n") + if (range.line1 >= document.lineCount) { + // Inserting at end of document: prepend newline separator + document.insertString(document.textLength, "\n" + baseContent) + } else { + // Inserting before an existing line: append newline to push it down + val offset = document.getLineStartOffset(range.line1) + document.insertString(offset, baseContent + "\n") + } } } Range.MODIFIED -> { // For modified lines, replace with base content (without context) val baseContent = diffViewer.getVcsContentForRange(range, includeContext = false) LOG.debug("Replacing modified content: ${baseContent.length} chars") - val startOffset = editor.logicalPositionToOffset(LogicalPosition(range.line1, 0)) - val endOffset = editor.logicalPositionToOffset(LogicalPosition(range.line2, 0)) + val startOffset = document.getLineStartOffset(range.line1) + val endOffset = document.getLineEndOffset(range.line2 - 1) document.replaceString(startOffset, endOffset, baseContent) } }