Add GNU Texinfo version indicator in status bar.
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
This commit is contained in:
parent
05a524b593
commit
658b44fe50
|
@ -8,6 +8,7 @@
|
|||
import * as vscode from 'vscode';
|
||||
import ContextMapping from './context_mapping';
|
||||
import Diagnosis from './diagnosis';
|
||||
import Indicator from './indicator';
|
||||
import Logger from './logger';
|
||||
import Options from './options';
|
||||
import PreviewContext from './contexts/preview';
|
||||
|
@ -18,7 +19,8 @@ import FoldingRangeProvider from './providers/folding_range';
|
|||
|
||||
export function activate(context: vscode.ExtensionContext) {
|
||||
context.subscriptions.push(
|
||||
ContextMapping.instance, Diagnosis.instance, Logger.instance, Options.instance,
|
||||
ContextMapping.instance, Diagnosis.instance, Indicator.instance, Logger.instance, Options.instance,
|
||||
vscode.window.onDidChangeActiveTextEditor(Indicator.onTextEditorChange),
|
||||
vscode.workspace.onDidChangeTextDocument(ContextMapping.onDocumentUpdate),
|
||||
vscode.workspace.onDidSaveTextDocument(ContextMapping.onDocumentSave),
|
||||
vscode.workspace.onDidCloseTextDocument(ContextMapping.onDocumentClose),
|
||||
|
|
|
@ -0,0 +1,63 @@
|
|||
/**
|
||||
* indicator.ts
|
||||
*
|
||||
* @author CismonX <admin@cismon.net>
|
||||
* @license MIT
|
||||
*/
|
||||
|
||||
import * as vscode from 'vscode';
|
||||
import Options from './options';
|
||||
import { exec } from './utils/misc';
|
||||
|
||||
export default class Indicator implements vscode.Disposable {
|
||||
|
||||
private static singleton?: Indicator;
|
||||
|
||||
private statusBarItem: vscode.StatusBarItem;
|
||||
|
||||
private refresh(editor?: vscode.TextEditor) {
|
||||
if (editor === undefined || editor.document.languageId != 'texinfo') {
|
||||
this.statusBarItem.hide();
|
||||
} else {
|
||||
this.statusBarItem.show();
|
||||
}
|
||||
}
|
||||
|
||||
public async updateStatus() {
|
||||
const output = await exec(Options.makeinfo, ['--version'], Options.maxSize);
|
||||
const result = output.data?.match(/\(GNU texinfo\) (.*)\n/);
|
||||
let tooltip = '', icon: string, version = '';
|
||||
if (result && result[1]) {
|
||||
version = result[1];
|
||||
if (!isNaN(+version) && +version < 6.7) {
|
||||
icon = '$(warning)';
|
||||
tooltip = `GNU Texinfo (${Options.makeinfo}) is outdated.\n` +
|
||||
'Please upgrade to the latest version (6.7).';
|
||||
} else {
|
||||
icon = '$(check)';
|
||||
}
|
||||
} else {
|
||||
icon = '$(close)';
|
||||
tooltip = `GNU Texinfo (${Options.makeinfo}) is not correctly installed or configured.`;
|
||||
}
|
||||
this.statusBarItem.text = `${icon} GNU Texinfo ${version}`;
|
||||
this.statusBarItem.tooltip = tooltip;
|
||||
}
|
||||
|
||||
public static onTextEditorChange(editor?: vscode.TextEditor) {
|
||||
Indicator.instance.refresh(editor);
|
||||
}
|
||||
|
||||
static get instance() {
|
||||
return this.singleton ??= new Indicator();
|
||||
}
|
||||
|
||||
private constructor() {
|
||||
this.statusBarItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Right, 100);
|
||||
this.updateStatus().then(() => this.refresh(vscode.window.activeTextEditor));
|
||||
}
|
||||
|
||||
dispose() {
|
||||
this.statusBarItem.dispose();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue