first cut

This commit is contained in:
Reed Esau
2013-12-29 15:39:05 -07:00
parent 069a8ae6af
commit 1918cc0621
6 changed files with 213 additions and 347 deletions

View File

@@ -1 +0,0 @@
Tips on contributing.

View File

23
LICENSE.markdown Normal file
View File

@@ -0,0 +1,23 @@
License: The MIT License (MIT)
Copyright (c) 2013,2014 Reed Esau
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
<!-- vim: set tw=74 :-->

View File

@@ -1,218 +1,164 @@
# `thematic.vim` # `thematic.vim`
_Manage the look and feel of your Vim text editor_ > Conveniently manage Vims appearance to suit your task and environment
* Written in pure Vimscript for recent versions of MacVim, gVim, Vim, etc. * Groups global settings (like colorscheme) into themes
* Stays out of your way, except where you want it * Stays out of your way, except where you want it
* No predefined key mappings that could interfere with your other mappings * No predefined key mappings to interfere with your other mappings
* Support for font and fullscreen settings in GUI-based Vim * [vim-thematic-gui](https://github.com/reedes/vim-thematic-gui) extension
* Integrates with [airline][https://github.com/bling/vim-airline], another `themeable` plugin available with GUI-based support for: font, fullscreen, etc.
* Integrates with [airline][https://github.com/bling/vim-airline]
## Why `thematic`? ## Why `thematic`?
Many Vim users will keep things simple by sticking with a single theme that suits their needs, configuring it in their `.vimrc` by setting colorscheme, `guifont`, number, status line, etc.. Nothing wrong with that approach. You may be among the many Vim users who keep things simple by sticking
with a single theme that suits your needs, configuring it in your `.vimrc`
by setting the color scheme, font and status line.
But you may instead want to configure the visual details of Vim to match the task at hand, or even to suit your mood. For example, you might choose a theme that is less fatiguing to your eyes given the ambient lighting conditions, where you'll have a muted theme for a dark room and a high-contrast theme for use in a bright one. Or you might instead be among the users who instead configure the visual
details of Vim to match the lighting conditions or task at hand, or even
to suit your mood. For example, you might choose a theme that is less
fatiguing to your eyes given the ambient lighting conditions, where you'll
have a muted theme for a dark room and a high-contrast theme for use in
a bright one.
Writing code, you may want a status bar, ruler, transparency and a programming font. But if you're writing an essay or screenplay, you may want the screen stripped of all extraneous detail, with a traditional font and generous left and right margins. Writing code, you want a status bar, ruler, a hint of transparency and
a programming font. But if you're writing an essay or screenplay, you want
the screen stripped of all extraneous detail, with a traditional font and
generous left and right margins.
You may want to complement a colorscheme with a particular typeface -- a lightweight anti-aliased typeface like Adobe's _Source Code Pro ExtraLight_ may look great against a black background but be unreadable against a white one. Or for a given typeface you may want a specific [leading][http://en.wikipedia.org/wiki/Leading] as supported with Vim's `linespace`. Managing such an multi-theme environment in Vim has traditionally been
a hassle. The `thematic` plugin is intended to solve that problem,
providing you flexibility and convenience.
Managing such an environment in Vim has traditionally been a hassle. The `thematic` plugin is intended to provide the Vim user more flexibility and convenience. ## Installation
Install using Pathogen, Vundle, Neobundle, or your favorite Vim package
manager.
## Configuration
### Themes
A few of Vim's standard `colorschemes` are configured by default, but
you'll want to override them with your own, like this:
```vim
let g:thematic#themes = {
\ 'bubblegum' : {
\ },
\ 'jellybeans' : { 'laststatus': 0,
\ 'ruler': 1,
\ },
\ 'matrix' : { 'colorscheme': 'base16-greenscreen',
\ 'laststatus': 0,
\ },
\ 'solar_dark' : { 'colorscheme': 'solarized',
\ 'background': 'dark',
\ 'diff-color-fix': 1,
\ 'sign-column-color-fix': 1,
\ },
\ 'solar_lite' : { 'colorscheme': 'solarized',
\ 'background': 'light',
\ 'signcolumn-color-fix': 1,
\ },
\ }
```
If you don't specify a `colorscheme`, `thematic` will attempt to load one
given your theme name.
You can also specify a dictionary of default values, to be shared by all
of your themes.
```vim
let g:thematic#defaults = {
\ 'airline-theme': 'jellybeans',
\ 'laststatus': 2,
\ }
```
Note that an explicit setting in a theme will always override these defaults.
Note also that `thematic` stays out of your way, ignoring any settings
that you aren't explicitly setting through your `thematic` configuration.
For example, you can `set guifont=` in your .gvimrc independent of your
`thematic` configuration.
### Commands
Running `:ThematicFirst` invoke `thematic` and chooses the first theme,
as your themes will be reordered alphabetically by name.
```vim
:ThematicFirst " switch to the first theme, ordered by name
:ThematicNext " switch to the next theme, ordered by name
:ThematicPrevious " switch to the previous theme, ordered by name
:ThematicRandom " switch to a random theme
:ThematicOriginal " revert to the original theme
:Thematic {theme_name} " load a theme by name
```
`thematic` does not map any keys by default, but you can easily do so in
your `.vimrc` file:
```vim
nnoremap <Leader>t <Plug>ThematicNext
nnoremap <Leader>T <Plug>ThematicPrevious
```
## What theme properties can I set? ## What theme properties can I set?
For each theme you specify one or more properties. For each theme you specify one or more properties.
For console or GUI Vim: For console or GUI Vim:
* `laststatus` (0, 1, or 2) - _controls the visibility of the status bar_ * `laststatus` (0, 1, or 2) - controls the visibility of the status bar
* `ruler` - _as alternative to status bar, shows minimal position details in lower right_ * `ruler` - as alternative to status bar, shows minimal position details
* `colorscheme` - _set the colors for all windows_ in lower right
* `background` (dark or light) - _some colorschemes can be further configured via background_ * `colorscheme` - set the colors for all windows
* `sign-column` - _optional two-character gutter on left-side of window_ * `background` (dark or light) - some colorschemes can be further
* `airline-theme` - _plugin for theming your status bar_ configured via background
* `sign-column-color-fix` - _temporarily modifies colorscheme to force gutter background_ * `sign-column` - optional two-character gutter on left-side of window
* `diff-color-fix` - _temporarily modifies colorscheme to force diff character color_ * `airline-theme` - plugin for theming your status bar
* `fold-column-color-mute` - _temporarily modifies colorscheme to hide indicators in foldcolumn_ * `sign-column-color-fix` - temporarily modifies colorscheme to force
* `force-redraw` - _if 1, forces a `redraw!` after `thematic` makes changes_ gutter background
* `diff-color-fix` - temporarily modifies colorscheme to force diff
character color
* `fold-column-color-mute` - temporarily modifies colorscheme to hide
indicators in foldcolumn
* `force-redraw` - if 1, forces a `redraw!` after `thematic` makes changes
For GUI-based Vim only: For GUI-based options, see the `vim-thematic-gui` plugin. Heres
* `typeface`, `font-size`, and `linespace` - _be specific about typography_ a summary:
* `fullscreen` and `fullscreen-background-color-fix` - _force a switch to fullscreen, with optional change of color of the background (or border)_
* `columns` and `lines` - _manage the width of margins in `fullscreen` mode_
* `transparency` (0-100) - _view details of window and desktop beneath Vim_
* Check `:help thematic` for details. * `typeface`, `font-size`, and `linespace` - be specific about typography
* `fullscreen` and `fullscreen-background-color-fix` - force a switch to
## Basic Usage fullscreen, with optional change of color of the background (or border)
* `columns` and `lines` - manage the width of margins in `fullscreen` mode
* Run `:ThematicFirst` to invoke `thematic` and choose the first theme. Your themes will be ordered alphabetically. * `transparency` (0-100) - view details of window and desktop beneath Vim
```vim
:ThematicFirst " select the first theme
:ThematicNext " select the next theme
:ThematicPrevious " select the previous theme
:ThematicRandom " select a random theme
:ThematicOriginal " revert to the original theme
```
`thematic` does not map any keys by default, but you can easily do so in your `.vimrc` file, like this:
```vim
nmap <Leader>t <Plug>ThematicNext
nmap <Leader>T <Plug>ThematicPrevious
```
...where with the default leader key of `\`, `\t` would select the next theme in your list, as ordered alphabetically.
A few of Vim's standard `colorschemes` are configured as default themes, but you'll likely want to override them with your own, like this:
```
let g:thematic#themes = {
\ 'bubblegum' : { 'typeface': 'CosmicSansNeueMono',
\ 'sign-column-color-fix': 1,
\ 'transparency': 10,
\ },
\ 'desert' : { 'sign-column': 0,
\ },
\ 'jellybeans' : { 'typeface': 'Droid Sans Mono',
\ 'font-size': 20,
\ 'laststatus': 0,
\ 'ruler': 1,
\ },
\ 'matrix' : { 'colorscheme': 'base16-greenscreen',
\ 'typeface': 'Dot Matrix',
\ 'laststatus': 0,
\ 'linespace': 9,
\ 'transparency': 10,
\ },
\ 'reede_dark' : { 'typeface': 'Source Code Pro ExtraLight',
\ 'airline-theme': 'badwolf',
\ },
\ 'reede_light': { 'typeface': 'Luxi Mono',
\ 'columns': 75,
\ 'font-size': 20,
\ 'fullscreen': 1,
\ 'laststatus': 0,
\ 'linespace': 9,
\ 'sign-column': 1,
\ },
\ 'solar_dark' : { 'colorscheme': 'solarized',
\ 'background': 'dark',
\ 'diff-color-fix': 1,
\ 'sign-column-color-fix': 1,
\ 'signcolumn-color-fix': 1,
\ 'typeface': 'Source Code Pro Light',
\ },
\ 'solar_lite' : { 'colorscheme': 'solarized',
\ 'background': 'light',
\ 'font-size': 20,
\ 'signcolumn-color-fix': 1,
\ },
\ }
```
If you don't specify a `colorscheme`, `thematic` will assume it matches your theme name.
You can also specify a dictionary of default values, to be shared by all of your themes.
```
let g:thematic#defaults = {
\ 'airline-theme': 'jellybeans',
\ 'fullscreen-background-color-fix': 1,
\ 'laststatus': 2,
\ 'font-size': 20,
\ 'transparency': 0,
\ }
```
Note that an explicit setting in a theme will always override these defaults.
Note also that `thematic` stays out of your way, ignoring any settings that you aren't explicitly setting through your `thematic` configuration.* For example, you can `set guifont=` in your .gvimrc independent of your `thematic` configuration.
* * the one exception is `fuoptions` discussed below
## Installation
Install using Pathogen, Vundle, Neobundle, or your favorite Vim package manager.
## Configuration
```
set nocompatible
filetype off
```
## GUI fullscreen capabilities
`thematic` supports fullscreen capabilities in a GUI-based Vim, including typeface, font-size, lines, columns, linespace, transparency and even the fullscreen background.
Note that once invoked, `thematic` will override your fullscreen settings, specifically `fuoptions` to get better control over lines and columns and the fullscreen background.
## Column sizing
You may wish to adjust the columns while in full screen. Map to Command-9 and Command-0 in your `.vimrc` with:
```
nmap <silent> <D-9> <Plug>ThematicNarrow
nmap <silent> <D-0> <Plug>ThematicWiden
```
## FAQ ## FAQ
### Q: I want to set `cursorline`, `wrap`, `foldcolumn`, `list`, `number`, `relativenumber`, `textwidth`, etc. in my themes. ### Q: I want to set `cursorline`, `wrap`, `textwidth`, etc. in my themes.
`thematic` focuses exclusively on global settings. The settings above are not globally-scoped but are instead scoped to individual buffers and windows. These are best set using the existing `FileType` facility in Vim. `thematic` focuses exclusively on global settings. The settings above are
not globally-scoped but are instead scoped to individual buffers and
windows. These are best set using the `FileType` feature in Vim.
In addition, settings like `textwidth` will modify your documents. This plugin strenuously avoids doing anything to change your documents. In addition, settings like `textwidth` will modify your documents, which
this plugin strenuously avoids.
To your `.vimrc` add
```
filetype plugin on
" defaults for all buffers/windows
set nocursorline
set foldcolumn=0
set list
set nonumber
set norelativenumber
set nowrap
```
Then for each `filetype` that you wish to support with specific settings, create a file in the `~/.vim/after/ftplugin` directory.
For example, to support custom settings for `python` files, create a file `~/.vim/after/ftplugin/python.vim` containing:
```
" python-specific settings
set cursorline
set number
```
Then a cursor line and line numbering will be present whenever you edit a python file.
### Q: Using MacVim, the fullscreen background color isn't working as expected. How do I change its behavior?
To have the fullscreen background's color set by `thematic`, enter the following in OSX Terminal:
```
$ defaults write org.vim.MacVim MMNativeFullScreen 0
```
Or, if you prefer your fullscreen window to float against a standard background:
```
$ defaults write org.vim.MacVim MMNativeFullScreen 1
```
### Q: How can I configure Vim to emulate soft-wrapping markdown editors like IAWriter? ### Q: How can I configure Vim to emulate soft-wrapping markdown editors like IAWriter?
It works best in GUI Vim's fullscreen. Several steps are involved: It works best with GUI Vim's fullscreen. A few steps are involved:
(1) Install a `markdown.vim` plugin from [plasticboy][https://github.com/plasticboy/vim-markdown] or [tpope][https://github.com/tpope/vim-markdown]. (1) Install a few plugins:
(2) Configure your `~/.gvimrc` to disable the tool bar, etc. * [vim-thematic-gui](https://github.com/reedes/vim-thematic-gui) - support GUI features in `thematic`
* [vim-markdown](https://github.com/tpope/vim-markdown) - support for editing markdown
* [vim-writer](https://github.com/reedes/vim-writer) - to configure for word processing
(2) Edit your `.gvimrc` to disable the tool bar, etc.
``` ```
set antialias set antialias
@@ -223,40 +169,8 @@ It works best in GUI Vim's fullscreen. Several steps are involved:
set guioptions-=T "kill toolbar set guioptions-=T "kill toolbar
``` ```
(3) Edit `~/.vim/after/ftplugin/markdown.vim` to control editing behavior and buffer-specific settings: (3) Finally, create a theme configured to your tastes. Here's an example for
MacVim:
```
" IAWriter-like settings (soft-wrap mode)
setlocal textwidth=0
setlocal wrap
setlocal complete+=k
setlocal complete+=kspell
setlocal complete+=s
setlocal nocursorline
setlocal dictionary+=/usr/share/dict/words
setlocal display+=lastline
setlocal formatoptions+=l " long lines not broken in insert mode
setlocal linebreak " default breakat ' ^I!@*-+;:,./?'
setlocal nojoinspaces " only one space after a .!?
setlocal nolist
setlocal nonumber
setlocal norelativenumber
setlocal spell spelllang=en_us
setlocal spellfile=~/.vim/spell/en.utf-8.add
setlocal thesaurus+=~/.vim/thesaurus/mthesaur.txt
setlocal virtualedit=
setlocal wrapmargin=0
nnoremap <buffer> <silent> $ g$
nnoremap <buffer> <silent> 0 g0
nnoremap <buffer> <silent> j gj
nnoremap <buffer> <silent> k gk
vnoremap <buffer> <silent> $ g$
vnoremap <buffer> <silent> 0 g0
vnoremap <buffer> <silent> j gj
vnoremap <buffer> <silent> k gk
```
(4) Finally, add a theme configured to your tastes. Here's an example:
``` ```
let g:thematic#themes = { let g:thematic#themes = {
@@ -273,83 +187,36 @@ It works best in GUI Vim's fullscreen. Several steps are involved:
\ } \ }
``` ```
Console-based emulation is trickier, as there's no easy way to create generous left and right margins. You can approximate it by switching from soft-wrap to hard line breaks with additional changes to `~/.vim/after/ftplugin/markdown.vim`: Without GUI-based Vim, console-based emulation is trickier, as there's no
easy way to create generous left and right margins. You can approximate it
by switching from soft-wrap to hard line breaks with `vim-writer` and using
with a narrow `textwidth`:
``` ```
setlocal foldcolumn=12 " add a generous left column autocmd FileType markdown set foldcolumn=12 textwidth=74
setlocal nowrap " replaces 'set wrap'
setlocal textwidth=70 " replaces 'set textwidth=0'
``` ```
Note that this chooses hard line breaks over soft-wrapping and thus may not be desirable. You can also use the following setting in your theme to hide the indicators in the fold column. ## Related projects
```
let g:thematic#themes = {
\ 'YOURTHEME' :{ 'fold-column-color-mute': 1,
...
\ },
...
\ }
```
Also, check out:
* [vimroom][https://github.com/mikewest/vimroom/blob/master/plugin/vimroom.vim]
* [vim-writeroom][https://github.com/jamestomasino/vim-writeroom]
* [vim-zenmode][https://github.com/mmai/vim-zenmode]
* [df_moded][https://github.com/nielsadb/df_mode.vim]
### Q: In Mac OSX I switch to fullscreen via Control+Command+F and the screen is blank!
You can refresh via `:redraw!`
(if anybody knows how to fix this, let me know!)
As an alternative to key command you can force fullscreen in a theme with:
```
let g:thematic#themes = {
\ 'bubblegum' : { 'fullscreen': 1,
\ ...
\ },
\ ...
\ }
```
## Where to find
TODO GUI Vim
TODO Colorschemes
## Monospaced fonts
Many monospaced fonts are available for free. Note that your computer probably has several installed, such as `Menlo` on OSX.
### Popular monospaced fonts
* [Anonymous Pro](https://www.google.com/fonts/specimen/Anonymous+Pro)
* [CosmicSansNeueMono](https://github.com/belluzj/cosmic-sans-neue)
* [Courier Prime](http://quoteunquoteapps.com/courierprime/)
* [Cousine](http://www.google.com/fonts/specimen/Cousine)
* [Cutive Mono](http://www.google.com/fonts/specimen/Cutive+Mono)
* [DejaVu Sans Mono](http://dejavu-fonts.org/wiki/Download)
* [Droid Sans Mono](http://www.google.com/fonts/specimen/Droid+Sans+Mono)
* [Hermit](https://pcaro.es/p/hermit/)
* [Inconsolata](http://www.google.com/fonts/specimen/Inconsolata)
* [Linux Libertine Mono O](http://sourceforge.net/projects/linuxlibertine/)
* [Liberation](https://fedorahosted.org/liberation-fonts/)
* [Luxi Mono Regular](http://www.fontsquirrel.com/fonts/Luxi-Mono)
* [Meslo](https://github.com/andreberg/Meslo-Font)
* [Oxygen Mono](https://www.google.com/fonts/specimen/Oxygen+Mono)
* [PT Mono](http://www.google.com/fonts/specimen/PT+Mono)
* [Share Tech Mono](http://www.google.com/fonts/specimen/Share+Tech+Mono)
* [Source Code Pro](http://www.google.com/fonts/specimen/Source+Code+Pro)
* [Ubuntu Mono](https://www.google.com/fonts/specimen/Ubuntu+Mono)
## Similar Projects
If this project is not to your liking, you might enjoy: If this project is not to your liking, you might enjoy:
* [vim-ultimate-colorscheme-utility][https://github.com/biskark/vim-ultimate-colorscheme-utility] * [vim-ultimate-colorscheme-utility][https://github.com/biskark/vim-ultimate-colorscheme-utility]
* [stylish][https://github.com/mislav/stylish.vim] * [stylish][https://github.com/mislav/stylish.vim]
* [vim-session][https://github.com/xolox/vim-session] * [vim-session][https://github.com/xolox/vim-session]
* [vim-obsession][https://github.com/tpope/vim-obsession] * [vim-obsession][https://github.com/tpope/vim-obsession]
## See also
If you like this plugin, you might like these others from the same author:
* [vim-litecorrect](http://github.com/reedes/vim-litecorrect) - Lightweight auto-correction for Vim
* [vim-quotable](http://github.com/reedes/vim-quotable) - extends Vim to support typographic (curly) quotes
* [vim-thematic-gui](http://github.com/reedes/vim-thematic-gui) — A GUI-based extension to the `thematic` plugin for Vim
* [vim-writer](http://github.com/reedes/vim-writer) - Extending Vim to better support writing prose and documentation
## Future development
If you have any ideas on improving this plugin, please post them to the github
project issue page.
<!-- vim: set tw=74 :-->

View File

@@ -1,10 +1,15 @@
" Autoload portion of plugin/thematic.vim. " ============================================================================
" " File: autoload/thematic.vim
" Credit for some font regex/functions: https://github.com/drmikehenry/vim-fontsize " Description: autoload script for vim-thematic plugin
" Maintainer: Reed Esau <github.com/reedes>
" Last Change: December 30, 2013
" License: The MIT License (MIT)
" ============================================================================
if exists("autoloaded_thematic") | finish | endif if exists("autoloaded_thematic") | finish | endif
let autoloaded_thematic = 1 let autoloaded_thematic = 1
function! s:getThemeName(mode) function! s:getThemeName(mode)
let l:avail_names = sort(keys(g:thematic#themes)) let l:avail_names = sort(keys(g:thematic#themes))
let l:avail_count = len(l:avail_names) let l:avail_count = len(l:avail_names)
@@ -41,9 +46,10 @@ function! s:getThemeName(mode)
endif endif
endfunction endfunction
" Obtain value for theme property, falling back to either user-specified " Obtain value for theme property, falling back to either user-specified
" defaults or the original value. " defaults or the original value.
function! s:getThemeValue(th, key_name, ultimate_fallback_value) function! thematic#getThemeValue(th, key_name, ultimate_fallback_value)
if has_key(g:thematic#defaults, a:key_name) if has_key(g:thematic#defaults, a:key_name)
let l:fallback_value = get(g:thematic#defaults, a:key_name) let l:fallback_value = get(g:thematic#defaults, a:key_name)
elseif has_key(g:thematic#original, a:key_name) elseif has_key(g:thematic#original, a:key_name)
@@ -54,6 +60,7 @@ function! s:getThemeValue(th, key_name, ultimate_fallback_value)
return get(a:th, a:key_name, l:fallback_value) return get(a:th, a:key_name, l:fallback_value)
endfunction endfunction
function! s:airline(th) function! s:airline(th)
" set the g:airline_theme variable and refresh " set the g:airline_theme variable and refresh
"https://github.com/bling/vim-airline/wiki/Screenshots "https://github.com/bling/vim-airline/wiki/Screenshots
@@ -63,7 +70,7 @@ function! s:airline(th)
let g:thematic#original['airline-theme'] = g:airline_theme let g:thematic#original['airline-theme'] = g:airline_theme
endif endif
let l:al = s:getThemeValue(a:th, 'airline-theme', '') let l:al = thematic#getThemeValue(a:th, 'airline-theme', '')
if l:al != '' if l:al != ''
let g:airline_theme = l:al let g:airline_theme = l:al
else else
@@ -87,27 +94,7 @@ function! s:airline(th)
endif endif
endfunction endfunction
" If no explicit settings on lines and columns in function! thematic#init(mode)
" either the theme or the defaults, then leave alone.
function! s:setColumnsAndLines(th)
let l:columns = s:getThemeValue(a:th, 'columns', 0)
if l:columns > 0
execute 'set columns=' . l:columns
elseif s:getThemeValue(a:th, 'maxhorz', 0)
set columns=999
endif
let l:lines = s:getThemeValue(a:th, 'lines', 0)
if l:lines > 0
execute 'set lines=' . l:lines
elseif s:getThemeValue(a:th, 'maxvert', 0)
set lines=999
endif
endfunction
function! thematic#load(mode)
if len(g:thematic#themes) == 0 if len(g:thematic#themes) == 0
echohl WarningMsg | echo 'No themes found.' | echohl NONE echohl WarningMsg | echo 'No themes found.' | echohl NONE
finish finish
@@ -145,20 +132,20 @@ function! thematic#load(mode)
endtry endtry
" use the original background, if not explicit and no default " use the original background, if not explicit and no default
let l:bg = s:getThemeValue(l:th, 'background', '') let l:bg = thematic#getThemeValue(l:th, 'background', '')
if (l:bg == 'light' || l:bg == 'dark') && &background != l:bg if (l:bg == 'light' || l:bg == 'dark') && &background != l:bg
execute 'set background=' . l:bg execute 'set background=' . l:bg
endif endif
" ------ Fix/mute colors ------ " ------ Fix/mute colors ------
if s:getThemeValue(l:th, 'sign-column-color-fix', 0) if thematic#getThemeValue(l:th, 'sign-column-color-fix', 0)
" Ensure the gutter matches the text background " Ensure the gutter matches the text background
" TODO how about match the number background? " TODO how about match the number background?
hi! SignColumn guifg=fg guibg=bg hi! SignColumn guifg=fg guibg=bg
endif endif
if s:getThemeValue(l:th, 'diff-color-fix', 0) if thematic#getThemeValue(l:th, 'diff-color-fix', 0)
" Override diff colors " Override diff colors
" TODO figure out what to do for cterm " TODO figure out what to do for cterm
hi! DiffAdd guifg=darkgreen guibg=bg "cterm=bold ctermbg=237 ctermfg=119 hi! DiffAdd guifg=darkgreen guibg=bg "cterm=bold ctermbg=237 ctermfg=119
@@ -167,7 +154,7 @@ function! thematic#load(mode)
hi! DiffText guifg=fg guibg=bg hi! DiffText guifg=fg guibg=bg
endif endif
if s:getThemeValue(l:th, 'fold-column-color-mute', 0) if thematic#getThemeValue(l:th, 'fold-column-color-mute', 0)
" Ensure the fold column is blank, for non-distracted editing " Ensure the fold column is blank, for non-distracted editing
hi! FoldColumn guifg=bg guibg=bg cterm=none ctermbg=none ctermfg=none hi! FoldColumn guifg=bg guibg=bg cterm=none ctermbg=none ctermfg=none
endif endif
@@ -177,7 +164,7 @@ function! thematic#load(mode)
" Force the display of a two-column gutter for signs, etc. " Force the display of a two-column gutter for signs, etc.
" The sign configuration is apparently buffer-scoped, so iterate " The sign configuration is apparently buffer-scoped, so iterate
" over all listed buffers to force the sign column. " over all listed buffers to force the sign column.
let l:sc = s:getThemeValue(l:th, 'sign-column', -1) let l:sc = thematic#getThemeValue(l:th, 'sign-column', -1)
if l:sc == 1 if l:sc == 1
" TODO how to auto-refresh/disable Signify, gitgutter, etc.? " TODO how to auto-refresh/disable Signify, gitgutter, etc.?
sign define dummy sign define dummy
@@ -193,7 +180,7 @@ function! thematic#load(mode)
" These are all globally-scoped settings " These are all globally-scoped settings
let l:ruler = s:getThemeValue(l:th, 'ruler', -1) let l:ruler = thematic#getThemeValue(l:th, 'ruler', -1)
if l:ruler == 1 if l:ruler == 1
set ruler set ruler
elseif l:ruler == 0 elseif l:ruler == 0
@@ -202,7 +189,7 @@ function! thematic#load(mode)
call s:airline(l:th) call s:airline(l:th)
let l:ls = s:getThemeValue(l:th, 'laststatus', -1) let l:ls = thematic#getThemeValue(l:th, 'laststatus', -1)
if l:ls > 2 if l:ls > 2
let l:ls = 2 let l:ls = 2
endif endif
@@ -212,24 +199,15 @@ function! thematic#load(mode)
" ------ Set GUI-only settings ------ " ------ Set GUI-only settings ------
if has('gui_running') if has('gui_running') && exists('*thematic#gui#init')
if exists('*thematic#gui#load') call thematic#gui#init(l:th)
call thematic#gui#load(l:th)
endif endif
endif
let g:thematic#theme_name = l:theme_name let g:thematic#theme_name = l:theme_name
if s:getThemeValue(l:th, 'force-redraw', 0) if thematic#getThemeValue(l:th, 'force-redraw', 0)
redraw! redraw!
endif endif
endfunction endfunction
function! thematic#adjustColumns(delta)
let l:nu_cols = &columns + a:delta
silent execute "set columns=" . l:nu_cols
endfunction
" vim:ts=2:sw=2:sts=2 " vim:ts=2:sw=2:sts=2

View File

@@ -1,8 +1,10 @@
" ============================================================================= " ============================================================================
" File: plugin/thematic.vim " File: plugin/thematic.vim
" Description: Theme Manager for the Vim text editor " Description: script for vim-thematic plugin
" Maintainer: Reed Esau <github.com/reedes> " Maintainer: Reed Esau <github.com/reedes>
" ============================================================================= " Last Change: December 30, 2013
" License: The MIT License (MIT)
" ============================================================================
" "
" TODO licensing " TODO licensing
" TODO guioptions " TODO guioptions
@@ -48,15 +50,12 @@ endif
" Commands " Commands
command -nargs=0 ThematicNarrow call thematic#adjustColumns(-5) command -nargs=0 ThematicFirst call thematic#init('#first')
command -nargs=0 ThematicWiden call thematic#adjustColumns(5) command -nargs=0 ThematicNext call thematic#init('#next')
command -nargs=0 ThematicPrevious call thematic#init('#previous')
command -nargs=0 ThematicFirst call thematic#load('#first') command -nargs=0 ThematicRandom call thematic#init('#random')
command -nargs=0 ThematicNext call thematic#load('#next') command -nargs=0 ThematicOriginal call thematic#init('#original')
command -nargs=0 ThematicPrevious call thematic#load('#previous') command -nargs=1 Thematic call thematic#init(<f-args>)
command -nargs=0 ThematicRandom call thematic#load('#random')
command -nargs=0 ThematicOriginal call thematic#load('#original')
"command! -nargs=1 MyCommand call s:MyFunc(<f-args>)
" Plugin mappings " Plugin mappings