How can I contribute to the output channel toolbar for my extension? - visual-studio-code

I am working on an extension which has an output channel, and I wish to contribute a button/command to the toolbar for that output channel. I need a way to reference that toolbar as a contribution point, like "view/title", as well as the output channel view.
Perhaps it would look something like this in the package.json:
"output/title": [ "command": "myExtensionOutputChannelView.cmd", "when": "view == output.myExtensionOutputChannelView" ]
Is there a way to do this? Thanks.

Related

Trying to add a custom context menu item in VSCode that runs commands from an installed extension. Not sure what package.json to edit

I installed an extension called Faker, and the only way to access its commands are through the Command Palette. So I want to add a new entry to the editor's context menu using editor/context and contributes.menus as described here - and place all the Faker commands inside the new menu for easy access.
The format goes something like this (non-submenu):
{
"contributes": {
"menus": {
"editor/context": [
{
"command": "faker.address",
"group": "faker"
}
]
}
}
}
My question is, should I edit the extension's (Faker) package.json? Or is there is a global package.json that I can edit so I don't have to touch the extension's files?
What's the proper way to go about this?
Thanks much for any help.

VSCode extension SCM view pane icons

I am maintaining a vscode scm extention. Everything works as expected. But there is one thing left. I want to have such quick action icons as shown in the screenshot below from the build in git scm. In the API documentation I didn't find anything about that.
Does anyone know how to get this to work? Or where I can find a sample code?
Thanks!
With the provided link I was able to get icons in the file list.
In the package.json I duplicated an entry in the node contributes > menues > scm > resourceState > context
{
"command": "extension.myCommand1",
"when": "scmProvider == myProvider",
"group": "inline"
}
The important information is the group property which has to be inline.
Beside that, to make this command visible you need to configure an icon.
In contributes > commands you can configure the command
{
"command": "extension.myCommand1",
"title": "Do something",
"category": "myCat",
"icon": {
"dark": "myIcon.png",
"light": "myIcon.png"
}
}

Programmatically detect light vs dark colour theme

Is it possible programmatically to detect if the current theme is light or dark in VSCode?
Use Case:
I am developing a VSCode extension which is going to add Hovers to the editor, and I would like to have icons in the hovers. However, the background of the hover changes based on the current colour theme, so I need to choose the icons to display based on the colour theme.
Several other places in VSCode you are able to specify icons urls in the form:
let icon = {
light: "uri for light icon",
dark: "uri for dark icon",
};
so clearly VSCode has a notion of light vs dark themes.
This is similar to this question but AFAIK that answer only applies to webviews, and this issue is also brought up in this VSCode issue after it was closed
As of VS code 1.40, there is no API for this. Please file a feature request.
If you really, really want this info today though, you can read the current user's "workbench.colorTheme" setting and map this to dark/light. Instead of hardcoding this mapping, look it up by looping through the contributes of all known extensions using vscode.extensions.all.map(ext => ext.packageJSON). Here's an example theme contribution (the property you are interested in is uiTheme):
{
...
"contributes": {
"themes": [
{
"label": "Red",
"uiTheme": "vs-dark",
"path": "./themes/Red-color-theme.json"
}
]
}
}

Automatic scoll down on document refresh (VS Code)

Since VS Code can auto-refresh a document when it is changed from outside, I would like to scroll down to the last line automatically.
I'm sure this feature worked on previous versions but now I found no entry in settings to enable it.
It is helpful in order to monitor a log file while been write.
Is there any way to enable this feature?
So I created a VS Code extension for this, it's called autoscrolldown.
Building the world's most expensive tail -f!
Auto Scroll extension does this.
You could use the keybinding to scroll to the bottom of the file:
{
"command": "workbench.action.terminal.scrollToBottom",
"key": "ctrl+end",
"when": "terminalFocus"
}
CTRL-End
I don't see any other way to have the scrolling be automatic when a file refreshes.

VSCode. How to reload theme after editing its style

Hello I'm trying to make custom theme for VS Code and want to see style changes right after editing, currently i need to restart editor to see changes which is not very productive.
Is there is any way to enable something like "hot reload" for theme/extension development?
"hot reload" for theme/extension,
not specifically, but there is a Reload Window command, which is quite fast.
It is a suggested solution by VSCode.
You can Press Ctrl+Shift+P for Command Palette and type Reload Window,
or define a key binding: Open Keyboard Shortcuts from menu or Ctrl+K,Ctrl+S,
find Reload Window command using Search, add your desired key combination
As already suggested by Alex and also VSCode's themes article,
a flexible way to edit a theme, is to transfer lines with values you want to tweak into the Settings. Or create new ones, it's easier there, as you can take advantage of IntelliSense and "live" update, which is not really live, but upon Settings file Save (not all settings are live, e.g. editor.foreground will not auto update)
Once you are satisfied with the changes, or with your new entries, transfer lines containing them from Setting to the Theme file and reload.
Settings in Setting file have priority, will override values from Theme file, if they exist there.
There are usually two sections in a Theme file, one defining Workbench colors,
in Theme file, these settings are under colors Key. e.g.:
"colors": {
"editor.background": "#000000",
"editor.something": "#ffffff"
}
but to tweak them in the User Settings, they must go in workbench.colorCustomizations Key. e.g.:
"workbench.colorCustomizations": {
"editor.background": "#000000",
}
then there are Syntax highlighting colors,
these might be in Theme file in an Array under tokenColors Key, or referenced to external file.
To tweak e.g. String color and style:
{
"name": "String",
"scope": "string",
"settings": {
"fontStyle": "",
"foreground": "#E6DB74"
}
},
place it in User Setting under editor.tokenColorCustomizations inside textMateRules:
"editor.tokenColorCustomizations": {
"textMateRules": [
{
"name": "String",
"scope": "string",
"settings": {
"fontStyle": "",
"foreground": "#E6DB74"
}
},
]
},
(*) Trailing commas
Watch out for the trailing commas. They can be a nuisance. The last entry must not have it and when you are copying items up and down, it's easy to miss one.
As a little help you can take advantage of the fact that Settings will forgive you if you'll leave it there. From some point of view, considering that the setting will reside in Settings only temporarily, it might be less error prone to not remove the comma from Settings, if it was already there in Theme file and you're going to put the line/block back to Theme file after tweaking. This is why I included the comma, against JSON rules in examples above.
(*) Error in JSON
If you make an error in JSON and then save and reload VSCode still with the error in JSON, the modifications will not show and theme will look the same as from before the reload. It looks like the VSCode is still using a cached version of the Theme file from before the error was made.
This is quite confusing. Expected behavior would be to fall back to default Theme.
If you then open the Theme selector, your theme will still be listed as selected, but if you select another one and then try to select yours again (one with the error), VSCode will ignore this action, keeping the another theme. This behavior might confuse further, expected would be to show error, or not allow to make the selection.
Edit: from vscode 1.31.0 hot-reload is working for theme in [Extension Development Host (when launching F5 extensionHost].
Hot reload works in settings.json Ctrl+,. After theme is ready simply move the content.
"workbench.colorCustomizations": {},
"editor.tokenColorCustomizations": {
"textMateRules": []
},
The best I came up with, was to make a shortcut to:
code -n c:\projectdir
and give it a keyboard shortcut like Ctrl + F1.
Then, after editing, save your file, hit Ctrl + F1 and a new VS Code will open up with the theme freshly loaded. If you open up files with several different languages, you get a good preview. Then you can just close that window again, and continue editing your theme. Rinse, repeat.