Initial support for creating 88/256 color schemes
Added a new function, CSApproxSnapshot(filename [, force=0]). This function will take the current colors and dump them out to a new colorscheme script stored at `filename', unless that file already exists and `force' is not set. This may still have some bugs to work out, I'm surprised it was this easy... Not surprisingly, it falls apart if the colorscheme didn't set g:colors_name... And it doesn't handle highlights the user made himself, outside of the scheme. Still, it's a good first draft.
This commit is contained in:
parent
cb1d299c94
commit
084ad4cc01
@ -457,7 +457,7 @@ function! s:SetCtermFromGui(hl)
|
|||||||
endif
|
endif
|
||||||
try
|
try
|
||||||
let val = s:rgb[tolower(val)]
|
let val = s:rgb[tolower(val)]
|
||||||
catch /^/
|
catch
|
||||||
if &verbose
|
if &verbose
|
||||||
echomsg "CSApprox: Colorscheme uses unknown color \"" . val . "\""
|
echomsg "CSApprox: Colorscheme uses unknown color \"" . val . "\""
|
||||||
endif
|
endif
|
||||||
@ -481,15 +481,11 @@ function! s:SetCtermFromGui(hl)
|
|||||||
endfor
|
endfor
|
||||||
|
|
||||||
" Finally, set the attributes
|
" Finally, set the attributes
|
||||||
let attributes = []
|
let attrs = [ 'bold', 'italic', 'underline', 'undercurl' ]
|
||||||
for attribute in [ 'bold', 'italic', 'underline', 'undercurl' ]
|
call filter(attrs, 'hl.cterm[v:val] == 1')
|
||||||
if hl.cterm[attribute] == 1
|
|
||||||
let attributes += [ attribute ]
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
|
|
||||||
if !empty(attributes)
|
if !empty(attrs)
|
||||||
exe 'hi ' . hl.name . ' cterm=' . join(attributes, ',')
|
exe 'hi ' . hl.name . ' cterm=' . join(attrs, ',')
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
@ -684,7 +680,62 @@ function! s:CSApproxImpl()
|
|||||||
endfor
|
endfor
|
||||||
|
|
||||||
" and finally, store the new highlights for use in the next iteration
|
" and finally, store the new highlights for use in the next iteration
|
||||||
let s:highlights = highlights
|
let s:highlights = copy(highlights)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! CSApproxSnapshot(file, ...)
|
||||||
|
let force = (a:0 ? a:1 : 0)
|
||||||
|
let file = fnamemodify(a:file, ":p")
|
||||||
|
|
||||||
|
if empty(file)
|
||||||
|
throw "Bad file name: \"" . file . "\""
|
||||||
|
elseif (filewritable(fnamemodify(file, ':h')) != 2)
|
||||||
|
throw "Cannot write to directory \"" . fnamemodify(file, ':h') . "\""
|
||||||
|
elseif (glob(file) || filereadable(file)) && !force
|
||||||
|
throw "File exists, not overriding without 'force' flag!"
|
||||||
|
endif
|
||||||
|
|
||||||
|
let save_t_Co = &t_Co
|
||||||
|
|
||||||
|
try
|
||||||
|
let lines = []
|
||||||
|
let lines += [ '" This scheme was created by CSApproxSnapshot' ]
|
||||||
|
let lines += [ '" on ' . strftime("%a, %d %b %Y") ]
|
||||||
|
let lines += [ '' ]
|
||||||
|
let lines += [ 'hi clear' ]
|
||||||
|
let lines += [ 'if exists("syntax_on")' ]
|
||||||
|
let lines += [ ' syntax reset' ]
|
||||||
|
let lines += [ 'endif' ]
|
||||||
|
let lines += [ '' ]
|
||||||
|
let lines += [ 'let g:colors_name = ' . string(fnamemodify(file, ':t:r')) ]
|
||||||
|
let lines += [ '' ]
|
||||||
|
|
||||||
|
let lines += [ 'if 0' ]
|
||||||
|
for &t_Co in [ 256, 88 ]
|
||||||
|
let lines += [ 'elseif has("gui_running") || &t_Co == ' . &t_Co ]
|
||||||
|
for hlnum in sort(keys(s:highlights), "s:SortNormalFirst")
|
||||||
|
let hl = s:highlights[hlnum]
|
||||||
|
let line = ' highlight ' . hl.name
|
||||||
|
for type in [ 'term', 'cterm', 'gui' ]
|
||||||
|
let attrs = [ 'bold', 'italic', 'underline', 'undercurl' ]
|
||||||
|
call filter(attrs, 'hl.cterm[v:val] == 1')
|
||||||
|
let line .= ' ' . type . '=' . (empty(attrs) ? 'NONE' : join(attrs, ','))
|
||||||
|
if type != 'term'
|
||||||
|
let line .= ' ' . type . 'bg=' . (len(hl[type].bg) ? hl[type].bg : 'bg')
|
||||||
|
let line .= ' ' . type . 'fg=' . (len(hl[type].fg) ? hl[type].fg : 'fg')
|
||||||
|
if type == 'gui' && hl.gui.sp !~ '^\s*$'
|
||||||
|
let line .= ' ' . type . 'sp=' . hl[type].sp
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
let lines += [ line ]
|
||||||
|
endfor
|
||||||
|
endfor
|
||||||
|
let lines += [ 'endif' ]
|
||||||
|
call writefile(lines, file)
|
||||||
|
finally
|
||||||
|
let &t_Co = save_t_Co
|
||||||
|
endtry
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" {>1} Hooks
|
" {>1} Hooks
|
||||||
|
Loading…
Reference in New Issue
Block a user