# [Skins](https://github.com/deathaxe/sublime-skins)
[![License](https://img.shields.io/github/license/deathaxe/sublime-skins.svg?style=flat-square)](LICENSE)
[![Package Control](https://img.shields.io/packagecontrol/dt/Skins.svg?style=flat-square)](https://packagecontrol.io/packages/Skins)
**Skins** gives users the ability to change their current **Sublime Text** color scheme and theme with a single command. When a skin is selected, a certain set of settings is applied to Sublime Text. Skins can be provided in theme packages such as [Boxy Theme](https://github.com/ihodev/sublime-boxy) or they can be created by users themselves by saving the current settings to a new User Skin.
![screenshot](https://cloud.githubusercontent.com/assets/16542113/25050093/aae66aa0-2145-11e7-9edd-acd019ac5610.gif)
### End Users
#### General Usage
1. Open the Command Palette
2. Type one of the following three commands:
* `UI: Select Skin`
* `UI: Save Skin`
* `UI: Delete Skin`.
##### Keyboard shortcuts
To quickly open the `UI: Select Skin` menu use:
* Ctrl+F12 on Windows / Linux
* Super+F12 on macOS
#### Settings
By default the following settings are stored by `Save User Skin`
* `color_scheme`
* `theme`
* `font_face`
* `font_size`
To edit the settings
1. Open the Command Palette
2. Type `Preferences: Skins Settings`
The settings are stored in `Packages/User/Skins.sublime-settings`.
**Example**
```json
"skin-template":
{
// List of settings to load from / save to Preferences.sublime-settings
"Preferences":
[
"color_scheme",
"theme",
"font_face",
"font_size"
],
// List of settings to load from / save to SublimeLinter.sublime-settings
"SublimeLinter":
{
"user":
[
"error_color",
"gutter_theme",
"warning_color"
]
}
}
```
### Theme Developers
#### General
**Skins** parses all `*.skins` files in all packages. They are expected to store a collection of settings for sublime text and other packages. More than one skins file can exist in a package. The name of the file does not matter, but the names of the skins inside must be unique per package. The quick panel will show these names. The `Package` providing it is displayed in the second row as a kind of description.
#### File Format
```json
{
// skin
"Boxy Tomorrow (Green)": {
// Packages/User/Preferences.sublime-settings
"Preferences": {
"color_scheme": "Packages/Boxy Theme/schemes/Boxy Tomorrow.tmTheme",
"theme": "Boxy Tomorrow.sublime-theme",
"theme_accent_green" : true,
"theme_accent_orange": null,
"theme_accent_purple": null
},
// Packages/User/SublimeLinter.sublime-settings
"SublimeLinter": {
"user": {
// ...
}
}
},
// skin
"Monokai 2": {
// ...
},
// ...
}
```
Each child node of a skin represents the settings to be written to a `Packages/User/*.sublime-settings` file. Therefore settings can be provided not only for `Sublime Text` but for any installed package such as `SublimeLinter`. A skin must at least contain the `Preferences` node with `color_scheme` or `theme` settings to be valid but may include any other setting accepted by `Sublime Text`.
Settings with `null` value, are deleted in the sublime-settings files.
#### Commands
`Skins` exports the following `commands` to directly interact with all available skins. They can be used to create key bindings or command shortcuts to the most frequent used skins.
##### Set Skins
To open a quick panel with all available skins call:
```json
"command": "set_skin"
"args": { }
```
To open a quick panel with all skins provided by a single package call:
```json
"command": "set_skin",
"args": { "package": "Skins" }
```
To directly apply a certain predefined skin call:
```json
"command": "set_skin",
"args": { "package": "Skins", "name": "Monokai" }
```
To apply a saved user skin call:
```json
"command": "set_skin",
"args": { "package": "User", "name": "Preset 01" }
```
##### Save Skins
The following example will directly save the current look and feel as `Preset 01` in the `Packages/User/Saved Skins.skins` file.
```json
"command": "save_user_skin",
"args": { "name": "Preset 01" }
```
##### Delete Skins
The following example will directly delete `Preset 01` from the `Packages/User/Saved Skins.skins` file.
```json
"command": "delete_user_skin",
"args": { "name": "Preset 01" }
```
### Inspired by
* [`chmln/Theme Menu Switcher`](https://github.com/chmln/sublime-text-theme-switcher-menu)
* [`chrislongo/QuickThemes`](https://github.com/chrislongo/QuickThemes)