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 @@
-

+
-[](https://maxbec.visualstudio.com/openHAB%20Alignment%20Tool/_build/latest?definitionId=1&branchName=master)
-[](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/v/max-beckenbauer.oh-alignment-tool?color=orange)
-[](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/i/ManuelMiethe.openhab-config-aligner-2026?color=blue&label=Installs&logo=visual-studio-code)
+[](https://img.shields.io/visual-studio-marketplace/v/ManuelMiethe.openhab-config-aligner-2026?color=orange)
+[](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 @@