├── .editorconfig ├── .eslintrc.js ├── .gitattributes ├── .gitignore ├── .husky ├── .gitignore └── pre-commit ├── .prettierignore ├── .prettierrc ├── .vscode └── launch.json ├── .vscodeignore ├── CHANGELOG.md ├── INSTALL.md ├── LICENSE.md ├── README.md ├── ROADMAP.md ├── icon.png ├── package.json ├── src ├── @types │ ├── Palette.d.ts │ ├── ThemeColorsReference.d.ts │ └── ThemeSchema.d.ts ├── config │ └── index.ts ├── index.ts ├── scripts │ ├── build │ │ └── index.ts │ └── fetch-theme-colors-reference │ │ ├── index.ts │ │ └── scrape.ts ├── util │ ├── alpha.ts │ ├── color.ts │ └── press-enter-to-exit.ts └── variants │ ├── omni-owl-minimal_italics.ts │ └── omni-owl.ts ├── tsconfig.json ├── vsc-extension-quickstart.md └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | end_of_line = lf 3 | 4 | indent_style = space 5 | indent_size = 2 6 | 7 | [*.md] 8 | trim_trailing_whitespace = false -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | env: { 3 | es2021: true, 4 | node: true, 5 | }, 6 | extends: [ 7 | 'eslint:recommended', 8 | 'plugin:@typescript-eslint/eslint-recommended', 9 | 'plugin:@typescript-eslint/recommended', 10 | 'standard', 11 | 'prettier', 12 | ], 13 | parser: '@typescript-eslint/parser', 14 | parserOptions: { 15 | ecmaVersion: 'latest', 16 | sourceType: 'module', 17 | }, 18 | plugins: ['@typescript-eslint', 'prettier'], 19 | rules: { 20 | 'prettier/prettier': 'error', 21 | }, 22 | } 23 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Set default behavior to automatically normalize line endings. 2 | * text=auto 3 | 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | themes 3 | bin 4 | 5 | *.vsix 6 | 7 | .DS_Store -------------------------------------------------------------------------------- /.husky/.gitignore: -------------------------------------------------------------------------------- 1 | _ 2 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | . "$(dirname "$0")/_/husky.sh" 3 | 4 | npm run prettier:format 5 | npm run lint 6 | npx lint-staged 7 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | tsconfig.json -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "tabWidth": 2, 3 | "useTabs": false, 4 | "semi": false, 5 | "singleQuote": true, 6 | "trailingComma": "all", 7 | "arrowParens": "avoid", 8 | "endOfLine": "lf" 9 | } 10 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | // A launch configuration that launches the extension inside a new window 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | { 6 | "version": "0.2.0", 7 | "configurations": [ 8 | { 9 | "name": "Extension", 10 | "type": "extensionHost", 11 | "request": "launch", 12 | "args": ["--extensionDevelopmentPath=${workspaceFolder}"] 13 | } 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /.vscodeignore: -------------------------------------------------------------------------------- 1 | .vscode/** 2 | .vscode-test/** 3 | 4 | node_modules/** 5 | 6 | .husky/** 7 | 8 | src/** 9 | bin/** 10 | .github/** 11 | 12 | scripts/** 13 | tests/** 14 | 15 | .gitignore 16 | .gitattributes 17 | tsconfig.json 18 | yarn.lock 19 | 20 | .DS_Store 21 | .editorconfig 22 | .eslintrc.js 23 | .prettierrc 24 | 25 | ROADMAP.md 26 | vsc-extension-quickstart.md 27 | 28 | known_issues.md -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | All notable changes to the "omni-owl" extension will be documented in this file. 4 | 5 | Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. 6 | 7 | ## "0.1.0" 8 | 9 | - Initial release 10 | -------------------------------------------------------------------------------- /INSTALL.md: -------------------------------------------------------------------------------- 1 | ### [Visual Studio Code](https://code.visualstudio.com/) 2 | 3 | #### Install using Command Palette 4 | 5 | 1. Go to `View -> Command Palette` or press `Ctrl+Shift+P`; 6 | 2. Then enter `Install Extension`; 7 | 3. Write `Omni Owl`; 8 | 4. Select it or press `Enter` to install. 9 | 10 | #### Install using Git 11 | 12 | If you are a git user, you can install the theme and keep up to date by cloning the repo: 13 | 14 | $ git clone https://github.com/guilhermerodz/omni-owl ~/.vscode/extensions/theme-omni-owl 15 | $ cd ~/.vscode/extensions/theme-omni-owl 16 | $ npm install 17 | $ npm run build 18 | 19 | #### Activating theme 20 | 21 | Run Visual Studio Code. The `Omni Owl` theme will be available from `File -> Preferences -> Color Theme` dropdown menu. 22 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2022 Omni Owl Theme 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
10 | Dark theme for Visual Studio Code (with Italics) 11 |
12 | 13 |
14 |
15 |
16 |
17 |
20 | Install • 21 | Team • 22 | Imitate Preview • 23 | License 24 |
25 | 26 |
27 |
28 |
.+?<\/code>/g)
20 |
21 | if (!matches) {
22 | throw new Error(
23 | "Couldn't find any matches with ...
, maybe do cs have changed?",
24 | )
25 | }
26 |
27 | const keys = [...matches].map(key =>
28 | key.replace('', '').replace('
', ''),
29 | )
30 |
31 | return keys
32 | .filter(key => !/ /.test(key)) // Remove if contains spaces
33 | .filter(key => !/#.../.test(key)) // Remove if is a hex color
34 | .filter(key => !/"/.test(key)) // Remove if contains quotes
35 | .filter(key => key.length > 4) // Remove if it's very small
36 | .filter(key => !config.disposableKeys.includes(key)) // Remove if its in the list of disposable keys
37 | .sort()
38 | }
39 |
--------------------------------------------------------------------------------
/src/util/alpha.ts:
--------------------------------------------------------------------------------
1 | type Enumerate<
2 | N extends number,
3 | Acc extends number[] = [],
4 | > = Acc['length'] extends N
5 | ? Acc[number]
6 | : Enumerate
7 |
8 | type Range = Exclude<
9 | Enumerate,
10 | Enumerate
11 | >
12 |
13 | export const alpha = (hexRGB: string, alpha: Range<16, 256>) =>
14 | hexRGB + alpha.toString(16)
15 |
--------------------------------------------------------------------------------
/src/util/color.ts:
--------------------------------------------------------------------------------
1 | type HexDigit =
2 | | '0'
3 | | '1'
4 | | '2'
5 | | '3'
6 | | '4'
7 | | '5'
8 | | '6'
9 | | '7'
10 | | '8'
11 | | '9'
12 | | 'a'
13 | | 'b'
14 | | 'c'
15 | | 'd'
16 | | 'e'
17 | | 'f'
18 | | 'A'
19 | | 'B'
20 | | 'C'
21 | | 'D'
22 | | 'E'
23 | | 'F'
24 |
25 | type ThreeHexDigits = `${HexDigit}${HexDigit}${HexDigit}`
26 |
27 | type HexRGB = T extends `#${ThreeHexDigits}${infer rest1}`
28 | ? rest1 extends ``
29 | ? T // Three Digits RGB
30 | : rest1 extends `${ThreeHexDigits}`
31 | ? T
32 | : never
33 | : never
34 |
35 | type Alpha = T extends `${HexDigit}${HexDigit}` ? T : never
36 |
37 | export function rgb(hex: HexRGB): T {
38 | return hex
39 | }
40 |
41 | export function rgba(hex: HexRGB, alpha: Alpha): T {
42 | return `${hex}${alpha}`
43 | }
44 |
--------------------------------------------------------------------------------
/src/util/press-enter-to-exit.ts:
--------------------------------------------------------------------------------
1 | export function pressEnterToExit() {
2 | const stdin = process.openStdin()
3 |
4 | console.log('Press ENTER to exit.')
5 |
6 | stdin.on('data', () => {
7 | process.exit()
8 | })
9 | }
10 |
--------------------------------------------------------------------------------
/src/variants/omni-owl-minimal_italics.ts:
--------------------------------------------------------------------------------
1 | import { ThemeSchema } from '~/@types/ThemeSchema'
2 | import { alpha } from '~/util/alpha'
3 |
4 | import { rgb, rgba } from '~/util/color'
5 |
6 | const palette = {
7 | base: {
8 | BG: rgb('#13111B'),
9 | FG: rgb('#E1E1E6'),
10 | SELECTION: rgb('#41414D'),
11 | COMMENT: rgb('#746699'),
12 | CYAN: rgb('#988bc7'),
13 | GREEN: rgb('#67e480'),
14 | ORANGE: rgb('#E89E64'),
15 | PINK: rgb('#FF79C6'),
16 | PURPLE: rgb('#78D1E1'),
17 | RED: rgb('#E96379'),
18 | YELLOW: rgb('#e7de79'),
19 | },
20 | other: {
21 | TEMP_QUOTES: rgb('#e7de79'),
22 | TEMP_PROPERTY_QUOTES: rgb('#7159C1'),
23 | AlmostComment: rgb('#5A4B81'),
24 | LineNumber: rgb('#544776'),
25 | LineHighlight: rgba('#44475A', '75'),
26 | NonText: rgba('#FFFFFF', '1A'),
27 | WHITE: rgb('#E1E1E6'),
28 | TAB_DROP_BG: rgba('#44475A', '70'),
29 | // BGLighter: rgb('#252131'), // TODO: Make it brighter
30 | BGLighter: rgb('#3c3550'),
31 | BGLight: rgb('#201B2D'),
32 | BGDark: rgb('#15121E'),
33 | },
34 | ansi: {
35 | COLOR0: rgb('#201B2D'),
36 | COLOR1: rgb('#FF79C6'),
37 | COLOR2: rgb('#67e480'),
38 | COLOR3: rgb('#e7de79'),
39 | COLOR4: rgb('#78D1E1'),
40 | COLOR5: rgb('#988bc7'),
41 | COLOR6: rgb('#A1EFE4'),
42 | COLOR7: rgb('#E1E1E6'),
43 | COLOR8: rgb('#626483'),
44 | COLOR9: rgb('#ed4556'),
45 | COLOR10: rgb('#00F769'),
46 | COLOR11: rgb('#e7de79'),
47 | COLOR12: rgb('#78D1E1'),
48 | COLOR13: rgb('#988bc7'),
49 | COLOR14: rgb('#A4FFFF'),
50 | COLOR15: rgb('#F7F7FB'),
51 | },
52 | }
53 |
54 | export const omniOwlMinimalItalics: ThemeSchema = {
55 | name: 'Omni Owl (Minimal Italics)',
56 | type: 'dark',
57 | colors: {
58 | // Integrated Terminal Colors
59 | 'terminal.background': palette.base.BG,
60 | 'terminal.foreground': palette.base.FG,
61 | 'terminal.ansiBrightBlack': palette.ansi.COLOR8,
62 | 'terminal.ansiBrightRed': palette.ansi.COLOR9,
63 | 'terminal.ansiBrightGreen': palette.ansi.COLOR10,
64 | 'terminal.ansiBrightYellow': palette.ansi.COLOR11,
65 | 'terminal.ansiBrightBlue': palette.ansi.COLOR12,
66 | 'terminal.ansiBrightMagenta': palette.ansi.COLOR13,
67 | 'terminal.ansiBrightCyan': palette.ansi.COLOR14,
68 | 'terminal.ansiBrightWhite': palette.ansi.COLOR15,
69 | 'terminal.ansiBlack': palette.ansi.COLOR0,
70 | 'terminal.ansiRed': palette.ansi.COLOR1,
71 | 'terminal.ansiGreen': palette.ansi.COLOR2,
72 | 'terminal.ansiYellow': palette.ansi.COLOR3,
73 | 'terminal.ansiBlue': palette.ansi.COLOR4,
74 | 'terminal.ansiMagenta': palette.ansi.COLOR5,
75 | 'terminal.ansiCyan': palette.ansi.COLOR6,
76 | 'terminal.ansiWhite': palette.ansi.COLOR7,
77 | 'terminal.selectionBackground': alpha(palette.other.AlmostComment, 45),
78 | 'terminalCursor.background': palette.ansi.COLOR0,
79 | 'terminalCursor.foreground': palette.base.FG,
80 |
81 | // Contrast Colors
82 | contrastBorder: palette.other.BGDark,
83 | // contrastActiveBorder: palette.other.BGDark,
84 |
85 | // Base Colors
86 | focusBorder: palette.other.AlmostComment,
87 | foreground: palette.base.FG,
88 | // 'widget.shadow': palette.base.FG,
89 | 'selection.background': palette.base.PURPLE,
90 | errorForeground: palette.base.RED,
91 |
92 | // Button Control
93 | 'button.background': palette.base.SELECTION,
94 | 'button.foreground': palette.base.FG,
95 |
96 | // Dropdown Control
97 | 'dropdown.background': palette.other.BGLight,
98 | 'dropdown.border': palette.other.BGDark,
99 | 'dropdown.foreground': palette.base.FG,
100 |
101 | // Input Control
102 | 'input.background': palette.base.BG,
103 | 'input.foreground': palette.base.FG,
104 | 'input.border': palette.other.BGDark,
105 | 'input.placeholderForeground': palette.other.AlmostComment,
106 | 'inputOption.activeBorder': palette.base.PURPLE,
107 | // 'inputValidation.infoForeground': palette.base.PURPLE,
108 | // 'inputValidation.infoBackground': palette.base.PURPLE,
109 | 'inputValidation.infoBorder': palette.base.PINK,
110 | // 'inputValidation.warningForeground': palette.base.PINK,
111 | // 'inputValidation.warningBackground': palette.base.PINK,
112 | 'inputValidation.warningBorder': palette.base.ORANGE,
113 | // 'inputValidation.errorForeground': palette.base.ORANGE,
114 | // 'inputValidation.errorBackground': palette.base.ORANGE,
115 | 'inputValidation.errorBorder': palette.base.RED,
116 |
117 | // Scroll Bar Control
118 | // 'scrollbar.shadow': palette.base.RED,
119 | // 'scrollbarSlider.activeBackground': palette.base.RED,
120 | // 'scrollbarSlider.background': palette.base.RED,
121 | // 'scrollbarSlider.hoverBackground': palette.base.RED,
122 |
123 | // Badge
124 | 'badge.foreground': palette.base.FG,
125 | 'badge.background': palette.base.SELECTION,
126 |
127 | // Progress Bar
128 | 'progressBar.background': palette.base.PINK,
129 |
130 | // List & Trees
131 | 'list.activeSelectionBackground': alpha(palette.base.SELECTION, 60),
132 | 'list.activeSelectionForeground': palette.base.FG,
133 | 'list.dropBackground': palette.base.SELECTION,
134 | 'list.focusBackground': palette.other.LineHighlight,
135 | 'list.highlightForeground': palette.base.CYAN,
136 | 'list.hoverBackground': alpha(palette.base.SELECTION, 65),
137 | 'list.inactiveSelectionBackground': alpha(palette.base.SELECTION, 40),
138 | // 'list.inactiveSelectionForeground': alpha(palette.base.SELECTION, 40),
139 | 'list.warningForeground': palette.base.ORANGE,
140 | 'list.errorForeground': palette.base.RED,
141 | // 'list.hoverForeground': palette.base.RED,
142 | // 'list.focusForeground': palette.base.RED,
143 |
144 | // Activity Bar
145 | 'activityBar.background': palette.base.BG,
146 | 'activityBar.inactiveForeground': palette.other.AlmostComment,
147 | // 'activityBar.dropBackground': palette.other.AlmostComment,
148 | 'activityBar.foreground': palette.base.FG,
149 | 'activityBar.border': null,
150 | 'activityBar.activeBorder': alpha(palette.base.PINK, 80),
151 | 'activityBar.activeBackground': alpha(palette.base.SELECTION, 40),
152 | 'activityBarBadge.background': palette.base.PINK,
153 | 'activityBarBadge.foreground': palette.other.BGDark,
154 |
155 | // Side Bar
156 | 'sideBar.background': palette.base.BG,
157 | // 'sideBar.foreground': palette.base.BG,
158 | // 'sideBar.border': palette.other.BGLighter,
159 | 'sideBarTitle.foreground': palette.base.FG,
160 | 'sideBarSectionHeader.background': palette.base.BG,
161 | // 'sideBarSectionHeader.foreground': palette.base.BG,
162 | 'sideBarSectionHeader.border': palette.other.BGLighter,
163 |
164 | // Text Link
165 | 'textLink.foreground': palette.base.PINK,
166 | 'textLink.activeForeground': alpha(palette.base.PINK, 200),
167 |
168 | // Editor Group & Tabs
169 | // 'editorGroup.background': palette.base.PINK,
170 | 'editorGroup.border': palette.base.SELECTION,
171 | 'editorGroup.dropBackground': palette.other.TAB_DROP_BG,
172 | // 'editorGroupHeader.noTabsBackground': palette.other.TAB_DROP_BG,
173 | 'editorGroupHeader.tabsBackground': palette.other.BGDark,
174 | // 'editorGroupHeader.tabsBorder': palette.other.TAB_DROP_BG,
175 | 'tab.activeBackground': alpha(palette.base.SELECTION, 40),
176 | 'tab.activeForeground': palette.base.FG,
177 | 'tab.border': palette.other.BGDark,
178 | 'tab.activeBorderTop': alpha(palette.base.PINK, 80),
179 | // 'tab.activeBorder': alpha(palette.base.PINK, 80),
180 | // 'tab.unfocusedActiveBorder': alpha(palette.base.PINK, 80),
181 | 'tab.inactiveBackground': palette.base.BG,
182 | 'tab.inactiveForeground': alpha(palette.base.CYAN, 170),
183 | // 'tab.unfocusedActiveForeground': palette.other.AlmostComment,
184 | // 'tab.unfocusedInactiveForeground': palette.other.AlmostComment,
185 |
186 | // Editor Colors
187 | 'editor.foreground': palette.base.FG,
188 | 'editor.background': palette.base.BG,
189 | 'editorLineNumber.foreground': palette.other.LineNumber,
190 | // 'editorCursor.foreground': palette.other.LineNumber,
191 |
192 | 'editor.selectionBackground': palette.base.SELECTION,
193 | 'editor.selectionHighlightBackground': palette.other.BGLighter,
194 | 'editor.selectionHighlightBorder': alpha(palette.other.WHITE, 20),
195 | // 'editor.inactiveSelectionBackground': palette.other.BGLighter,
196 | 'editor.foldBackground': palette.base.BG,
197 |
198 | // 'editor.wordHighlightBackground': alpha(palette.base.CYAN, 47),
199 | 'editor.wordHighlightBackground': alpha(palette.base.CYAN, 50),
200 | 'editor.wordHighlightBorder': alpha(palette.other.WHITE, 20),
201 | 'editor.wordHighlightStrongBackground': alpha(palette.base.GREEN, 50),
202 | 'editor.wordHighlightStrongBorder': alpha(palette.other.WHITE, 20),
203 |
204 | 'editor.findMatchBackground': alpha(palette.base.ORANGE, 80),
205 | 'editor.findMatchHighlightBackground': alpha(palette.other.WHITE, 40),
206 | 'editor.findRangeHighlightBackground': palette.other.LineHighlight,
207 |
208 | 'editor.hoverHighlightBackground': palette.other.BGDark,
209 |
210 | 'editor.lineHighlightBackground': palette.other.BGLight,
211 | 'editor.lineHighlightBorder': palette.base.BG,
212 |
213 | 'editorLink.activeForeground': palette.base.CYAN,
214 | 'editor.rangeHighlightBackground': alpha(palette.base.PURPLE, 16),
215 |
216 | 'editor.snippetTabstopHighlightBackground': palette.base.BG,
217 | 'editor.snippetTabstopHighlightBorder': palette.other.AlmostComment,
218 | 'editor.snippetFinalTabstopHighlightBackground': palette.base.BG,
219 | 'editor.snippetFinalTabstopHighlightBorder': palette.base.GREEN,
220 |
221 | 'editorWhitespace.foreground': palette.other.NonText,
222 | 'editorIndentGuide.background': palette.other.NonText,
223 | 'editorIndentGuide.activeBackground': alpha(palette.other.WHITE, 45),
224 | 'editorRuler.foreground': palette.other.NonText,
225 |
226 | 'editorCodeLens.foreground': palette.other.AlmostComment,
227 |
228 | // NOTE: These are not set because they tend to be highly contested from
229 | // person to person. Thus, setting these is probably better suited
230 | // for workbench.colorCustomizations in User Settings
231 | // 'editorBracketMatch.background': palette.other.AlmostComment,
232 | // 'editorBracketMatch.border': palette.other.AlmostComment,
233 |
234 | 'editorOverviewRuler.border': palette.other.BGDark,
235 | // 'editorOverviewRuler.findMatchForeground': palette.other.BGDark,
236 | // 'editorOverviewRuler.rangeHighlightForeground': palette.other.BGDark,
237 | 'editorOverviewRuler.selectionHighlightForeground': palette.base.ORANGE,
238 | 'editorOverviewRuler.wordHighlightForeground': palette.base.CYAN,
239 | 'editorOverviewRuler.wordHighlightStrongForeground': palette.base.GREEN,
240 | 'editorOverviewRuler.modifiedForeground': alpha(palette.base.CYAN, 80),
241 | 'editorOverviewRuler.addedForeground': alpha(palette.base.GREEN, 80),
242 | 'editorOverviewRuler.deletedForeground': alpha(palette.base.RED, 80),
243 | 'editorOverviewRuler.errorForeground': alpha(palette.base.RED, 80),
244 | 'editorOverviewRuler.warningForeground': alpha(palette.base.ORANGE, 80),
245 | 'editorOverviewRuler.infoForeground': alpha(palette.base.CYAN, 80),
246 |
247 | 'editorError.foreground': palette.base.RED,
248 | // 'editorError.border': palette.base.RED,
249 | 'editorWarning.foreground': palette.base.CYAN,
250 | // 'editorWarning.border': palette.base.CYAN,
251 |
252 | // 'editorGutter.background': palette.base.CYAN,
253 | 'editorGutter.modifiedBackground': alpha(palette.base.CYAN, 80),
254 | 'editorGutter.addedBackground': alpha(palette.base.GREEN, 80),
255 | 'editorGutter.deletedBackground': alpha(palette.base.RED, 80),
256 |
257 | // Explorer Colors
258 | 'gitDecoration.modifiedResourceForeground': palette.base.CYAN,
259 | 'gitDecoration.deletedResourceForeground': palette.base.RED,
260 | 'gitDecoration.untrackedResourceForeground': palette.base.GREEN,
261 | 'gitDecoration.ignoredResourceForeground': alpha(palette.base.CYAN, 128),
262 | 'gitDecoration.conflictingResourceForeground': palette.base.ORANGE,
263 |
264 | // Diff Editor Colors
265 | 'diffEditor.insertedTextBackground': alpha(palette.base.GREEN, 16),
266 | // 'diffEditor.insertedTextBorder': alpha(palette.base.GREEN, 16),
267 | 'diffEditor.removedTextBackground': alpha(palette.base.RED, 50),
268 | // 'diffEditor.removedTextBorder': alpha(palette.base.RED, 50),
269 |
270 | // Editor Widget Colors
271 | 'editorWidget.background': palette.base.BG,
272 | // editorWidgetBorder: palette.base.BG,
273 |
274 | 'editorSuggestWidget.background': palette.base.BG,
275 | // 'editorSuggestWidget.border': palette.base.BG,
276 | 'editorSuggestWidget.foreground': palette.base.FG,
277 | // 'editorSuggestWidget.highlightForeground': palette.base.FG,
278 | 'editorSuggestWidget.selectedBackground': palette.base.SELECTION,
279 |
280 | 'editorHoverWidget.background': palette.base.BG,
281 | 'editorHoverWidget.border': palette.other.AlmostComment,
282 |
283 | // 'debugExceptionWidget.background': palette.other.AlmostComment,
284 | // 'debugExceptionWidget.border': palette.other.AlmostComment,
285 |
286 | 'editorMarkerNavigation.background': palette.base.BG,
287 | // 'editorMarkerNavigationError.background': palette.base.BG,
288 | // 'editorMarkerNavigationWarning.background': palette.base.BG,
289 |
290 | // Peek View Colors
291 | 'peekView.border': palette.base.SELECTION,
292 | 'peekViewEditor.background': palette.base.BG,
293 | // 'peekViewEditorGutter.background': palette.base.BG,
294 | 'peekViewEditor.matchHighlightBackground': alpha(palette.base.YELLOW, 80),
295 | 'peekViewResult.background': palette.base.BG,
296 | 'peekViewResult.fileForeground': palette.base.FG,
297 | 'peekViewResult.lineForeground': palette.base.FG,
298 | 'peekViewResult.matchHighlightBackground': alpha(palette.base.YELLOW, 80),
299 | 'peekViewResult.selectionBackground': palette.base.SELECTION,
300 | 'peekViewResult.selectionForeground': palette.base.FG,
301 | 'peekViewTitle.background': palette.other.BGDark,
302 | 'peekViewTitleDescription.foreground': palette.other.AlmostComment,
303 | 'peekViewTitleLabel.foreground': palette.base.FG,
304 |
305 | // Merge Conflicts
306 | 'merge.currentHeaderBackground': alpha(palette.base.GREEN, 90),
307 | // 'merge.currentContentBackground': alpha(palette.base.GREEN, 90),
308 | 'merge.incomingHeaderBackground': alpha(palette.base.PURPLE, 90),
309 | // 'merge.incomingContentBackground': alpha(palette.base.PURPLE, 90),
310 | // 'merge.border': alpha(palette.base.PURPLE, 90),
311 | 'editorOverviewRuler.currentContentForeground': palette.base.GREEN,
312 | 'editorOverviewRuler.incomingContentForeground': palette.base.PURPLE,
313 |
314 | // Panel Colors
315 | 'panel.background': palette.base.BG,
316 | 'panel.border': palette.other.BGLighter,
317 | 'panelTitle.activeBorder': palette.base.RED,
318 | 'panelTitle.activeForeground': palette.base.FG,
319 | 'panelTitle.inactiveForeground': alpha(palette.base.FG, 80),
320 |
321 | // Status Bar Colors
322 | 'statusBar.background': palette.other.BGDark,
323 | 'statusBar.foreground': palette.base.FG,
324 | 'statusBar.debuggingBackground': palette.base.PINK,
325 | 'statusBar.debuggingForeground': palette.other.BGDark,
326 | 'statusBar.noFolderBackground': palette.other.BGDark,
327 | 'statusBar.noFolderForeground': palette.base.FG,
328 | // 'statusBarItem.activeBackground': palette.base.FG,
329 | // 'statusBarItem.hoverBackground': palette.base.FG,
330 | 'statusBarItem.prominentBackground': palette.base.PINK,
331 | 'statusBarItem.prominentForeground': palette.other.BGDark,
332 | 'statusBarItem.prominentHoverBackground': palette.base.ORANGE,
333 | 'statusBarItem.remoteBackground': palette.base.PINK,
334 | 'statusBarItem.remoteForeground': palette.other.BGDark,
335 | // 'statusBar.border': palette.base.PINK,
336 |
337 | // Merge Conflicts
338 | 'titleBar.activeBackground': palette.base.BG,
339 | 'titleBar.activeForeground': palette.base.FG,
340 | 'titleBar.inactiveBackground': palette.other.BGDark,
341 | 'titleBar.inactiveForeground': palette.other.AlmostComment,
342 |
343 | // Notification Dialog Colors
344 | // 'notifications.background': palette.base.BG,
345 | // 'notifications.foreground': palette.base.FG,
346 | // 'notifications.buttonBackground': palette.base.SELECTION,
347 | // 'notifications.buttonForeground': palette.base.FG,
348 | // 'notifications.buttonHoverBackground': palette.other.LineHighlight,
349 | // 'notifications.errorBackground': palette.base.RED,
350 | // 'notifications.errorForeground': palette.base.FG,
351 | // 'notifications.infoBackground': palette.base.CYAN,
352 | // 'notifications.infoForeground': palette.base.BG,
353 | // 'notifications.warningBackground': palette.base.ORANGE,
354 | // 'notifications.warningForeground': palette.base.BG,
355 |
356 | // Extensions
357 | 'extensionButton.prominentForeground': palette.base.FG,
358 | 'extensionButton.prominentBackground': alpha(palette.base.GREEN, 90),
359 | 'extensionButton.prominentHoverBackground': alpha(palette.base.GREEN, 60),
360 |
361 | // Quick Picker
362 | 'pickerGroup.border': palette.base.PURPLE,
363 | 'pickerGroup.foreground': palette.base.CYAN,
364 |
365 | // Debug
366 | 'debugToolBar.background': palette.base.BG,
367 |
368 | // Welcome Page
369 | // 'welcomePage.buttonBackground': palette.base.BG,
370 | // 'welcomePage.buttonHoverBackground': palette.base.BG,
371 | 'walkThrough.embeddedEditorBackground': palette.base.BG,
372 |
373 | // Setting Editor
374 | 'settings.headerForeground': palette.base.FG,
375 | // 'settings.modifiedItemForeground': palette.base.ORANGE,
376 | 'settings.modifiedItemIndicator': palette.base.ORANGE,
377 | // 'settings.inactiveSelectedItemBorder': palette.base.ORANGE,
378 | 'settings.dropdownBackground': palette.base.BG,
379 | 'settings.dropdownForeground': palette.base.FG,
380 | 'settings.dropdownBorder': palette.other.BGDark,
381 | 'settings.checkboxBackground': palette.base.BG,
382 | 'settings.checkboxForeground': palette.base.FG,
383 | 'settings.checkboxBorder': palette.other.BGDark,
384 | 'settings.textInputBackground': palette.base.BG,
385 | 'settings.textInputForeground': palette.base.FG,
386 | 'settings.textInputBorder': palette.other.BGDark,
387 | 'settings.numberInputBackground': palette.base.BG,
388 | 'settings.numberInputForeground': palette.base.FG,
389 | 'settings.numberInputBorder': palette.other.BGDark,
390 |
391 | // Breadcrumbs
392 | 'breadcrumb.foreground': palette.base.CYAN,
393 | 'breadcrumb.background': palette.base.BG,
394 | 'breadcrumb.focusForeground': palette.base.FG,
395 | 'breadcrumb.activeSelectionForeground': palette.base.FG,
396 | 'breadcrumbPicker.background': palette.other.BGDark,
397 |
398 | // Misc
399 | // 'menu.separatorBackground': palette.other.BGDark,
400 |
401 | 'listFilterWidget.background': palette.other.BGLight,
402 | 'listFilterWidget.outline': palette.other.BGLighter,
403 | 'listFilterWidget.noMatchesOutline': palette.base.RED,
404 | },
405 | tokenColors: [
406 | // General
407 | {
408 | scope: ['strong'],
409 | settings: {
410 | fontStyle: 'bold',
411 | },
412 | },
413 | {
414 | scope: ['header'],
415 | settings: {
416 | foreground: palette.base.PURPLE,
417 | },
418 | },
419 | {
420 | scope: ['source'],
421 | settings: {
422 | foreground: palette.base.FG,
423 | },
424 | },
425 | {
426 | scope: ['meta.diff', 'meta.diff.header'],
427 | settings: {
428 | foreground: palette.other.AlmostComment,
429 | },
430 | },
431 | {
432 | scope: ['markup.inserted'],
433 | settings: {
434 | foreground: palette.base.GREEN,
435 | },
436 | },
437 | {
438 | scope: ['markup.deleted'],
439 | settings: {
440 | foreground: palette.base.RED,
441 | },
442 | },
443 | {
444 | scope: ['markup.changed'],
445 | settings: {
446 | foreground: palette.base.ORANGE,
447 | },
448 | },
449 | {
450 | scope: ['invalid'],
451 | settings: {
452 | foreground: palette.base.RED,
453 | fontStyle: 'underline',
454 | },
455 | },
456 | {
457 | scope: ['invalid.deprecated'],
458 | settings: {
459 | foreground: palette.base.FG,
460 | fontStyle: 'underline',
461 | },
462 | },
463 | {
464 | scope: ['entity.name.filename'],
465 | settings: {
466 | foreground: palette.base.YELLOW,
467 | },
468 | },
469 | {
470 | scope: ['markup.error'],
471 | settings: {
472 | foreground: palette.base.RED,
473 | },
474 | },
475 |
476 | // Markdown / RST / Prose
477 | {
478 | name: 'Underlined markup',
479 | scope: ['markup.underline'],
480 | settings: {
481 | fontStyle: 'underline',
482 | },
483 | },
484 | {
485 | name: 'Bold markup',
486 | scope: ['markup.bold'],
487 | settings: {
488 | fontStyle: 'bold',
489 | foreground: palette.base.ORANGE,
490 | },
491 | },
492 | {
493 | name: 'Markup headings',
494 | scope: ['markup.heading'],
495 | settings: {
496 | fontStyle: 'bold',
497 | foreground: palette.base.PURPLE,
498 | },
499 | },
500 | {
501 | name: 'Markup italic',
502 | scope: ['markup.italic'],
503 | settings: {
504 | foreground: palette.base.YELLOW,
505 | },
506 | },
507 | {
508 | name: 'Bullets, lists (prose)',
509 | scope: [
510 | 'beginning.punctuation.definition.list.markdown',
511 | 'beginning.punctuation.definition.quote.markdown',
512 | 'punctuation.definition.link.restructuredtext',
513 | ],
514 | settings: {
515 | foreground: palette.base.CYAN,
516 | },
517 | },
518 | {
519 | name: 'Inline code (prose)',
520 | scope: ['markup.inline.raw', 'markup.raw.restructuredtext'],
521 | settings: {
522 | foreground: palette.base.GREEN,
523 | },
524 | },
525 | {
526 | name: 'Links (prose)',
527 | scope: ['markup.underline.link', 'markup.underline.link.image'],
528 | settings: {
529 | foreground: palette.base.CYAN,
530 | },
531 | },
532 | {
533 | name: 'Link text, image alt text (prose)',
534 | scope: [
535 | 'meta.link.reference.def.restructuredtext',
536 | 'punctuation.definition.directive.restructuredtext',
537 | 'string.other.link.description',
538 | 'string.other.link.title',
539 | ],
540 | settings: {
541 | foreground: palette.base.PINK,
542 | },
543 | },
544 | {
545 | name: 'Blockquotes (prose)',
546 | scope: ['entity.name.directive.restructuredtext', 'markup.quote'],
547 | settings: {
548 | foreground: palette.base.YELLOW,
549 | },
550 | },
551 | {
552 | name: 'Horizontal rule (prose)',
553 | scope: ['meta.separator.markdown'],
554 | settings: {
555 | foreground: palette.other.AlmostComment,
556 | },
557 | },
558 | {
559 | name: 'Code blocks',
560 | scope: [
561 | 'fenced_code.block.language',
562 | 'markup.raw.inner.restructuredtext',
563 | 'markup.fenced_code.block.markdown punctuation.definition.markdown',
564 | ],
565 | settings: {
566 | foreground: palette.base.GREEN,
567 | },
568 | },
569 | {
570 | name: 'Prose constants',
571 | scope: ['punctuation.definition.constant.restructuredtext'],
572 | settings: {
573 | foreground: palette.base.PURPLE,
574 | },
575 | },
576 | {
577 | name: 'Braces in markdown headings',
578 | scope: [
579 | 'markup.heading.markdown punctuation.definition.string.begin',
580 | 'markup.heading.markdown punctuation.definition.string.end',
581 | ],
582 | settings: {
583 | foreground: palette.base.PURPLE,
584 | },
585 | },
586 | {
587 | name: 'Braces in markdown paragraphs',
588 | scope: [
589 | 'meta.paragraph.markdown punctuation.definition.string.begin',
590 | 'meta.paragraph.markdown punctuation.definition.string.end',
591 | ],
592 | settings: {
593 | foreground: palette.base.FG,
594 | },
595 | },
596 | {
597 | name: 'Braces in markdown blockquotes',
598 | scope: [
599 | 'markup.quote.markdown meta.paragraph.markdown punctuation.definition.string.begin',
600 | 'markup.quote.markdown meta.paragraph.markdown punctuation.definition.string.end',
601 | ],
602 | settings: {
603 | foreground: palette.base.YELLOW,
604 | },
605 | },
606 |
607 | // Classes
608 | {
609 | name: 'User-defined class names',
610 | scope: ['entity.name.type.class', 'entity.name.class'],
611 | settings: {
612 | foreground: palette.base.CYAN,
613 | fontStyle: 'normal',
614 | },
615 | },
616 | {
617 | name: 'this, super, self, etc.',
618 | scope: [
619 | 'keyword.expressions-and-types.swift',
620 | 'keyword.other.this',
621 | 'variable.language',
622 | 'variable.language punctuation.definition.variable.php',
623 | 'variable.other.readwrite.instance.ruby',
624 | 'variable.parameter.function.language.special',
625 | ],
626 | settings: {
627 | foreground: palette.base.PURPLE,
628 | },
629 | },
630 | {
631 | name: 'Inherited classes',
632 | scope: ['entity.other.inherited-class'],
633 | settings: {
634 | foreground: palette.base.CYAN,
635 | },
636 | },
637 |
638 | // Comments
639 | {
640 | name: 'Comments',
641 | scope: [
642 | 'comment',
643 | 'punctuation.definition.comment',
644 | 'unused.comment',
645 | 'wildcard.comment',
646 | ],
647 | settings: {
648 | foreground: palette.base.COMMENT,
649 | },
650 | },
651 | {
652 | name: 'JSDoc-style keywords',
653 | scope: [
654 | 'comment keyword.codetag.notation',
655 | 'comment.block.documentation keyword',
656 | 'comment.block.documentation storage.type.class',
657 | ],
658 | settings: {
659 | foreground: palette.base.PINK,
660 | },
661 | },
662 | {
663 | name: 'JSDoc-style types',
664 | scope: ['comment.block.documentation entity.name.type'],
665 | settings: {
666 | foreground: palette.base.CYAN,
667 | },
668 | },
669 | {
670 | name: 'JSDoc-style type brackets',
671 | scope: [
672 | 'comment.block.documentation entity.name.type punctuation.definition.bracket',
673 | ],
674 | settings: {
675 | foreground: palette.base.CYAN,
676 | },
677 | },
678 | {
679 | name: 'JSDoc-style comment parameters',
680 | scope: ['comment.block.documentation variable'],
681 | settings: {
682 | foreground: palette.base.ORANGE,
683 | },
684 | },
685 |
686 | // Constants
687 | {
688 | name: 'Constants',
689 | scope: ['constant', 'variable.other.constant'],
690 | settings: {
691 | foreground: palette.base.PURPLE,
692 | },
693 | },
694 | {
695 | name: 'Constant escape sequences',
696 | scope: [
697 | 'constant.character.escape',
698 | 'constant.character.string.escape',
699 | 'constant.regexp',
700 | ],
701 | settings: {
702 | foreground: palette.base.PINK,
703 | },
704 | },
705 |
706 | // Entities
707 | {
708 | name: 'HTML tags',
709 | scope: ['entity.name.tag'],
710 | settings: {
711 | foreground: palette.base.PINK,
712 | },
713 | },
714 | {
715 | name: "CSS attribute parent selectors ('&')",
716 | scope: ['entity.other.attribute-name.parent-selector'],
717 | settings: {
718 | foreground: palette.base.PINK,
719 | },
720 | },
721 | {
722 | name: 'CSS ID',
723 | scope: ['entity.other.attribute-name.id'],
724 | settings: {
725 | foreground: palette.base.YELLOW,
726 | },
727 | },
728 | {
729 | name: 'HTML/CSS attribute names',
730 | scope: ['entity.other.attribute-name'],
731 | settings: {
732 | foreground: palette.base.GREEN,
733 | },
734 | },
735 | {
736 | name: 'Tag inline source',
737 | scope: ['meta.tag.inline source'],
738 | settings: {
739 | foreground: palette.base.YELLOW,
740 | },
741 | },
742 |
743 | // Function/Methods
744 | {
745 | name: 'Function names',
746 | scope: [
747 | 'entity.name.function',
748 | 'meta.function-call.generic',
749 | 'meta.function-call.object',
750 | 'meta.function-call.php',
751 | 'meta.function-call.static',
752 | 'meta.method-call.java meta.method',
753 | 'meta.method.groovy',
754 | 'support.function.any-method.lua',
755 | 'keyword.operator.function.infix',
756 | ],
757 | settings: {
758 | foreground: palette.base.GREEN,
759 | },
760 | },
761 | {
762 | name: 'Function parameters',
763 | scope: [
764 | 'entity.name.variable.parameter',
765 | 'meta.at-rule.function variable',
766 | 'meta.at-rule.mixin variable',
767 | 'meta.function.arguments variable.other.php',
768 | 'meta.selectionset.graphql meta.arguments.graphql variable.arguments.graphql',
769 | 'variable.parameter',
770 | ],
771 | settings: {
772 | foreground: palette.base.ORANGE,
773 | },
774 | },
775 | {
776 | name: 'Decorators',
777 | scope: [
778 | 'meta.decorator variable.other.readwrite',
779 | 'meta.decorator variable.other.property',
780 | ],
781 | settings: {
782 | foreground: palette.base.GREEN,
783 | },
784 | },
785 | {
786 | name: 'Decorator Objects',
787 | scope: ['meta.decorator variable.other.object'],
788 | settings: {
789 | foreground: palette.base.GREEN,
790 | },
791 | },
792 |
793 | // Keywords
794 | {
795 | name: 'Keywords',
796 | scope: ['keyword', 'punctuation.definition.keyword'],
797 | settings: {
798 | foreground: palette.base.PINK,
799 | },
800 | },
801 | {
802 | name: 'Keyword "new"',
803 | scope: ['keyword.control.new', 'keyword.operator.new'],
804 | settings: {
805 | fontStyle: 'bold',
806 | },
807 | },
808 | {
809 | name: 'Generic selectors (CSS/SCSS/Less/Stylus)',
810 | scope: ['meta.selector'],
811 | settings: {
812 | foreground: palette.base.PINK,
813 | },
814 | },
815 |
816 | // Language Built-ins
817 | {
818 | name: 'Language Built-ins',
819 | scope: ['support'],
820 | settings: {
821 | foreground: palette.base.CYAN,
822 | },
823 | },
824 | {
825 | name: 'Built-in magic functions and constants',
826 | scope: [
827 | 'support.function.magic',
828 | 'support.variable',
829 | 'variable.other.predefined',
830 | ],
831 | settings: {
832 | fontStyle: 'regular',
833 | foreground: palette.base.PURPLE,
834 | },
835 | },
836 | {
837 | name: 'Built-in functions / properties',
838 | scope: ['support.function', 'support.type.property-name'],
839 | settings: {
840 | fontStyle: 'regular',
841 | },
842 | },
843 |
844 | // Punctuation
845 | {
846 | name: 'Separators (key/value, namespace, inheritance, pointer, hash, slice, etc)',
847 | scope: [
848 | 'constant.other.symbol.hashkey punctuation.definition.constant.ruby',
849 | 'entity.other.attribute-name.placeholder punctuation',
850 | 'entity.other.attribute-name.pseudo-class punctuation',
851 | 'entity.other.attribute-name.pseudo-element punctuation',
852 | 'meta.group.double.toml',
853 | 'meta.group.toml',
854 | 'meta.object-binding-pattern-variable punctuation.destructuring',
855 | 'punctuation.colon.graphql',
856 | 'punctuation.definition.block.scalar.folded.yaml',
857 | 'punctuation.definition.block.scalar.literal.yaml',
858 | 'punctuation.definition.block.sequence.item.yaml',
859 | 'punctuation.definition.entity.other.inherited-class',
860 | 'punctuation.function.swift',
861 | 'punctuation.separator.dictionary.key-value',
862 | 'punctuation.separator.hash',
863 | 'punctuation.separator.inheritance',
864 | 'punctuation.separator.key-value',
865 | 'punctuation.separator.key-value.mapping.yaml',
866 | 'punctuation.separator.namespace',
867 | 'punctuation.separator.pointer-access',
868 | 'punctuation.separator.slice',
869 | 'string.unquoted.heredoc punctuation.definition.string',
870 | 'support.other.chomping-indicator.yaml',
871 | 'punctuation.separator.annotation',
872 | ],
873 | settings: {
874 | foreground: palette.base.PINK,
875 | },
876 | },
877 | {
878 | name: 'Brackets, braces, parens, etc.',
879 | scope: [
880 | 'keyword.operator.other.powershell',
881 | 'keyword.other.statement-separator.powershell',
882 | 'meta.brace.round',
883 | 'meta.function-call punctuation',
884 | 'punctuation.definition.arguments.begin',
885 | 'punctuation.definition.arguments.end',
886 | 'punctuation.definition.entity.begin',
887 | 'punctuation.definition.entity.end',
888 | 'punctuation.definition.tag.cs',
889 | 'punctuation.definition.type.begin',
890 | 'punctuation.definition.type.end',
891 | 'punctuation.section.scope.begin',
892 | 'punctuation.section.scope.end',
893 | 'storage.type.generic.java',
894 | 'string.template meta.brace',
895 | 'string.template punctuation.accessor',
896 | ],
897 | settings: {
898 | foreground: palette.base.FG,
899 | },
900 | },
901 | {
902 | name: 'Variable interpolation operators',
903 | scope: [
904 | 'meta.string-contents.quoted.double punctuation.definition.variable',
905 | 'punctuation.definition.interpolation.begin',
906 | 'punctuation.definition.interpolation.end',
907 | 'punctuation.definition.template-expression.begin',
908 | 'punctuation.definition.template-expression.end',
909 | 'punctuation.section.embedded.begin',
910 | 'punctuation.section.embedded.coffee',
911 | 'punctuation.section.embedded.end',
912 | 'punctuation.section.embedded.end source.php',
913 | 'punctuation.section.embedded.end source.ruby',
914 | 'punctuation.definition.variable.makefile',
915 | ],
916 | settings: {
917 | foreground: palette.base.PINK,
918 | },
919 | },
920 |
921 | // Serializable / Config Languages
922 | {
923 | name: 'Keys (serializable languages)',
924 | scope: [
925 | 'entity.name.function.target.makefile',
926 | 'entity.name.section.toml',
927 | 'entity.name.tag.yaml',
928 | 'variable.other.key.toml',
929 | ],
930 | settings: {
931 | foreground: palette.base.CYAN,
932 | },
933 | },
934 | {
935 | name: 'Dates / timestamps (serializable languages)',
936 | scope: ['constant.other.date', 'constant.other.timestamp'],
937 | settings: {
938 | foreground: palette.base.ORANGE,
939 | },
940 | },
941 | {
942 | name: 'YAML aliases',
943 | scope: ['variable.other.alias.yaml'],
944 | settings: {
945 | fontStyle: 'underline',
946 | foreground: palette.base.GREEN,
947 | },
948 | },
949 |
950 | // Storage
951 | {
952 | name: 'Storage',
953 | scope: [
954 | 'storage',
955 | 'meta.implementation storage.type.objc',
956 | 'meta.interface-or-protocol storage.type.objc',
957 | 'source.groovy storage.type.def',
958 | ],
959 | settings: {
960 | fontStyle: 'regular',
961 | foreground: palette.base.PINK,
962 | },
963 | },
964 | {
965 | name: 'Types',
966 | scope: [
967 | 'entity.name.type',
968 | 'keyword.primitive-datatypes.swift',
969 | 'keyword.type.cs',
970 | 'meta.protocol-list.objc',
971 | 'meta.return-type.objc',
972 | 'source.go storage.type',
973 | 'source.groovy storage.type',
974 | 'source.java storage.type',
975 | 'source.powershell entity.other.attribute-name',
976 | 'storage.class.std.rust',
977 | 'storage.type.attribute.swift',
978 | 'storage.type.c',
979 | 'storage.type.core.rust',
980 | 'storage.type.cs',
981 | 'storage.type.groovy',
982 | 'storage.type.objc',
983 | 'storage.type.php',
984 | 'storage.type.haskell',
985 | 'storage.type.ocaml',
986 | ],
987 | settings: {
988 | foreground: palette.base.CYAN,
989 | },
990 | },
991 | {
992 | name: 'Generics, templates, and mapped type declarations',
993 | scope: [
994 | 'entity.name.type.type-parameter',
995 | 'meta.indexer.mappedtype.declaration entity.name.type',
996 | 'meta.type.parameters entity.name.type',
997 | ],
998 | settings: {
999 | foreground: palette.base.ORANGE,
1000 | },
1001 | },
1002 | {
1003 | name: 'Modifiers',
1004 | scope: ['storage.modifier'],
1005 | settings: {
1006 | foreground: palette.base.PINK,
1007 | },
1008 | },
1009 |
1010 | // RegExp
1011 | {
1012 | name: 'RegExp string',
1013 | scope: [
1014 | 'string.regexp',
1015 | 'constant.other.character-class.set.regexp',
1016 | 'constant.character.escape.backslash.regexp',
1017 | ],
1018 | settings: {
1019 | foreground: palette.base.YELLOW,
1020 | },
1021 | },
1022 | {
1023 | name: 'Non-capture operators',
1024 | scope: ['punctuation.definition.group.capture.regexp'],
1025 | settings: {
1026 | foreground: palette.base.PINK,
1027 | },
1028 | },
1029 | {
1030 | name: 'RegExp start and end characters',
1031 | scope: [
1032 | 'string.regexp punctuation.definition.string.begin',
1033 | 'string.regexp punctuation.definition.string.end',
1034 | ],
1035 | settings: {
1036 | foreground: palette.base.RED,
1037 | },
1038 | },
1039 | {
1040 | name: 'Character group',
1041 | scope: ['punctuation.definition.character-class.regexp'],
1042 | settings: {
1043 | foreground: palette.base.CYAN,
1044 | },
1045 | },
1046 | {
1047 | name: 'Capture groups',
1048 | scope: ['punctuation.definition.group.regexp'],
1049 | settings: {
1050 | foreground: palette.base.ORANGE,
1051 | },
1052 | },
1053 | {
1054 | name: 'Assertion operators',
1055 | scope: [
1056 | 'punctuation.definition.group.assertion.regexp',
1057 | 'keyword.operator.negation.regexp',
1058 | ],
1059 | settings: {
1060 | foreground: palette.base.RED,
1061 | },
1062 | },
1063 | {
1064 | name: 'Positive lookaheads',
1065 | scope: ['meta.assertion.look-ahead.regexp'],
1066 | settings: {
1067 | foreground: palette.base.GREEN,
1068 | },
1069 | },
1070 |
1071 | // Strings
1072 | {
1073 | name: 'Strings',
1074 | scope: ['string'],
1075 | settings: {
1076 | foreground: palette.base.YELLOW,
1077 | },
1078 | },
1079 | {
1080 | name: 'String quotes (temporary vscode fix)',
1081 | scope: [
1082 | 'punctuation.definition.string.begin',
1083 | 'punctuation.definition.string.end',
1084 | ],
1085 | settings: {
1086 | foreground: palette.other.TEMP_QUOTES,
1087 | },
1088 | },
1089 | {
1090 | name: 'Property quotes (temporary vscode fix)',
1091 | scope: [
1092 | 'punctuation.support.type.property-name.begin',
1093 | 'punctuation.support.type.property-name.end',
1094 | ],
1095 | settings: {
1096 | foreground: palette.other.TEMP_PROPERTY_QUOTES,
1097 | },
1098 | },
1099 | {
1100 | name: 'Docstrings',
1101 | scope: [
1102 | 'string.quoted.docstring.multi',
1103 | 'string.quoted.docstring.multi.python punctuation.definition.string.begin',
1104 | 'string.quoted.docstring.multi.python punctuation.definition.string.end',
1105 | 'string.quoted.docstring.multi.python constant.character.escape',
1106 | ],
1107 | settings: {
1108 | foreground: palette.other.AlmostComment,
1109 | },
1110 | },
1111 |
1112 | // Variables
1113 | {
1114 | name: 'Variables and object properties',
1115 | scope: [
1116 | 'variable',
1117 | 'constant.other.key.perl',
1118 | 'support.variable.property',
1119 | 'variable.other.constant.js',
1120 | 'variable.other.constant.ts',
1121 | 'variable.other.constant.tsx',
1122 | ],
1123 | settings: {
1124 | foreground: palette.base.FG,
1125 | },
1126 | },
1127 | {
1128 | name: 'Destructuring / aliasing reference name (LHS)',
1129 | scope: [
1130 | 'meta.import variable.other.readwrite',
1131 | 'meta.object-binding-pattern-variable variable.object.property',
1132 | 'meta.variable.assignment.destructured.object.coffee variable',
1133 | ],
1134 | settings: {
1135 | foreground: palette.base.ORANGE,
1136 | },
1137 | },
1138 | {
1139 | name: 'Destructuring / aliasing variable name (RHS)',
1140 | scope: [
1141 | 'meta.import variable.other.readwrite.alias',
1142 | 'meta.export variable.other.readwrite.alias',
1143 | 'meta.variable.assignment.destructured.object.coffee variable variable',
1144 | ],
1145 | settings: {
1146 | fontStyle: 'normal',
1147 | foreground: palette.base.FG,
1148 | },
1149 | },
1150 |
1151 | // Language Extensions / Edge Cases
1152 | {
1153 | name: 'GraphQL keys',
1154 | scope: ['meta.selectionset.graphql variable'],
1155 | settings: {
1156 | foreground: palette.base.YELLOW,
1157 | },
1158 | },
1159 | {
1160 | name: 'GraphQL function arguments',
1161 | scope: ['meta.selectionset.graphql meta.arguments variable'],
1162 | settings: {
1163 | foreground: palette.base.FG,
1164 | },
1165 | },
1166 | {
1167 | name: 'GraphQL fragment name (definition)',
1168 | scope: ['entity.name.fragment.graphql', 'variable.fragment.graphql'],
1169 | settings: {
1170 | foreground: palette.base.CYAN,
1171 | },
1172 | },
1173 | {
1174 | name: 'Edge cases (foreground color resets)',
1175 | scope: [
1176 | 'constant.other.symbol.hashkey.ruby',
1177 | 'keyword.operator.dereference.java',
1178 | 'keyword.operator.navigation.groovy',
1179 | 'meta.scope.for-loop.shell punctuation.definition.string.begin',
1180 | 'meta.scope.for-loop.shell punctuation.definition.string.end',
1181 | 'meta.scope.for-loop.shell string',
1182 | 'storage.modifier.import',
1183 | 'punctuation.section.embedded.begin.tsx',
1184 | 'punctuation.section.embedded.end.tsx',
1185 | 'punctuation.section.embedded.begin.jsx',
1186 | 'punctuation.section.embedded.end.jsx',
1187 | 'punctuation.separator.list.comma.css',
1188 | 'constant.language.empty-list.haskell',
1189 | ],
1190 | settings: {
1191 | foreground: palette.base.FG,
1192 | },
1193 | },
1194 | {
1195 | name: 'Shell variables prefixed with "$" (edge case)',
1196 | scope: ['source.shell variable.other'],
1197 | settings: {
1198 | foreground: palette.base.PURPLE,
1199 | },
1200 | },
1201 | {
1202 | name: 'Powershell constants mistakenly scoped to `support`, rather than `constant` (edge)',
1203 | scope: ['support.constant'],
1204 | settings: {
1205 | fontStyle: 'normal',
1206 | foreground: palette.base.PURPLE,
1207 | },
1208 | },
1209 | {
1210 | name: 'Makefile prerequisite names',
1211 | scope: ['meta.scope.prerequisites.makefile'],
1212 | settings: {
1213 | foreground: palette.base.YELLOW,
1214 | },
1215 | },
1216 | {
1217 | name: 'SCSS attibute selector strings',
1218 | scope: ['meta.attribute-selector.scss'],
1219 | settings: {
1220 | foreground: palette.base.YELLOW,
1221 | },
1222 | },
1223 | {
1224 | name: 'SCSS attribute selector brackets',
1225 | scope: [
1226 | 'punctuation.definition.attribute-selector.end.bracket.square.scss',
1227 | 'punctuation.definition.attribute-selector.begin.bracket.square.scss',
1228 | ],
1229 | settings: {
1230 | foreground: palette.base.FG,
1231 | },
1232 | },
1233 | {
1234 | name: 'Haskell Pragmas',
1235 | scope: ['meta.preprocessor.haskell'],
1236 | settings: {
1237 | foreground: palette.other.AlmostComment,
1238 | },
1239 | },
1240 | ],
1241 | }
1242 |
--------------------------------------------------------------------------------
/src/variants/omni-owl.ts:
--------------------------------------------------------------------------------
1 | import { ThemeSchema, TokenColor } from '~/@types/ThemeSchema'
2 | import { omniOwlMinimalItalics } from './omni-owl-minimal_italics'
3 |
4 | // Italic Inspiration from Night Owl
5 | const italics: TokenColor[] = [
6 | {
7 | name: 'Forced Italic Rules',
8 | scope: [
9 | 'markup.changed',
10 | 'meta.diff.header.git',
11 | 'meta.diff.header.from-file',
12 | 'meta.diff.header.to-file',
13 | 'markup.deleted.diff',
14 | 'markup.inserted.diff',
15 | 'comment',
16 | 'punctuation.accessor',
17 | // 'keyword',
18 | 'storage',
19 | 'meta.var.expr',
20 | 'meta.class meta.method.declaration meta.var.expr storage.type.js',
21 | 'storage.type.property.js',
22 | 'storage.type.property.ts',
23 | 'storage.type.property.tsx',
24 | 'entity.name.function',
25 | 'entity.other.attribute-name',
26 | 'keyword.operator.relational',
27 | 'meta.delimiter.period',
28 | 'meta.selector',
29 | 'entity.name.tag.doctype',
30 | 'meta.tag.sgml.doctype',
31 | 'variable.other.object.property',
32 | 'entity.name.function',
33 | // 'keyword.operator.comparison',
34 | 'keyword.control.flow.js',
35 | 'keyword.control.flow.ts',
36 | 'keyword.control.flow.tsx',
37 | 'keyword.control.ruby',
38 | 'keyword.control.module.ruby',
39 | 'keyword.control.class.ruby',
40 | 'keyword.control.def.ruby',
41 | 'keyword.control.loop.js',
42 | 'keyword.control.loop.ts',
43 | 'keyword.control.import.js',
44 | 'keyword.control.import.ts',
45 | 'keyword.control.import.tsx',
46 | 'keyword.control.from.js',
47 | 'keyword.control.from.ts',
48 | 'keyword.control.from.tsx',
49 | // 'keyword.operator.instanceof.js',
50 | // 'keyword.operator.expression.instanceof.ts',
51 | // 'keyword.operator.expression.instanceof.tsx',
52 | 'italic',
53 | 'quote',
54 | 'source.elixir .punctuation.binary.elixir',
55 | 'source.go keyword.package.go',
56 | 'source.go keyword.import.go',
57 | 'source.go keyword.function.go',
58 | 'source.go keyword.type.go',
59 | 'source.go keyword.struct.go',
60 | 'source.go keyword.interface.go',
61 | 'source.go keyword.const.go',
62 | 'source.go keyword.var.go',
63 | 'source.go keyword.map.go',
64 | 'source.go keyword.channel.go',
65 | 'source.go keyword.control.go',
66 | 'meta.tag.sgml.doctype.html',
67 | 'variable.other.object.js',
68 | 'markup.italic.markdown',
69 | 'markup.quote.markdown',
70 | 'keyword.control',
71 | ],
72 | settings: {
73 | fontStyle: 'italic',
74 | },
75 | },
76 |
77 | {
78 | name: 'Exempt Italic Rules',
79 | scope: [
80 | 'constant.numeric',
81 | 'constant.character.numeric',
82 |
83 | 'storage.type.function.arrow.js',
84 |
85 | 'storage.type.function.arrow.js',
86 |
87 | 'entity.name.tag',
88 | 'meta.tag.other.html',
89 | 'meta.tag.other.js',
90 | 'meta.tag.other.tsx',
91 | 'entity.name.tag.tsx',
92 | 'entity.name.tag.js',
93 | 'entity.name.tag',
94 | 'meta.tag.js',
95 | 'meta.tag.tsx',
96 | 'meta.tag.html',
97 |
98 | 'keyword.operator',
99 |
100 | 'variable.parameter.function',
101 |
102 | 'support.type.vendor.property-name',
103 | 'support.constant.vendor.property-value',
104 | 'support.type.property-name',
105 | 'meta.property-list entity.name.tag',
106 |
107 | 'keyword.operator.logical',
108 |
109 | 'variable.other.object.js',
110 |
111 | 'keyword.control.conditional.js',
112 | 'keyword.control.conditional.ts',
113 | 'keyword.control.switch.js',
114 | 'keyword.control.switch.ts',
115 |
116 | 'entity.name.tag.css',
117 | 'entity.name.tag.less',
118 | 'entity.name.tag.custom.css',
119 | 'support.constant.property-value.css',
120 |
121 | 'entity.name.type.js',
122 | 'entity.name.type.module.js',
123 |
124 | 'support.class.component.js',
125 | 'support.class.component.tsx',
126 |
127 | 'meta.property-list.css meta.property-value.css variable.other.less',
128 | 'meta.property-list.scss variable.scss',
129 | 'meta.property-list.sass variable.sass',
130 | 'meta.brace',
131 | 'keyword.operator.operator',
132 | 'keyword.operator.or.regexp',
133 | 'keyword.operator.expression.in',
134 | 'keyword.operator.relational',
135 | 'keyword.operator.assignment',
136 | 'keyword.operator.comparison',
137 | 'keyword.operator.type',
138 | 'keyword.operator',
139 | 'keyword',
140 | 'punctuation.definition.string',
141 | 'punctuation',
142 | 'variable.other.readwrite.js',
143 | 'storage.type',
144 | 'source.css',
145 | 'string.quoted',
146 | ],
147 | settings: {
148 | fontStyle: '',
149 | },
150 | },
151 | ]
152 |
153 | const { type, colors, tokenColors } = omniOwlMinimalItalics
154 |
155 | export const omniOwl: ThemeSchema = {
156 | name: 'Omni Owl',
157 | type,
158 | colors,
159 | tokenColors: [...tokenColors, ...italics],
160 | }
161 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | /* Visit https://aka.ms/tsconfig.json to read more about this file */
4 |
5 | /* Projects */
6 | // "incremental": true, /* Enable incremental compilation */
7 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
8 | // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */
9 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */
10 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
11 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
12 |
13 | /* Language and Environment */
14 | "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
15 | // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
16 | // "jsx": "preserve", /* Specify what JSX code is generated. */
17 | // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */
18 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
19 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */
20 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
21 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */
22 | // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */
23 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
24 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
25 |
26 | /* Modules */
27 | "module": "commonjs", /* Specify what module code is generated. */
28 | // "rootDir": "./", /* Specify the root folder within your source files. */
29 | // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */
30 | "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
31 | "paths": { /* Specify a set of entries that re-map imports to additional lookup locations. */
32 | "~/*": ["./src/*"],
33 | },
34 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
35 | // "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */
36 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */
37 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
38 | // "resolveJsonModule": true, /* Enable importing .json files */
39 | // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */
40 |
41 | /* JavaScript Support */
42 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */
43 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
44 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */
45 |
46 | /* Emit */
47 | // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
48 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */
49 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
50 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */
51 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */
52 | // "outDir": "./", /* Specify an output folder for all emitted files. */
53 | // "removeComments": true, /* Disable emitting comments. */
54 | // "noEmit": true, /* Disable emitting files from a compilation. */
55 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
56 | // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */
57 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
58 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
59 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
60 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
61 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
62 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
63 | // "newLine": "crlf", /* Set the newline character for emitting files. */
64 | // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */
65 | // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */
66 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
67 | // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */
68 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */
69 | // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */
70 |
71 | /* Interop Constraints */
72 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
73 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
74 | "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */
75 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
76 | "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
77 |
78 | /* Type Checking */
79 | "strict": true, /* Enable all strict type-checking options. */
80 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */
81 | // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */
82 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
83 | // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */
84 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
85 | // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */
86 | // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */
87 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
88 | // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */
89 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */
90 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
91 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
92 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
93 | // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */
94 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
95 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */
96 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
97 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
98 |
99 | /* Completeness */
100 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
101 | "skipLibCheck": true /* Skip type checking all .d.ts files. */
102 | }
103 | }
104 |
--------------------------------------------------------------------------------
/vsc-extension-quickstart.md:
--------------------------------------------------------------------------------
1 | # Welcome to your VS Code Extension
2 |
3 | ## What's in the folder
4 |
5 | - This folder contains all of the files necessary for your color theme extension.
6 | - `package.json` - this is the manifest file that defines the location of the theme file and specifies the base theme of the theme.
7 | - `themes/Omni Owl-color-theme.json` - the color theme definition file.
8 |
9 | ## Get up and running straight away
10 |
11 | - Press `F5` to open a new window with your extension loaded.
12 | - Open `File > Preferences > Color Themes` and pick your color theme.
13 | - Open a file that has a language associated. The languages' configured grammar will tokenize the text and assign 'scopes' to the tokens. To examine these scopes, invoke the `Developer: Inspect Editor Tokens and Scopes` command from the Command Palette (`Ctrl+Shift+P` or `Cmd+Shift+P` on Mac) .
14 |
15 | ## Make changes
16 |
17 | - Changes to the theme file are automatically applied to the Extension Development Host window.
18 |
19 | ## Adopt your theme to Visual Studio Code
20 |
21 | - The token colorization is done based on standard TextMate themes. Colors are matched against one or more scopes.
22 |
23 | To learn more about scopes and how they're used, check out the [color theme](https://code.visualstudio.com/api/extension-guides/color-theme) documentation.
24 |
25 | ## Install your extension
26 |
27 | - To start using your extension with Visual Studio Code copy it into the `/.vscode/extensions` folder and restart Code.
28 | - To share your extension with the world, read on https://code.visualstudio.com/docs about publishing an extension.
29 |
--------------------------------------------------------------------------------