Adds advanced setting for toggling whitespace

This is in-case it is still needed (it if off by default)
This commit is contained in:
Eric Amodio
2017-02-05 15:44:30 -05:00
parent 7352a70662
commit 15c81ef36f
4 changed files with 39 additions and 3 deletions

View File

@@ -245,6 +245,11 @@
"verbose" "verbose"
], ],
"description": "Specifies how much (if any) output will be sent to the GitLens output channel" "description": "Specifies how much (if any) output will be sent to the GitLens output channel"
},
"gitlens.advanced.toggleWhitespace.enabled": {
"type": "boolean",
"default": false,
"description": "Specifies whether or not to toggle whitespace off then showing blame annotations (*may* be required by certain fonts/themes)"
} }
} }
}, },

View File

@@ -3,6 +3,7 @@ import { Functions } from './system';
import { Disposable, ExtensionContext, TextDocument, TextEditor, TextEditorViewColumnChangeEvent, window, workspace } from 'vscode'; import { Disposable, ExtensionContext, TextDocument, TextEditor, TextEditorViewColumnChangeEvent, window, workspace } from 'vscode';
import { BlameAnnotationProvider } from './blameAnnotationProvider'; import { BlameAnnotationProvider } from './blameAnnotationProvider';
import { TextDocumentComparer, TextEditorComparer } from './comparers'; import { TextDocumentComparer, TextEditorComparer } from './comparers';
// import { IAdvancedConfig } from './configuration';
import GitProvider from './gitProvider'; import GitProvider from './gitProvider';
import { Logger } from './logger'; import { Logger } from './logger';
import WhitespaceController from './whitespaceController'; import WhitespaceController from './whitespaceController';
@@ -11,12 +12,19 @@ export default class BlameAnnotationController extends Disposable {
private _annotationProviders: Map<number, BlameAnnotationProvider> = new Map(); private _annotationProviders: Map<number, BlameAnnotationProvider> = new Map();
private _blameAnnotationsDisposable: Disposable; private _blameAnnotationsDisposable: Disposable;
private _disposable: Disposable;
private _whitespaceController: WhitespaceController | undefined; private _whitespaceController: WhitespaceController | undefined;
constructor(private context: ExtensionContext, private git: GitProvider) { constructor(private context: ExtensionContext, private git: GitProvider) {
super(() => this.dispose()); super(() => this.dispose());
this._whitespaceController = new WhitespaceController(context); this._onConfigure();
const subscriptions: Disposable[] = [];
subscriptions.push(workspace.onDidChangeConfiguration(this._onConfigure, this));
this._disposable = Disposable.from(...subscriptions);
} }
dispose() { dispose() {
@@ -24,6 +32,17 @@ export default class BlameAnnotationController extends Disposable {
this._blameAnnotationsDisposable && this._blameAnnotationsDisposable.dispose(); this._blameAnnotationsDisposable && this._blameAnnotationsDisposable.dispose();
this._whitespaceController && this._whitespaceController.dispose(); this._whitespaceController && this._whitespaceController.dispose();
this._disposable && this._disposable.dispose();
}
private _onConfigure() {
const toggleWhitespace = workspace.getConfiguration('gitlens.advanced.toggleWhitespace').get<boolean>('enabled');
if (toggleWhitespace && !this._whitespaceController) {
this._whitespaceController = new WhitespaceController();
}
else if (!toggleWhitespace && this._whitespaceController) {
this._whitespaceController.dispose();
}
} }
async clear(column: number) { async clear(column: number) {

View File

@@ -99,6 +99,9 @@ export interface IAdvancedConfig {
output: { output: {
level: OutputLevel; level: OutputLevel;
}; };
toggleWhitespace: {
enabled: boolean;
};
} }
export interface IConfig { export interface IConfig {

View File

@@ -1,5 +1,5 @@
'use strict'; 'use strict';
import { Disposable, ExtensionContext, workspace } from 'vscode'; import { Disposable, workspace } from 'vscode';
import { Logger } from './logger'; import { Logger } from './logger';
enum SettingLocation { enum SettingLocation {
@@ -12,12 +12,13 @@ export default class WhitespaceController extends Disposable {
private _count: number = 0; private _count: number = 0;
private _disposable: Disposable; private _disposable: Disposable;
private _disposed: boolean = false;
private _ignoreNextConfigChange: boolean = false; private _ignoreNextConfigChange: boolean = false;
private _renderWhitespace: string; private _renderWhitespace: string;
private _renderWhitespaceLocation: SettingLocation = SettingLocation.default; private _renderWhitespaceLocation: SettingLocation = SettingLocation.default;
private _requiresOverride: boolean; private _requiresOverride: boolean;
constructor(context: ExtensionContext) { constructor() {
super(() => this.dispose()); super(() => this.dispose());
const subscriptions: Disposable[] = []; const subscriptions: Disposable[] = [];
@@ -30,12 +31,16 @@ export default class WhitespaceController extends Disposable {
} }
dispose() { dispose() {
this._disposed = true;
if (this._count !== 0) { if (this._count !== 0) {
this._restoreWhitespace(); this._restoreWhitespace();
this._count = 0;
} }
} }
private _onConfigurationChanged() { private _onConfigurationChanged() {
if (this._disposed) return;
if (this._ignoreNextConfigChange) { if (this._ignoreNextConfigChange) {
this._ignoreNextConfigChange = false; this._ignoreNextConfigChange = false;
Logger.log(`Whitespace changed; ignored`); Logger.log(`Whitespace changed; ignored`);
@@ -70,6 +75,8 @@ export default class WhitespaceController extends Disposable {
} }
override() { override() {
if (this._disposed) return;
Logger.log(`Request whitespace override; count=${this._count}`); Logger.log(`Request whitespace override; count=${this._count}`);
if (this._count === 0 && this._requiresOverride) { if (this._count === 0 && this._requiresOverride) {
this._ignoreNextConfigChange = true; this._ignoreNextConfigChange = true;
@@ -86,6 +93,8 @@ export default class WhitespaceController extends Disposable {
} }
restore() { restore() {
if (this._disposed) return;
Logger.log(`Request whitespace restore; count=${this._count}`); Logger.log(`Request whitespace restore; count=${this._count}`);
this._count--; this._count--;
if (this._count === 0 && this._requiresOverride) { if (this._count === 0 && this._requiresOverride) {