diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 5872608..6a0274f 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,2 +1,4 @@ -ko_fi: maxbec -custom: ["https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=58GE7PE2EAQAY&source=url"] +github: mannemiethe +custom: + - "https://www.buymeacoffee.com/mannemiethe" + - "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=58GE7PE2EAQAY&source=url" # Original developer: Maximilian Beckenbauer diff --git a/.vscodeignore b/.vscodeignore index 770963d..c6dbc7e 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -11,3 +11,6 @@ client/node_modules/** !client/node_modules/vscode-languageclient/** !client/node_modules/vscode-languageserver-protocol/** !client/node_modules/vscode-languageserver-types/** +**/node_modules/* +!**/node_modules/semver +!**/node_modules/semver/** diff --git a/CHANGELOG.md b/CHANGELOG.md index d6b51a5..0b79f1e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,26 @@ -# openHAB Alignment Tool Change Log +# openHAB Config Aligner 2026 Change Log -All notable changes to the openHAB Alignment Tool extension will be documented in this file. +## [2.1.10] - 01.05.2026 + +- Moved support and original-author credit links to the top of the Marketplace README overview. +- Added extension sponsor metadata pointing to Manuel Miethe's Buy Me a Coffee page. + + +## [2.1.9] - 01.05.2026 + +- Updated Marketplace package identity to `ManuelMiethe.openhab-config-aligner-2026`. +- Renamed install-facing settings and command IDs to `openhab-config-aligner-2026.*`. +- Added README notes for the maintained fork, fixed formatting bugs, and support links. + + +## [2.1.8] - 01.05.2026 + +- First community-maintained release after the original project went quiet in 2021. +- Continued the upstream package version from `2.1.7` to `2.1.8` instead of resetting to a year-based version. +- Renamed extension package to `openhab-config-aligner-2026` / display name `openHAB Config Aligner 2026` to avoid colliding with the unmaintained original Marketplace listing. + + +All notable changes to the openHAB Config Aligner 2026 extension will be documented in this file. ## [2.1.6] - 30.04.2021 diff --git a/README.md b/README.md index fbfd1dc..46a73e4 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,32 @@
- +


-[![Build Status](https://maxbec.visualstudio.com/openHAB%20Alignment%20Tool/_apis/build/status/MaxBec.openHAB-Alignment-Tool?branchName=master)](https://maxbec.visualstudio.com/openHAB%20Alignment%20Tool/_build/latest?definitionId=1&branchName=master) -[![Visual Studio Marketplace Installs](https://img.shields.io/visual-studio-marketplace/i/max-beckenbauer.oh-alignment-tool?color=blue&label=Installs&logo=visual-studio-code)](https://img.shields.io/visual-studio-marketplace/i/max-beckenbauer.oh-alignment-tool?color=blue&label=Installs&logo=visual-studio-code) -[![Visual Studio Marketplace Version](https://img.shields.io/visual-studio-marketplace/v/max-beckenbauer.oh-alignment-tool?color=orange&label=Version)](https://img.shields.io/visual-studio-marketplace/v/max-beckenbauer.oh-alignment-tool?color=orange) -[![Visual Studio Marketplace Version](https://img.shields.io/visual-studio-marketplace/stars/max-beckenbauer.oh-alignment-tool?label=Rating&logo=visual-studio-code)](https://img.shields.io/visual-studio-marketplace/stars/max-beckenbauer.oh-alignment-tool?label=Rating&logo=visual-studio-code) +[![Visual Studio Marketplace Installs](https://img.shields.io/visual-studio-marketplace/i/ManuelMiethe.openhab-config-aligner-2026?color=blue&label=Installs&logo=visual-studio-code)](https://img.shields.io/visual-studio-marketplace/i/ManuelMiethe.openhab-config-aligner-2026?color=blue&label=Installs&logo=visual-studio-code) +[![Visual Studio Marketplace Version](https://img.shields.io/visual-studio-marketplace/v/ManuelMiethe.openhab-config-aligner-2026?color=orange&label=Version)](https://img.shields.io/visual-studio-marketplace/v/ManuelMiethe.openhab-config-aligner-2026?color=orange) +[![Visual Studio Marketplace Version](https://img.shields.io/visual-studio-marketplace/stars/ManuelMiethe.openhab-config-aligner-2026?label=Rating&logo=visual-studio-code)](https://img.shields.io/visual-studio-marketplace/stars/ManuelMiethe.openhab-config-aligner-2026?label=Rating&logo=visual-studio-code) + +## Support & Credits + +If this maintained fork helps you, please consider supporting the ongoing maintenance: + +- ☕ [Buy Manuel Miethe a coffee](https://www.buymeacoffee.com/mannemiethe) + +This extension is a maintained community fork of the original openHAB Alignment Tool by Maximilian Beckenbauer. +If you want to thank the original developer as well: + +- 💙 [PayPal donation for Maximilian Beckenbauer, the original developer](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=58GE7PE2EAQAY&source=url) This extension adds support for formatting and indenting [openHAB](http://www.openhab.org) files like `*.items`, `*.sitemap`, etc. At the moment only `*.items` and `*.sitemap` files are supported. They can be formatted in a column channel-column or multiline style. In the future the other file types and other format-types will be added. Feel free to add feature-requests on the github repository. -If you've found the extension helpful or useful, then please consider throwing a coffee my way to help support my work. As i am a student and would like to invest more time and effort in this project this would really help me. +## Maintained Fork / Fixed Bug + +This 2026 maintained fork includes the upstream fixes and adds a fix for item channel binding configurations where curly braces inside quoted strings could break formatting. Example affected cases are channel parameters that contain JSON-like values or text with `{...}` inside quotes. -- [Ko-Fi Donation to MaxBec](https://ko-fi.com/C0C01XTXB) -- [PayPal Donation](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=58GE7PE2EAQAY&source=url) +It also corrects space-based column padding when `editor.insertSpaces` is enabled, so aligned columns stay consistent with the configured tab size. ## Features @@ -75,19 +86,19 @@ The formatting is available for the following openhab file types: With this option you can choose if you want to have a new line inserted after each item. If there is already a single empty line after an item this settings is ignored. -`"oh-alignment-tool.newLineAfterItem": true` +`"openhab-config-aligner-2026.newLineAfterItem": true` ### Preserve Whitespace Whitespaces (tabs or spaces) in front of items get preserved and won't be deleted. -`"oh-alignment-tool.preserveWhitespace": true` +`"openhab-config-aligner-2026.preserveWhitespace": true` ### Multiline Indent Amount With this option you can control the amount of indent when using the Multiline format. -`"oh-alignment-tool.multilineIndentAmount": 28` +`"openhab-config-aligner-2026.multilineIndentAmount": 28` ### Format Style @@ -102,11 +113,11 @@ the different parts. ## Known Issues -See [Github Issues](https://github.com/MaxBec/openHAB-Alignment-Tool/issues) file for the details. +See [Github Issues](https://github.com/mannemiethe/openHAB-Alignment-Tool/issues) file for the details. ## Release Notes -See [CHANGELOG.md](https://github.com/MaxBec/openHAB-Alignment-Tool/blob/master/CHANGELOG.md) file for the details. +See [CHANGELOG.md](https://github.com/mannemiethe/openHAB-Alignment-Tool/blob/master/CHANGELOG.md) file for the details. --- diff --git a/package-lock.json b/package-lock.json index f0a42a9..3ed924b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,14 @@ { - "name": "oh-alignment-tool", - "version": "2.1.3", + "name": "openhab-config-aligner-2026", + "version": "2.1.10", "lockfileVersion": 2, "requires": true, "packages": { "": { - "name": "oh-alignment-tool", - "version": "2.1.3", + "name": "openhab-config-aligner-2026", + "version": "2.1.10", "license": "EPL-2.0", "dependencies": { - "@types/semver": "^7.3.4", "semver": "^7.3.5" }, "devDependencies": { @@ -20,7 +19,6 @@ "@types/vscode": "^1.55.0", "glob": "^7.1.6", "mocha": "^8.3.2", - "semver": "^7.3.5", "tslint": "^5.20.1", "typescript": "^4.2.4", "vscode-test": "^1.5.2" @@ -89,7 +87,8 @@ "node_modules/@types/semver": { "version": "7.3.4", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-+nVsLKlcUCeMzD2ufHEYuJ9a2ovstb6Dp52A5VsoKxDXgvE051XgHI/33I1EymwkRGQkwnA0LkhnUzituGs4EQ==" + "integrity": "sha512-+nVsLKlcUCeMzD2ufHEYuJ9a2ovstb6Dp52A5VsoKxDXgvE051XgHI/33I1EymwkRGQkwnA0LkhnUzituGs4EQ==", + "dev": true }, "node_modules/@types/vscode": { "version": "1.55.0", @@ -1769,7 +1768,8 @@ "@types/semver": { "version": "7.3.4", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-+nVsLKlcUCeMzD2ufHEYuJ9a2ovstb6Dp52A5VsoKxDXgvE051XgHI/33I1EymwkRGQkwnA0LkhnUzituGs4EQ==" + "integrity": "sha512-+nVsLKlcUCeMzD2ufHEYuJ9a2ovstb6Dp52A5VsoKxDXgvE051XgHI/33I1EymwkRGQkwnA0LkhnUzituGs4EQ==", + "dev": true }, "@types/vscode": { "version": "1.55.0", diff --git a/package.json b/package.json index b6f0b55..921fdb4 100644 --- a/package.json +++ b/package.json @@ -1,16 +1,16 @@ { - "name": "oh-alignment-tool", - "displayName": "openHAB Alignment Tool", - "version": "2.1.6", - "publisher": "max-beckenbauer", + "name": "openhab-config-aligner-2026", + "displayName": "openHAB Config Aligner 2026", + "version": "2.1.10", + "publisher": "ManuelMiethe", "contributors": [ + "Manuel Miethe", "Mark Hilbush" ], - "description": "Tool to format and indent openHAB files. At the moment only item and sitemap files can be formatted.", + "description": "Community-maintained config alignment and formatting tool for openHAB item and sitemap files.", "author": { - "name": "Maximilian Beckenbauer", - "email": "max.bec92@gmail.com", - "url": "https://github.com/MaxBec/openHAB-Alignment-Tool" + "name": "Manuel Miethe", + "url": "https://github.com/mannemiethe" }, "categories": [ "Other", @@ -19,12 +19,11 @@ ], "icon": "images/logo.png", "repository": { - "url": "https://github.com/MaxBec/openHAB-Alignment-Tool", + "url": "https://github.com/mannemiethe/openHAB-Alignment-Tool", "type": "git" }, "bugs": { - "url": "https://github.com/MaxBec/openHAB-Alignment-Tool/issues", - "email": "max.bec92@gmail.com" + "url": "https://github.com/mannemiethe/openHAB-Alignment-Tool/issues" }, "engines": { "vscode": "^1.55.0" @@ -37,60 +36,60 @@ "contributes": { "commands": [ { - "command": "extension.insert-item-generic", - "category": "openHAB Alignment", + "command": "openhab-config-aligner-2026.insert-item-generic", + "category": "openHAB Config Aligner", "title": "Insert Item" }, { - "command": "extension.insert-item-switch", - "category": "openHAB Alignment", + "command": "openhab-config-aligner-2026.insert-item-switch", + "category": "openHAB Config Aligner", "title": "Insert Switch Item" }, { - "command": "extension.insert-item-dimmer", - "category": "openHAB Alignment", + "command": "openhab-config-aligner-2026.insert-item-dimmer", + "category": "openHAB Config Aligner", "title": "Insert Dimmer Item" }, { - "command": "extension.insert-item-string", - "category": "openHAB Alignment", + "command": "openhab-config-aligner-2026.insert-item-string", + "category": "openHAB Config Aligner", "title": "Insert String Item" }, { - "command": "extension.insert-item-number", - "category": "openHAB Alignment", + "command": "openhab-config-aligner-2026.insert-item-number", + "category": "openHAB Config Aligner", "title": "Insert Number Item" }, { - "command": "extension.insert-item-datetime", - "category": "openHAB Alignment", + "command": "openhab-config-aligner-2026.insert-item-datetime", + "category": "openHAB Config Aligner", "title": "Insert DateTime Item" }, { - "command": "extension.whatsNew", + "command": "openhab-config-aligner-2026.whatsNew", "title": "%extension.commands.whatsNew.title%", "category": "%extension.commands.category.bookmarks%" }, { - "command": "_extension.whatsNewContextMenu", + "command": "_openhab-config-aligner-2026.whatsNewContextMenu", "title": "%extension.commands.whatsNewContextMenu.title%" } ], "configuration": { "type": "object", - "title": "openHAB Alignment Tool", + "title": "openHAB Config Aligner 2026", "properties": { - "oh-alignment-tool.preserveWhitespace": { + "openhab-config-aligner-2026.preserveWhitespace": { "type": "boolean", "default": false, "description": "Preserves any leading whitespace when reformatting an item." }, - "oh-alignment-tool.newLineAfterItem": { + "openhab-config-aligner-2026.newLineAfterItem": { "type": "boolean", "default": false, "description": "Choose if you want to have a new line inserted after each item." }, - "oh-alignment-tool.formatStyle": { + "openhab-config-aligner-2026.formatStyle": { "type": "string", "default": "Column", "enum": [ @@ -104,12 +103,12 @@ "Formats the files in a multiline-style. E.g. in an items file each part of an item is written in a new line." ] }, - "oh-alignment-tool.minimumIndentAmount": { + "openhab-config-aligner-2026.minimumIndentAmount": { "type": "number", "default": 4, "description": "Minimum separation of thing or item parts." }, - "oh-alignment-tool.enableBetaFeatures": { + "openhab-config-aligner-2026.enableBetaFeatures": { "type": "boolean", "default": false, "description": "Enable beta features like sitemap formatting or thing file formatting." @@ -125,7 +124,6 @@ "test": "node ./out/test/runTest.js" }, "dependencies": { - "@types/semver": "^7.3.4", "semver": "^7.3.5" }, "devDependencies": { @@ -136,9 +134,20 @@ "@types/vscode": "^1.55.0", "glob": "^7.1.6", "mocha": "^8.3.2", - "semver": "^7.3.5", "tslint": "^5.20.1", "typescript": "^4.2.4", "vscode-test": "^1.5.2" + }, + "homepage": "https://github.com/mannemiethe/openHAB-Alignment-Tool#readme", + "keywords": [ + "openHAB", + "formatter", + "alignment", + "items", + "sitemap", + "config" + ], + "sponsor": { + "url": "https://www.buymeacoffee.com/mannemiethe" } } diff --git a/src/contentProvider.ts b/src/contentProvider.ts index 56dfeee..ad0ed73 100644 --- a/src/contentProvider.ts +++ b/src/contentProvider.ts @@ -10,7 +10,7 @@ export class BookmarksContentProvider implements ContentProvider { public provideHeader(logoUrl: string): Header { return
{ logo: { src: logoUrl, height: 50, width: 40 }, - message: `openHAB Alignment Tool This extension adds support for formatting and indenting openHAB + message: `openHAB Config Aligner 2026 This extension adds support for formatting and indenting openHAB files like *.items, *.sitemap, etc. At the moment only *.items and *.sitemap files are supported. They can be formatted in a column channel-column or multiline style. In the future the other file types and other format-types will be added. @@ -21,6 +21,28 @@ export class BookmarksContentProvider implements ContentProvider { public provideChangeLog(): ChangeLogItem[] { const changeLog: ChangeLogItem[] = []; + changeLog.push({ kind: ChangeLogKind.VERSION, detail: { releaseNumber: "2.1.9", releaseDate: "May 2026" } }); + changeLog.push({ + kind: ChangeLogKind.FIXED, + detail: "Fixed formatting for item channel binding configurations where curly braces inside quoted strings could break alignment.", + }); + changeLog.push({ + kind: ChangeLogKind.FIXED, + detail: "Fixed space-based column padding when editor.insertSpaces is enabled, keeping aligned columns consistent with the configured tab size.", + }); + changeLog.push({ + kind: ChangeLogKind.CHANGED, + detail: "This maintained fork is published as openHAB Config Aligner 2026 under ManuelMiethe.openhab-config-aligner-2026.", + }); + changeLog.push({ + kind: ChangeLogKind.CHANGED, + detail: "Support ongoing maintenance: Buy Manuel Miethe a coffee at https://www.buymeacoffee.com/mannemiethe", + }); + changeLog.push({ + kind: ChangeLogKind.CHANGED, + detail: "Original developer support: PayPal donation for Maximilian Beckenbauer is still linked in the README and support section.", + }); + changeLog.push({ kind: ChangeLogKind.VERSION, detail: { releaseNumber: "2.1.0", releaseDate: "April 2021" } }); changeLog.push({ kind: ChangeLogKind.FIXED, @@ -63,14 +85,14 @@ export class BookmarksContentProvider implements ContentProvider { public provideSupportChannels(): SupportChannel[] { const supportChannels: SupportChannel[] = []; supportChannels.push({ - title: "Get me a coffee on Ko-Fi", - link: "https://ko-fi.com/C0C01XTXB", - message: "Buy me a coffe :)", + title: "Buy Manuel Miethe a coffee", + link: "https://www.buymeacoffee.com/mannemiethe", + message: "Support ongoing maintenance", }); supportChannels.push({ - title: "Donate via PayPal", + title: "PayPal donation for the original developer", link: "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=58GE7PE2EAQAY&source=url", - message: "Donate via PayPal", + message: "Support Maximilian Beckenbauer, the original developer", }); return supportChannels; } @@ -122,7 +144,7 @@ export class BookmarksSocialMediaProvider implements SocialMediaProvider { return [ { title: "Follow me on GitHub", - link: "https://github.com/MaxBec", + link: "https://github.com/mannemiethe", }, ]; } diff --git a/src/extension.ts b/src/extension.ts index 835383f..6cbed9a 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -31,9 +31,10 @@ const REGEX_ITEM_LABEL = /\".+?\"/; const REGEX_ITEM_ICON = /<.+?>/; const REGEX_ITEM_GROUP = /\(.+?\)/; const REGEX_ITEM_TAG = /\[\s*(\".+?\")\s*(,\s*\".+?\"\s*)*\]/; -const REGEX_ITEM_CHANNEL_START = /\{\s*(\w*\s?=\s?"[^\}]*"?,?\s*)+\}?/; -const REGEX_ITEM_CHANNEL_END = /.*[\},]/; -const REGEX_ITEM_CHANNEL_SECTION = /(\w+\=\".*?\"\s*(\[.*?\])?)+/g; +// Updated regex to handle nested curly braces inside quoted strings +const REGEX_ITEM_CHANNEL_START = /\{.*\}$/; +const REGEX_ITEM_CHANNEL_END = /.*\}$/; +const REGEX_ITEM_CHANNEL_SECTION = /\w+="[^"]*"(\s*\[[^\]]*\])?/g; const REGEX_SITEMAP_ELEMENTS = /\b(Frame|Default|Text|Group|Switch|Selection|Setpoint|Slider|Colorpicker|Webview|Mapview|Image|Video|Chart)\b/g; @@ -78,7 +79,7 @@ export function activate(context: vscode.ExtensionContext) { context.subscriptions.push( vscode.languages.registerDocumentFormattingEditProvider("openhab", { provideDocumentFormattingEdits: (document, options, token) => { - let config = vscode.workspace.getConfiguration("oh-alignment-tool"); + let config = vscode.workspace.getConfiguration("openhab-config-aligner-2026"); // Check the file type, clean the file and format it if (document.fileName.includes(".sitemap")) { return config.enableBetaFeatures ? formatSitemapFile() : undefined; @@ -104,27 +105,27 @@ export function activate(context: vscode.ExtensionContext) { ); // Insert a generic item - vscode.commands.registerCommand("extension.insert-item-generic", () => { + vscode.commands.registerCommand("openhab-config-aligner-2026.insert-item-generic", () => { commandInsertNewGenericItem(); }); // Insert a Switch item - vscode.commands.registerCommand("extension.insert-item-switch", () => { + vscode.commands.registerCommand("openhab-config-aligner-2026.insert-item-switch", () => { commandInsertNewSwitchItem(); }); // Insert a Dimmer item - vscode.commands.registerCommand("extension.insert-item-dimmer", () => { + vscode.commands.registerCommand("openhab-config-aligner-2026.insert-item-dimmer", () => { commandInsertNewDimmerItem(); }); // Insert a String item - vscode.commands.registerCommand("extension.insert-item-string", () => { + vscode.commands.registerCommand("openhab-config-aligner-2026.insert-item-string", () => { commandInsertNewStringItem(); }); // Insert a Number item - vscode.commands.registerCommand("extension.insert-item-number", () => { + vscode.commands.registerCommand("openhab-config-aligner-2026.insert-item-number", () => { commandInsertNewNumberItem(); }); // Insert a DateTime item - vscode.commands.registerCommand("extension.insert-item-datetime", () => { + vscode.commands.registerCommand("openhab-config-aligner-2026.insert-item-datetime", () => { commandInsertNewDateTimeItem(); }); @@ -275,7 +276,7 @@ function formatItemFile(range?: vscode.Range): vscode.TextEdit[] { var itemBlockCounter = 0; // Get the format configuration settings - let config = vscode.workspace.getConfiguration("oh-alignment-tool"); + let config = vscode.workspace.getConfiguration("openhab-config-aligner-2026"); let preserveWhitespace = config.preserveWhitespace; let newLineAfterItem = config.newLineAfterItem; @@ -569,7 +570,7 @@ function formatThingFile(range?: vscode.Range): vscode.TextEdit[] { let channelPending = false; // Get the format configuration settings - let config = vscode.workspace.getConfiguration("oh-alignment-tool"); + let config = vscode.workspace.getConfiguration("openhab-config-aligner-2026"); let preserveWhitespace = config.preserveWhitespace; let newLineAfterItem = config.newLineAfterItem; @@ -831,7 +832,7 @@ function insertItem(type: string, name: string, label: string, icon: string, gro */ function formatItem(item: Item): string { // Get the configuration settings - let config = vscode.workspace.getConfiguration("oh-alignment-tool"); + let config = vscode.workspace.getConfiguration("openhab-config-aligner-2026"); let formatStyle = item.formatOption ? item.formatOption : config.formatStyle; let newLineAfterItem = config.newLineAfterItem; let editor = vscode.window.activeTextEditor; @@ -971,7 +972,7 @@ function formatItem(item: Item): string { */ function formatThing(thing: Thing): string { // Get the configuration settings - let config = vscode.workspace.getConfiguration("oh-alignment-tool"); + let config = vscode.workspace.getConfiguration("openhab-config-aligner-2026"); let formatStyle = config.formatStyle; let newLineAfterItem = config.newLineAfterItem; let multilineIndentAmount = config.multilineIndentAmount; @@ -1028,8 +1029,8 @@ function formatThing(thing: Thing): string { *---------------------------------------------------------------------------------------------------------*/ function registerWhatsNew(context: vscode.ExtensionContext) { const provider = new BookmarksContentProvider(); - const viewer = new WhatsNewManager(context).registerContentProvider("max-beckenbauer", "oh-alignment-tool", provider).registerSocialMediaProvider(new BookmarksSocialMediaProvider()).registerSponsorProvider(new BookmarksSponsorProvider()); + const viewer = new WhatsNewManager(context).registerContentProvider("ManuelMiethe", "openhab-config-aligner-2026", provider).registerSocialMediaProvider(new BookmarksSocialMediaProvider()).registerSponsorProvider(new BookmarksSponsorProvider()); viewer.showPageInActivation(); - context.subscriptions.push(commands.registerCommand("extension.whatsNew", () => viewer.showPage())); - context.subscriptions.push(commands.registerCommand("_extension.whatsNewContextMenu", () => viewer.showPage())); + context.subscriptions.push(commands.registerCommand("openhab-config-aligner-2026.whatsNew", () => viewer.showPage())); + context.subscriptions.push(commands.registerCommand("_openhab-config-aligner-2026.whatsNewContextMenu", () => viewer.showPage())); } diff --git a/src/utils.ts b/src/utils.ts index 3a53a74..3a8cd3a 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -63,7 +63,7 @@ export function fillColumns(str: string, finalLength: number): string { } if (editor.options.insertSpaces) { - for (let e = 0; e < tabSize + finalLength - str.length; e++) { + for (let e = 0; e < tabSize - finalLength % tabSize + finalLength - str.length; e++) { tab += " "; } str += tab; diff --git a/src/vscode-whats-new/ui/whats-new.html b/src/vscode-whats-new/ui/whats-new.html index 9c0a8e6..9bdea43 100644 --- a/src/vscode-whats-new/ui/whats-new.html +++ b/src/vscode-whats-new/ui/whats-new.html @@ -42,7 +42,7 @@

What's New in ${extensionDisplayName} ${extensio

Need Help?