Add script to change an xterm color palette.

This commit is contained in:
Lifepillar
2017-11-30 18:31:18 +01:00
parent 256aa09e46
commit 68ac42092e
5 changed files with 179 additions and 13 deletions

View File

@@ -15,14 +15,18 @@ differently (for instance, I have tried to avoid red on blue).
The main reason for the existence of this project is that the original Solarized The main reason for the existence of this project is that the original Solarized
theme does not define `guifg` and `guibg` in terminal Vim, making it unsuitable theme does not define `guifg` and `guibg` in terminal Vim, making it unsuitable
for versions of Vim supporting true-color terminals. Instead, this color scheme for versions of Vim supporting true-color (i.e., 24-bit color) terminals.
works **out of the box everywhere**. For the best experience, you need: Instead, this colorscheme works **out of the box everywhere**. For the best
experience, you need:
- Vim ≥7.4.1799, or NeoVim, with `termguicolors` set, **and** - Vim ≥7.4.1799, or NeoVim, with `termguicolors` set, **and**
- [a true-color enabled terminal](https://gist.github.com/XVilka/8346728). - [a true-color enabled terminal](https://gist.github.com/XVilka/8346728).
Solarized 8 also works in MacVim, gVim, etc…: no configuration is needed. Solarized 8 also works in MacVim, gVim, etc…: no configuration is needed.
## But, my terminal has only 256 colors!
For terminals not supporting true colors, Solarized 8 will fall back For terminals not supporting true colors, Solarized 8 will fall back
to use an approximate palette based on xterm's 256 colors. This is a very crude to use an approximate palette based on xterm's 256 colors. This is a very crude
approximation, which looks more or less like this: approximation, which looks more or less like this:
@@ -34,17 +38,28 @@ Dark 256 color palette | Light 256 color palette
(Yeah, it looks like a different colorscheme.) (Yeah, it looks like a different colorscheme.)
If you don't like this approximation, to get exact colors with such terminals If you don't like this approximation, to get exact colors with such terminals
you must set your terminal's 16 ANSI colors to the Solarized palette (refer to you have two possibilities:
the manual of your terminal) and put this line in your `vimrc` before loading
the colorscheme: 1. Modify some of your terminal colors in the range 16255 to match Solarized
palette. For this purpose, you may run `scripts/solarized8.sh`; no setting is
needed in Vim. Note, however, that this is not supported by all terminals
(e.g., in macOS's Terminal.app this approach does not work: the script has no
effect).
2. Set your terminal's 16 ANSI colors (the colors in the range 015) to the
Solarized palette. Most terminals allow you to do that: see the manual of
your terminal to learn how. Then, put this line in your `vimrc` before
loading the colorscheme:
```vim ```vim
let g:solarized_use16 = 1 let g:solarized_use16 = 1
``` ```
Be aware that, if you set the variable above, but your terminal does not use the Be aware that, if you set the variable above, but your terminal does not use
Solarized palette, your colors will be completely off. Note also that if your the Solarized palette, your colors will be completely off.
terminal does not support true colors, you must *not* set `termguicolors`.
Finally, if your terminal does not support true colors, you must *not* set
`termguicolors`.
## Installation ## Installation
@@ -56,7 +71,7 @@ recommend that you use them. Just clone this repo inside `pack/*/opt`, e.g.:
Otherwise, use your favourite installation method. Otherwise, use your favourite installation method.
There are actually four optimized<sup>*</sup> color schemes: There are actually four optimized<sup>*</sup> colorschemes:
- `solarized8`: the default Solarized theme; - `solarized8`: the default Solarized theme;
- `solarized8_low`: low-contrast variant; - `solarized8_low`: low-contrast variant;
@@ -135,8 +150,8 @@ See `:h xterm-true-color` for the details.
Do you want to hack the theme? Install Do you want to hack the theme? Install
[Colortemplate](https://github.com/lifepillar/vim-colortemplate), edit the [Colortemplate](https://github.com/lifepillar/vim-colortemplate), edit the
`*.colortemplate` files, then rebuild the colorschemes by sourcing the script in `*.colortemplate` files, then rebuild the colorschemes by sourcing
the `templates` folder. `scripts/make_colorschemes.vim`.
If you extend or improve Solarized 8, please consider submitting a pull request! If you extend or improve Solarized 8, please consider submitting a pull request!

View File

@@ -5,11 +5,12 @@
let s:curdir = fnamemodify(resolve(expand('<sfile>:p')), ':h') let s:curdir = fnamemodify(resolve(expand('<sfile>:p')), ':h')
let s:parent = fnamemodify(s:curdir, ':h') let s:parent = fnamemodify(s:curdir, ':h')
let s:templates = s:parent.'/templates'
let s:errors = 0 let s:errors = 0
execute 'lcd' s:curdir execute 'lcd' s:templates
for s:template in glob(s:curdir . '/solarized8*.colortemplate', 1, 1) for s:template in glob(s:templates . '/solarized8*.colortemplate', 1, 1)
let s:template_name = fnamemodify(s:template, ':t:r') let s:template_name = fnamemodify(s:template, ':t:r')
if s:template_name == 'solarized8' if s:template_name == 'solarized8'
let g:colortemplate_no_doc = 0 let g:colortemplate_no_doc = 0

72
scripts/solarized8.sh Normal file
View File

@@ -0,0 +1,72 @@
#!/bin/sh
# Modify 256-color palette in supported terminals
# Script adapted from https://github.com/chriskempson/base16-shell
set -o errexit
hex2rgb() {
local s=$1
local r=${s:1:2}
local g=${s:3:2}
local b=${s:5:2}
echo "$r/$g/$b"
}
if [ "${TERM%%-*}" = 'linux' ]; then
# This script doesn't support linux console
return 2>/dev/null || exit 0
fi
if [ -n "$TMUX" ]; then
# tell tmux to pass the escape sequences through
# (Source: http://permalink.gmane.org/gmane.comp.terminal-emulators.tmux.user/1324)
printf_template="\033Ptmux;\033\033]4;%d;rgb:%s\007\033\\"
printf_template_var="\033Ptmux;\033\033]%d;rgb:%s\007\033\\"
printf_template_custom="\033Ptmux;\033\033]%s%s\007\033\\"
elif [ "${TERM%%-*}" = "screen" ]; then
# GNU screen (screen, screen-256color, screen-256color-bce)
printf_template="\033P\033]4;%d;rgb:%s\007\033\\"
printf_template_var="\033P\033]%d;rgb:%s\007\033\\"
printf_template_custom="\033P\033]%s%s\007\033\\"
else
printf_template="\033]4;%d;rgb:%s\033\\"
printf_template_var="\033]%d;rgb:%s\033\\"
printf_template_custom="\033]%s%s\033\\"
fi
printf $printf_template 235 $(hex2rgb "#002b36")
printf $printf_template 236 $(hex2rgb "#073642")
printf $printf_template 242 $(hex2rgb "#586e75")
printf $printf_template 66 $(hex2rgb "#657b83")
printf $printf_template 246 $(hex2rgb "#839496")
printf $printf_template 247 $(hex2rgb "#93a1a1")
printf $printf_template 254 $(hex2rgb "#eee8d5")
printf $printf_template 230 $(hex2rgb "#fdf6e3")
printf $printf_template 136 $(hex2rgb "#b58900")
printf $printf_template 166 $(hex2rgb "#cb4b16")
printf $printf_template 160 $(hex2rgb "#dc322f")
printf $printf_template 162 $(hex2rgb "#d33682")
printf $printf_template 61 $(hex2rgb "#6c71c4")
printf $printf_template 32 $(hex2rgb "#268bd2")
printf $printf_template 37 $(hex2rgb "#2aa198")
printf $printf_template 106 $(hex2rgb "#859900")
# foreground / background / cursor color
# if [ -n "$ITERM_SESSION_ID" ]; then
# # iTerm2 proprietary escape codes
# printf $printf_template_custom Pg 93a1a1 # forground
# printf $printf_template_custom Ph 002b36 # background
# printf $printf_template_custom Pi 93a1a1 # bold color
# printf $printf_template_custom Pj 586e75 # selection color
# printf $printf_template_custom Pk 93a1a1 # selected text color
# printf $printf_template_custom Pl 93a1a1 # cursor
# printf $printf_template_custom Pm 002b36 # cursor text
# else
# printf $printf_template_var 10 $color_foreground
# printf $printf_template_var 11 $color_background
# printf $printf_template_var 12 $color_cursor
# fi
unset printf_template
unset printf_template_var
unset printf_template_custom

View File

@@ -0,0 +1,74 @@
auxfile scripts/@shortname.sh
#!/bin/sh
# Modify 256-color palette in supported terminals
# Script adapted from https://github.com/chriskempson/base16-shell
set -o errexit
hex2rgb() {
local s=$1
local r=${s:1:2}
local g=${s:3:2}
local b=${s:5:2}
echo "$r/$g/$b"
}
if [ "${TERM%%-*}" = 'linux' ]; then
# This script doesn't support linux console
return 2>/dev/null || exit 0
fi
if [ -n "$TMUX" ]; then
# tell tmux to pass the escape sequences through
# (Source: http://permalink.gmane.org/gmane.comp.terminal-emulators.tmux.user/1324)
printf_template="\033Ptmux;\033\033]4;%d;rgb:%s\007\033\\"
printf_template_var="\033Ptmux;\033\033]%d;rgb:%s\007\033\\"
printf_template_custom="\033Ptmux;\033\033]%s%s\007\033\\"
elif [ "${TERM%%-*}" = "screen" ]; then
# GNU screen (screen, screen-256color, screen-256color-bce)
printf_template="\033P\033]4;%d;rgb:%s\007\033\\"
printf_template_var="\033P\033]%d;rgb:%s\007\033\\"
printf_template_custom="\033P\033]%s%s\007\033\\"
else
printf_template="\033]4;%d;rgb:%s\033\\"
printf_template_var="\033]%d;rgb:%s\033\\"
printf_template_custom="\033]%s%s\033\\"
fi
printf $printf_template @term256base03 $(hex2rgb "@guibase03")
printf $printf_template @term256base02 $(hex2rgb "@guibase02")
printf $printf_template @term256base01 $(hex2rgb "@guibase01")
printf $printf_template @term256base00 $(hex2rgb "@guibase00")
printf $printf_template @term256base0 $(hex2rgb "@guibase0")
printf $printf_template @term256base1 $(hex2rgb "@guibase1")
printf $printf_template @term256base2 $(hex2rgb "@guibase2")
printf $printf_template @term256base3 $(hex2rgb "@guibase3")
printf $printf_template @term256yellow $(hex2rgb "@guiyellow")
printf $printf_template @term256orange $(hex2rgb "@guiorange")
printf $printf_template @term256red $(hex2rgb "@guired")
printf $printf_template @term256magenta $(hex2rgb "@guimagenta")
printf $printf_template @term256violet $(hex2rgb "@guiviolet")
printf $printf_template @term256blue $(hex2rgb "@guiblue")
printf $printf_template @term256cyan $(hex2rgb "@guicyan")
printf $printf_template @term256green $(hex2rgb "@guigreen")
# foreground / background / cursor color
# if [ -n "$ITERM_SESSION_ID" ]; then
# # iTerm2 proprietary escape codes
# printf $printf_template_custom Pg 93a1a1 # forground
# printf $printf_template_custom Ph 002b36 # background
# printf $printf_template_custom Pi 93a1a1 # bold color
# printf $printf_template_custom Pj 586e75 # selection color
# printf $printf_template_custom Pk 93a1a1 # selected text color
# printf $printf_template_custom Pl 93a1a1 # cursor
# printf $printf_template_custom Pm 002b36 # cursor text
# else
# printf $printf_template_var 10 $color_foreground
# printf $printf_template_var 11 $color_background
# printf $printf_template_var 12 $color_cursor
# fi
unset printf_template
unset printf_template_var
unset printf_template_custom
endauxfile

View File

@@ -40,6 +40,10 @@ Color: green #859900 ~ 2
Color: back #002b36 ~ 8 Color: back #002b36 ~ 8
# }}} # }}}
# Fix 256-color palette in supported terminals {{{
Include: _fix-256-palette.colortemplate
# }}}
# Default highlight groups {{{ # Default highlight groups {{{
verbatim verbatim
if !has('gui_running') && get(g:, '@optionprefix_termtrans', 0) if !has('gui_running') && get(g:, '@optionprefix_termtrans', 0)