Files
maxandClaude Fable 5.1 c6bd7485f9 Defaults: 3px row spacing, project name off
The left border already says which project a row belongs to, so the
file name gets the whole row by default.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0169iPWwKHZoBTNN9qwXiwqk
2026-09-08 19:07:41 +02:00

327 lines
9.3 KiB
JSON

{
"name": "vertical-tabs",
"displayName": "Vertical Tabs",
"description": "Open editors as a flat vertical list, colour-coded by project, with pinning. For people who turn the tab bar off.",
"version": "0.1.0",
"publisher": "local",
"license": "MIT",
"engines": {
"vscode": "^1.85.0"
},
"categories": [
"Other"
],
"keywords": [
"tabs",
"vertical tabs",
"open editors",
"csharp",
"visual studio"
],
"activationEvents": [
"onStartupFinished"
],
"main": "./out/extension.js",
"contributes": {
"views": {
"explorer": [
{
"id": "verticalTabs.tabs",
"name": "Tabs",
"type": "webview",
"contextualTitle": "Tabs",
"visibility": "visible"
}
]
},
"commands": [
{
"command": "verticalTabs.close",
"title": "Close Active Tab",
"category": "Tabs"
},
{
"command": "verticalTabs.closeOthers",
"title": "Close Other Tabs",
"category": "Tabs"
},
{
"command": "verticalTabs.togglePin",
"title": "Pin or Unpin Active Tab",
"category": "Tabs"
},
{
"command": "verticalTabs.setOrderOpen",
"title": "Sort Tabs by Open Order",
"category": "Tabs"
},
{
"command": "verticalTabs.setOrderProject",
"title": "Sort Tabs by Project",
"category": "Tabs"
},
{
"command": "verticalTabs.setOrderName",
"title": "Sort Tabs by File Name",
"category": "Tabs"
}
],
"menus": {
"view/title": [
{
"command": "verticalTabs.setOrderOpen",
"when": "view == verticalTabs.tabs",
"group": "1_order@1"
},
{
"command": "verticalTabs.setOrderProject",
"when": "view == verticalTabs.tabs",
"group": "1_order@2"
},
{
"command": "verticalTabs.setOrderName",
"when": "view == verticalTabs.tabs",
"group": "1_order@3"
}
]
},
"configuration": {
"title": "Vertical Tabs",
"properties": {
"verticalTabs.order": {
"type": "string",
"enum": [
"open",
"project",
"name"
],
"enumDescriptions": [
"Keep the order the editors are open in, matching the tab bar.",
"Group by project, so the colours run in blocks.",
"Sort by file name."
],
"default": "open",
"description": "How the tab list is ordered. Pinned tabs always come first."
},
"verticalTabs.pinnedFirst": {
"type": "boolean",
"default": true,
"description": "List pinned tabs above the rest."
},
"verticalTabs.showProject": {
"type": "boolean",
"default": false,
"description": "Show the project name beside the file. Off by default: the row's left border already encodes the project, so the file name gets the whole row."
},
"verticalTabs.showDirectory": {
"type": "string",
"enum": [
"never",
"duplicates",
"always"
],
"enumDescriptions": [
"Never show the directory. The file name gets the whole row.",
"Only when two open files share a name, which is the usual reason to need it.",
"Always show the directory."
],
"default": "duplicates",
"description": "When to spend row width on the containing directory."
},
"verticalTabs.colorByProject": {
"type": "boolean",
"default": true,
"description": "Colour each row's left border by its containing project."
},
"verticalTabs.allGroups": {
"type": "boolean",
"default": true,
"description": "List the tabs of every editor group. When off, only the active group is listed."
},
"verticalTabs.projectFiles": {
"type": "array",
"items": {
"type": "string"
},
"default": [
".asmdef",
".csproj",
".fsproj",
".vbproj",
"package.json",
"Cargo.toml",
"go.mod",
"pyproject.toml",
"pom.xml",
"build.gradle"
],
"description": "File names or extensions that mark a project root. The nearest match above a file names its project."
},
"verticalTabs.rowSpacing": {
"type": "number",
"default": 3,
"minimum": 0,
"maximum": 10,
"description": "Pixels of vertical space between rows."
},
"verticalTabs.borderWidth": {
"type": "number",
"default": 3,
"minimum": 0,
"maximum": 8,
"description": "Width in pixels of the project colour border on the left of each row."
},
"verticalTabs.decorateFiles": {
"type": "string",
"enum": [
"off",
"color",
"colorAndBadge"
],
"enumDescriptions": [
"Do not decorate files.",
"Colour each file's name by its project.",
"Colour the name and add a short project badge, such as AC for Acme.Shop.Client."
],
"default": "color",
"markdownDescription": "Colour files by project wherever VS Code shows file decorations: the Explorer, the built-in **Open Editors** view, and the editor tabs. This is what makes the built-in Open Editors view project-coloured without giving up its drag-and-drop.\n\nThere is no way to decorate only the Open Editors view, so the Explorer is coloured too. Git also decorates modified files and only one colour wins, so a dirty file may show Git's colour instead of its project's. Requires `explorer.decorations.colors`, which is on by default."
}
}
},
"colors": [
{
"id": "verticalTabs.project1",
"description": "Project colour 1.",
"defaults": {
"dark": "#4ec9b0",
"light": "#227d68",
"highContrast": "#4ec9b0"
}
},
{
"id": "verticalTabs.project2",
"description": "Project colour 2.",
"defaults": {
"dark": "#dcdcaa",
"light": "#7a6e17",
"highContrast": "#dcdcaa"
}
},
{
"id": "verticalTabs.project3",
"description": "Project colour 3.",
"defaults": {
"dark": "#9cdcfe",
"light": "#0b5f92",
"highContrast": "#9cdcfe"
}
},
{
"id": "verticalTabs.project4",
"description": "Project colour 4.",
"defaults": {
"dark": "#c586c0",
"light": "#8b338a",
"highContrast": "#c586c0"
}
},
{
"id": "verticalTabs.project5",
"description": "Project colour 5.",
"defaults": {
"dark": "#ce9178",
"light": "#a3441f",
"highContrast": "#ce9178"
}
},
{
"id": "verticalTabs.project6",
"description": "Project colour 6.",
"defaults": {
"dark": "#b5cea8",
"light": "#3c7a2e",
"highContrast": "#b5cea8"
}
},
{
"id": "verticalTabs.project7",
"description": "Project colour 7.",
"defaults": {
"dark": "#569cd6",
"light": "#1d4f91",
"highContrast": "#569cd6"
}
},
{
"id": "verticalTabs.project8",
"description": "Project colour 8.",
"defaults": {
"dark": "#d7ba7d",
"light": "#8a6512",
"highContrast": "#d7ba7d"
}
},
{
"id": "verticalTabs.project9",
"description": "Project colour 9.",
"defaults": {
"dark": "#f28b82",
"light": "#b3261e",
"highContrast": "#f28b82"
}
},
{
"id": "verticalTabs.project10",
"description": "Project colour 10.",
"defaults": {
"dark": "#a5d6a7",
"light": "#2e7d32",
"highContrast": "#a5d6a7"
}
},
{
"id": "verticalTabs.project11",
"description": "Project colour 11.",
"defaults": {
"dark": "#b39ddb",
"light": "#5e35b1",
"highContrast": "#b39ddb"
}
},
{
"id": "verticalTabs.project12",
"description": "Project colour 12.",
"defaults": {
"dark": "#80cbc4",
"light": "#00695c",
"highContrast": "#80cbc4"
}
},
{
"id": "verticalTabs.noProject",
"description": "Colour for files that belong to no project.",
"defaults": {
"dark": "descriptionForeground",
"light": "descriptionForeground",
"highContrast": "descriptionForeground"
}
}
]
},
"scripts": {
"vscode:prepublish": "npm run compile",
"compile": "tsc -p ./",
"watch": "tsc -watch -p ./",
"pretest": "npm run compile",
"test": "node ./out/test/runTest.js"
},
"devDependencies": {
"@types/mocha": "^10.0.6",
"@types/node": "^20.11.0",
"@types/vscode": "^1.85.0",
"@vscode/test-electron": "^2.4.1",
"mocha": "^10.4.0",
"typescript": "^5.4.0"
}
}