From 3dfdbd7c85a413d3edff1463b75ea07bfc733f4e Mon Sep 17 00:00:00 2001 From: Eric Amodio Date: Fri, 23 Mar 2018 11:14:29 -0400 Subject: [PATCH] Adds scrollable setting to the current line annotation Closes #149, #290, #265 --- CHANGELOG.md | 1 + README.md | 1 + package.json | 6 ++++++ src/annotations/annotations.ts | 6 ++++-- src/annotations/lineAnnotationController.ts | 4 +++- src/ui/config.ts | 1 + 6 files changed, 16 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 50f838a..fda6174 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/) and this p ### Added - Adds an indicator to the *GitLens* explorer branch history to mark the synchronization point between the local and remote branch (if available) - Adds `${agoOrDate}` and `${authorAgoOrDate}` tokens to `gitlens.blame.format`, `gitlens.currentLine.format`, `gitlens.explorers.commitFormat`, `gitlens.explorers.stashFormat`, and `gitlens.statusBar.format` settings which will honor the `gitlens.defaultDateStyle` setting — closes [#312](https://github.com/eamodio/vscode-gitlens/issues/312) +- Adds `gitlens.currentLine.scrollable` setting to specify whether the current line blame annotation can be scrolled into view when it is outside the viewport — closes [#149](https://github.com/eamodio/vscode-gitlens/issues/149), [#290](https://github.com/eamodio/vscode-gitlens/issues/290), [#265](https://github.com/eamodio/vscode-gitlens/issues/265) ### Removed - Removes the unnecessary *Show File Blame Annotations* (`gitlens.showFileBlame`) command — *Toggle File Blame Annotations* (`gitlens.toggleFileBlame`) provides similar functionality diff --git a/README.md b/README.md index fa1f12c..46c443d 100644 --- a/README.md +++ b/README.md @@ -585,6 +585,7 @@ See also [Explorer Settings](#explorer-settings "Jump to the Explorer settings") |`gitlens.currentLine.dateFormat`|Specifies how to format absolute dates (using the `${date}` token) for the current line blame annotations
See https://momentjs.com/docs/#/displaying/format/ for valid formats |`gitlens.currentLine.enabled`|Specifies whether to provide a blame annotation for the current line, by default
Use the *Toggle Line Blame Annotations* command (`gitlens.toggleLineBlame`) to toggle the annotations on and off for the current window |`gitlens.currentLine.format`|Specifies the format of the current line blame annotation
Available tokens
`${id}` - commit id
`${author}` - commit author
`${message}` - commit message
`${ago}` - relative commit date (e.g. 1 day ago)
`${date}` - formatted commit date (format specified by `gitlens.currentLine.dateFormat`)
`${agoOrDate}` - commit date specified by `gitlens.defaultDateStyle`
`${authorAgo}` - commit author, relative commit date
`${authorAgoOrDate}` - commit author, commit date specified by `gitlens.defaultDateStyle`
See https://github.com/eamodio/vscode-gitlens/wiki/Advanced-Formatting for advanced formatting +|`gitlens.currentLine.scrollable`|Specifies whether the current line blame annotation can be scrolled into view when it is outside the viewport ### Gutter Blame Settings diff --git a/package.json b/package.json index 4b9a8f4..03a0e90 100644 --- a/package.json +++ b/package.json @@ -329,6 +329,12 @@ "description": "Specifies the format of the current line blame annotation\nAvailable tokens\n ${id} - commit id\n ${author} - commit author\n ${message} - commit message\n ${ago} - relative commit date (e.g. 1 day ago)\n ${date} - formatted commit date (format specified by `gitlens.currentLine.dateFormat`)\n ${agoOrDate} - commit date specified by `gitlens.defaultDateStyle`\n ${authorAgo} - commit author, relative commit date\n ${authorAgoOrDate} - commit author, commit date specified by `gitlens.defaultDateStyle`\nSee https://github.com/eamodio/vscode-gitlens/wiki/Advanced-Formatting for advanced formatting", "scope": "window" }, + "gitlens.currentLine.scrollable": { + "type": "boolean", + "default": true, + "description": "Specifies whether the current line blame annotation can be scrolled into view when it is outside the viewport", + "scope": "window" + }, "gitlens.debug": { "type": "boolean", "default": false, diff --git a/src/annotations/annotations.ts b/src/annotations/annotations.ts index f2227b9..a2e3d3a 100644 --- a/src/annotations/annotations.ts +++ b/src/annotations/annotations.ts @@ -258,7 +258,7 @@ export class Annotations { // } as IRenderOptions; // } - static trailing(commit: GitCommit, format: string, dateFormat: string | null): DecorationOptions { + static trailing(commit: GitCommit, format: string, dateFormat: string | null, scrollable: boolean = true): DecorationOptions { const message = CommitFormatter.fromTemplate(format, commit, { truncateMessageAtNewLine: true, dateFormat: dateFormat @@ -271,7 +271,9 @@ export class Annotations { color: new ThemeColor('gitlens.trailingLineForegroundColor'), contentText: Strings.pad(message.replace(/ /g, GlyphChars.Space), 1, 1), fontWeight: 'normal', - fontStyle: 'normal' + fontStyle: 'normal', + // Pull the decoration out of the document flow if we want to be scrollable + textDecoration: `none;${scrollable ? '' : ' position: absolute;'}` } } as DecorationInstanceRenderOptions } as DecorationOptions; diff --git a/src/annotations/lineAnnotationController.ts b/src/annotations/lineAnnotationController.ts index fa5daaf..4d682ac 100644 --- a/src/annotations/lineAnnotationController.ts +++ b/src/annotations/lineAnnotationController.ts @@ -187,12 +187,14 @@ export class LineAnnotationController extends Disposable { // Make sure the editor hasn't died since the await above and that we are still on the same line(s) if (editor.document === undefined || !Container.lineTracker.includesAll(lines)) return; + const scrollable = Container.config.currentLine.scrollable; + const decorations = []; for (const l of lines) { const state = Container.lineTracker.getState(l); if (state === undefined || state.commit === undefined) continue; - const decoration = Annotations.trailing(state.commit, cfg.format, cfg.dateFormat === null ? Container.config.defaultDateFormat : cfg.dateFormat); + const decoration = Annotations.trailing(state.commit, cfg.format, cfg.dateFormat === null ? Container.config.defaultDateFormat : cfg.dateFormat, scrollable); decoration.range = editor.document.validateRange(new Range(l, RangeEndOfLineIndex, l, RangeEndOfLineIndex)); decorations.push(decoration); } diff --git a/src/ui/config.ts b/src/ui/config.ts index d57f512..f4551d2 100644 --- a/src/ui/config.ts +++ b/src/ui/config.ts @@ -265,6 +265,7 @@ export interface IConfig { }; currentLine: { + scrollable: boolean; dateFormat: string | null; enabled: boolean; format: string;