diff --git a/package.json b/package.json index 8c3b9587..96d17577 100644 --- a/package.json +++ b/package.json @@ -440,6 +440,11 @@ "type": "object", "title": "Arduino configuration", "properties": { + "arduino.useActiveSketch": { + "type": "boolean", + "default": false, + "description": "Allows to verify or compile sketch opened in active tab." + }, "arduino.path": { "type": "string", "default": "", diff --git a/src/arduino/vscodeSettings.ts b/src/arduino/vscodeSettings.ts index f66e268b..c0fc2f98 100644 --- a/src/arduino/vscodeSettings.ts +++ b/src/arduino/vscodeSettings.ts @@ -4,6 +4,7 @@ import * as vscode from "vscode"; const configKeys = { + USE_ACTIVE_SKETCH: "arduino.useActiveSketch", ARDUINO_PATH: "arduino.path", ARDUINO_COMMAND_PATH: "arduino.commandPath", ADDITIONAL_URLS: "arduino.additionalUrls", @@ -18,6 +19,7 @@ const configKeys = { }; export interface IVscodeSettings { + useActiveSketch: boolean; arduinoPath: string; commandPath: string; additionalUrls: string | string[]; @@ -43,6 +45,10 @@ export class VscodeSettings implements IVscodeSettings { private constructor() { } + public get useActiveSketch(): boolean { + return this.getConfigValue(configKeys.USE_ACTIVE_SKETCH); + } + public get arduinoPath(): string { return this.getConfigValue(configKeys.ARDUINO_PATH); } diff --git a/src/deviceContext.ts b/src/deviceContext.ts index 2e7f18e3..9ff4616e 100644 --- a/src/deviceContext.ts +++ b/src/deviceContext.ts @@ -8,6 +8,7 @@ import * as constants from "./common/constants"; import * as util from "./common/util"; import * as Logger from "./logger/logger"; +import { VscodeSettings } from "./arduino/vscodeSettings"; import { ARDUINO_CONFIG_FILE } from "./common/constants"; import { ArduinoWorkspace } from "./common/workspace"; @@ -96,6 +97,8 @@ export class DeviceContext implements IDeviceContext, vscode.Disposable { private _programmer: string; + private _vscodeSettings = VscodeSettings.getInstance(); + /** * @constructor */ @@ -112,6 +115,9 @@ export class DeviceContext implements IDeviceContext, vscode.Disposable { this._sketchStatusBar = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Right, constants.statusBarPriority.SKETCH); this._sketchStatusBar.command = "arduino.setSketchFile"; this._sketchStatusBar.tooltip = "Sketch File"; + vscode.window.onDidChangeActiveTextEditor(() => { + this.trySetOpenedFileAsSketch(); + }) } } @@ -191,6 +197,10 @@ export class DeviceContext implements IDeviceContext, vscode.Disposable { } public showStatusBar() { + if (this.trySetOpenedFileAsSketch()) { + return; + } + if (!this._sketch) { return false; } @@ -361,4 +371,17 @@ export class DeviceContext implements IDeviceContext, vscode.Disposable { } }); } + + public trySetOpenedFileAsSketch() { + if (this._vscodeSettings.useActiveSketch) { + const openedFile = vscode.window.activeTextEditor.document.fileName + .slice(vscode.workspace.rootPath.length + 1); + if (/\.((ino)|(cpp)|c)$/.test(openedFile.trim())) { + this._sketch = openedFile; + this.saveContext(); + return true; + } + } + return false; + }; }