vimwiki

Personal wiki for vim
git clone https://github.com/vimwiki/vimwiki.git
Log | Files | Refs | README | LICENSE

commit a7f34cd8cfd7e3ab8f1ef3824f5d1233e92f91c6
parent dbbadc8035a3fb3e3b51e8d646fde32fa0aa1ebb
Author: mtourneb <martin.tourneboeuf@alma.cl>
Date:   Thu,  3 Sep 2020 23:43:56 -0400

Feature: Add command VimwikiColorize (Issue #990)

Only colorize the current line to start

Diffstat:
Mautoload/vimwiki/base.vim | 43+++++++++++++++++++++++++++++++++++++++++++
Mautoload/vimwiki/vars.vim | 24++++++++++++++++++++++++
Mdoc/vimwiki.txt | 30++++++++++++++++++++++++++++++
Mftplugin/vimwiki.vim | 3++-
Msyntax/vimwiki.vim | 29+++++++++++++++++++++++++++++
Mtest/run_tests.sh | 2--
6 files changed, 128 insertions(+), 3 deletions(-)

diff --git a/autoload/vimwiki/base.vim b/autoload/vimwiki/base.vim @@ -2902,6 +2902,49 @@ function! vimwiki#base#linkify() abort endfunction +function! vimwiki#base#complete_colorize(ArgLead, CmdLine, CursorPos) abort + " We can safely ignore args if we use -custom=complete option, Vim engine + " will do the job of filtering + let colorlist = keys(vimwiki#vars#get_wikilocal('color_dic')) + return join(colorlist, "\n") +endfunction + +function! vimwiki#base#colorize(...) abort + " TODO Must be coherent with color_tag_template + " -- Just removeing spaces, \/ -> /, replacing COLORFG will do it + let key = a:0 ? a:1 : 'default' + let color_dic = vimwiki#vars#get_wikilocal('color_dic') + + " Guard: color key nust exist + if !has_key(color_dic, key) + call vimwiki#u#error('color_dic variable has no key ''' . key . '''') + return + endif + + " Get content + let content = getline('.') + " TODO save position for visual selection: see u#get_selection + + " Surround + " -- pre + let [fg, bg] = color_dic[key] + let pre = '<span style="' + if fg !=# '' + let pre .= 'color:' . fg . ';' + endif + if bg !=# '' + let pre .= 'background:' . bg . ';' + endif + let pre .= '">' + " -- post + let post = '</span>' + " -- concat + let content = pre . content . post + + " Set buffer content + call setline('.', content) +endfunction + " ------------------------------------------------------------------------- " Load syntax-specific Wiki functionality for s:syn in s:vimwiki_get_known_syntaxes() diff --git a/autoload/vimwiki/vars.vim b/autoload/vimwiki/vars.vim @@ -451,6 +451,13 @@ endfunction " Get default wikilocal values " Please: keep alphabetical sort function! s:get_default_wikilocal() abort + " Build color_tag_template regular expression + " Must be coherent with VimwikiColorize + let fg = 'color\s*:\s*__COLORFG__\s*;\s*' + let bg = 'background\s*:\s*__COLORBG__\s*;\s*' + let color_tag_rx = '<span \s*style\s*=\s*"\s*\(' + \ . fg . bg . '\|' . fg . '\|' . bg + \ . '\)"\s*>__CONTENT__<\/span>' return { \ 'auto_diary_index': {'type': type(0), 'default': 0, 'min': 0, 'max': 1}, \ 'auto_export': {'type': type(0), 'default': 0, 'min': 0, 'max': 1}, @@ -460,6 +467,23 @@ function! s:get_default_wikilocal() abort \ 'auto_toc': {'type': type(0), 'default': 0, 'min': 0, 'max': 1}, \ 'automatic_nested_syntaxes': {'type': type(0), 'default': 1, 'min': 0, 'max': 1}, \ 'base_url': {'type': type(''), 'default': '', 'min_length': 1}, + \ 'color_dic': {'type': type({}), 'default': { + \ 'default': ['', '#d79921'], + \ 'red': ['#cc241d', ''], + \ 'bred': ['', '#cc241d'], + \ 'green': ['#98971a', ''], + \ 'bgreen': ['', '#98971a'], + \ 'yellow': ['#d79921', ''], + \ 'byellow': ['', '#d79921'], + \ 'blue': ['#458588', ''], + \ 'bblue': ['', '#458588'], + \ 'purple': ['#b16286', ''], + \ 'bpurple': ['', '#b16286'], + \ 'orange': ['#d65d0e', ''], + \ 'borange': ['', '#d65d0e'], + \ 'gray': ['#a89984', ''], + \ 'bgray': ['', '#a89984']}}, + \ 'color_tag_template': {'type': type({}), 'default': color_tag_rx}, \ 'commentstring': {'type': type(''), 'default': '%%%s'}, \ 'css_name': {'type': type(''), 'default': 'style.css', 'min_length': 1}, \ 'custom_wiki2html': {'type': type(''), 'default': ''}, diff --git a/doc/vimwiki.txt b/doc/vimwiki.txt @@ -957,6 +957,15 @@ Vimwiki file. are specified, outputs all tags. To make this command work properly, make sure the tags have been built (see |vimwiki-build-tags|). +*:VimwikiColorize* red + Colorize current line with the color given in argument. The possible + colors are configured by |vimwiki-option-color_dic| and the format of the + surrounding color tags by |vimwiki-option-color_tag_template| + TODO + Currently only the current line is colorized, a support for the selection + will come. Maybe some mapping and color completion in popup (See + changelog + ============================================================================== 5. Wiki syntax *vimwiki-syntax* @@ -2818,6 +2827,25 @@ Value Description~ Default: 0 +------------------------------------------------------------------------------ +*vimwiki-option-color_dic* + +Dictionary containing the possible html colors for |:VimwikiColorize| the +keys are the color names used as argument, the values are a list [foreground, +backgroud] of the color. For example: + +{'red': ['#cc241d', ''], 'bred': ['', '#cc241d']} + +Provides two colors to |:VimwikiColorize|: 'red' => red foreground and 'bred' +=> red background. + + +------------------------------------------------------------------------------ +*vimwiki-option-color_tag_template* + +Not supposed to be edited already: a regex with __COLORFG__, __COLORBG__ and +__CONTENT__ placeholders to surround the content with a tag to define its +color. (See autoload/vimwiki/vars.vim) ------------------------------------------------------------------------------ 12.4 Syntax Options *vimwiki-syntax-options* @@ -3812,6 +3840,8 @@ http://code.google.com/p/vimwiki/issues/list. They may be accessible from https://github.com/vimwiki-backup/vimwiki/issues. New:~ + * Issue #990: Feature request: highlight multiline selection + Add :VimwikiColorize with only support to clorize the current line * PR #919: Fix duplicate helptag * Feature: PR #988: Command VimwikiVar to list, get and set variables * Feature: #837 extract web page <title> from URL under cursor and create diff --git a/ftplugin/vimwiki.vim b/ftplugin/vimwiki.vim @@ -371,6 +371,8 @@ command! -buffer -nargs=* -complete=custom,vimwiki#tags#complete_tags command! -buffer VimwikiPasteUrl call vimwiki#html#PasteUrl(expand('%:p')) command! -buffer VimwikiCatUrl call vimwiki#html#CatUrl(expand('%:p')) +command! -buffer -nargs=* -complete=custom,vimwiki#base#complete_colorize + \ VimwikiColorize call vimwiki#base#colorize(<f-args>) " ------------------------------------------------ " Keybindings @@ -716,7 +718,6 @@ if str2nr(vimwiki#vars#get_global('key_mappings').headers) call vimwiki#u#map_key('n', '[=', '<Plug>VimwikiGoToPrevSiblingHeader') endif - if vimwiki#vars#get_wikilocal('auto_export') " Automatically generate HTML on page write. augroup vimwiki diff --git a/syntax/vimwiki.vim b/syntax/vimwiki.vim @@ -295,6 +295,35 @@ if vimwiki#vars#get_global('valid_html_tags') !=? '' call vimwiki#u#hi_typeface(html_typeface) endif +" Html Color: <span style="color:#FF0000";>Red paragraph</span> +" -- See: h color_dic +let color_dic = vimwiki#vars#get_wikilocal('color_dic') +let color_tag = vimwiki#vars#get_wikilocal('color_tag_template') +for [color_key, color_value] in items(color_dic) + let [fg, bg] = color_value + let delimiter = color_tag + let delimiter = substitute(delimiter, '__COLORFG__', fg, 'g') + let delimiter = substitute(delimiter, '__COLORBG__', bg, 'g') + " The user input has been already checked + let [pre_region, post_region] = split(delimiter, '__CONTENT__') + let cmd = 'syntax region Vimwiki' . color_key . ' matchgroup=VimwikiDelimiterColor' + \ . ' start=/' . pre_region . '/' + \ . ' end=/' . post_region . '/' + \ . ' ' . b:vimwiki_syntax_concealends + execute cmd + + " Build hightlight command + let cmd = 'hi Vimwiki' . color_key + if fg !=# '' + let cmd .= ' guifg=' . fg + endif + if bg !=# '' + let cmd .= ' guibg=' . bg + endif + execute cmd +endfor + + " Comment: home made execute 'syntax match VimwikiComment /'.vimwiki#vars#get_syntaxlocal('comment_regex'). \ '/ contains=@Spell,VimwikiTodo' diff --git a/test/run_tests.sh b/test/run_tests.sh @@ -201,7 +201,6 @@ getVers() { } vader_filter() { - echo 'Tin vader filter called' # Filter Vader Stdout local err=0 # Keep indentation @@ -223,7 +222,6 @@ vader_filter() { if [ "$success" -lt "$total" ]; then err=1 fi - echo "Tin got success $success and total $total" echo "$REPLY" elif [[ "$verbose" != 0 ]]; then # just print everything