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
327 lines
9.3 KiB
JSON
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"
|
|
}
|
|
}
|