NNYJ Tweaks
Quality-of-life bundle for VS Code. Each feature toggles independently in the Settings UI and reacts live, no reload.
Features
- Policy toggle: status bar item to grant timed allow overrides for AI CLI policy ask groups, reads group names from
policy.json, writes overrides.json consumed by external policy guards
- Open left: when opening a file auto-splits a new editor group to the right of a locked webview group, moves the new group to the left so the webview stays rightmost
- Close empty: when the last tab in a locked group closes, unlocks and closes the group, VS Code otherwise leaves an empty locked canvas that
closeEmptyGroups skips
- Line highlight: toggle a background highlight on selected lines, single color, tracks line moves during edits, in-session only (cleared on window reload)
- Markdown tables:
- Tab and Shift+Tab navigate cells and pad columns
- Tab past the last cell adds a row
- Insert, move and align columns from the editor context menu
- Convert selected CSV or TSV, including quoted fields
- Format all tables through a command or optional format-on-save
Usage
Policy toggle: click the $(lock) policy status bar item, pick a group (or all groups), pick a duration (30m, 2h, custom 90m/6h/2d). Active overrides show remaining time in the status bar and expire on their own.
Commands:
| Command |
Description |
Policy Toggle: Allow Group Temporarily |
Pick group and duration |
Policy Toggle: Clear All Overrides |
Remove every override |
Line Highlight: Toggle on Selected Lines |
Toggle highlight on selection |
Line Highlight: Clear All |
Remove all highlights |
Suggested keybinding:
{ "key": "alt+q", "command": "nnyjTweaks.lineHighlight.toggle", "when": "editorTextFocus" }
Open left and close empty run automatically, no commands.
Table commands use the Table: prefix in the Command Palette and the Markdown Table editor context menu.
- Table editing supports Markdown, MDX and Quarto
- Code fences are skipped
- CSV and TSV use the first row as headers and convert embedded newlines to
<br>
- Unicode padding counts emoji graphemes as two columns
- NNYJ Syntax Highlight supplies fixed emoji display widths and table borders
- Disable other table extensions that bind Tab to prevent conflicts
Settings
| Property |
Default |
Description |
nnyjTweaks.policyToggle.enabled |
true |
Enable the policy status bar toggle |
nnyjTweaks.openLeft.enabled |
true |
Enable locked-group placement fix |
nnyjTweaks.closeEmpty.enabled |
true |
Enable locked empty group close |
nnyjTweaks.lineHighlight.enabled |
true |
Enable line highlight commands |
nnyjTweaks.lineHighlight.color |
#ffe60030 |
Highlight background, hex with alpha |
nnyjTweaks.table.enabled |
true |
Enable table editing |
nnyjTweaks.table.format_on_save |
false |
Format tables before saving |
nnyjTweaks.policyToggle.policyPath |
C:/N/scripts/ai/policy/policy.json |
Source of ask group names |
nnyjTweaks.policyToggle.overridesPath |
C:/N/scripts/ai/policy/overrides.json |
Overrides file read by the policy guards |
nnyjTweaks.policyToggle.durations |
["30m", "1h", "2h", "4h", "8h"] |
Durations offered in the picker |
[!NOTE]
Policy toggle only writes the overrides file, enforcement happens in the external guard scripts that read it. Without those, the feature does nothing useful.
How it works
Policy toggle watches the overrides directory (a directory watch, since guards delete and recreate the file, which kills file-level watches) and refreshes the status bar every 30s so expiry shows without an event. Overrides are written atomically via temp file rename; an empty override set deletes the file.
Open left listens to tab group changes. A newly opened single-file group whose left neighbor contains no file tabs is treated as an auto-split beside a locked webview, and gets moved one group left.
Close empty listens to tab close events. After a short settle delay, a group left with zero tabs is closed via the tab groups API (no focus change, safe across auxiliary windows). A sole active group is only unlocked, so the next editor reuses it instead of splitting beside it.
Install
From the VS Code Marketplace, or sideload a release vsix:
gh release download -R nnyj/vscode-nnyj-tweaks -p '*.vsix'
code --install-extension nnyj-tweaks-*.vsix
Or build locally:
npm run package
code --install-extension nnyj-tweaks-1.1.0.vsix
License
MIT