vimwiki

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

commit 1e74443b5adaf9a33f6db04a411b358262e90df5
parent ae67790ad5fde202cd9f5c6b3eb53d63169c0938
Author: Rane Brown <rane.brown@gmail.com>
Date:   Fri, 12 Apr 2019 07:42:49 -0600

Allow additional filetypes to be registered to vimwiki files.

This options allow third party plugins to register and enable additonal
functionality by setting the filetype to vimwiki.other_ft.other_ft2 etc.
This option should be used with care since vimwiki functionality can be
overwritten by other plugins. See Issue #461 for an example use case.

Diffstat:
Mautoload/vimwiki/base.vim | 6+++---
Mautoload/vimwiki/tbl.vim | 4++--
Mautoload/vimwiki/u.vim | 25+++++++++++++++++++++++++
Mautoload/vimwiki/vars.vim | 1+
Mdoc/vimwiki.txt | 15+++++++++++++++
Mplugin/vimwiki.vim | 6+++---
6 files changed, 49 insertions(+), 8 deletions(-)

diff --git a/autoload/vimwiki/base.vim b/autoload/vimwiki/base.vim @@ -309,7 +309,7 @@ function! vimwiki#base#open_link(cmd, link, ...) if update_prev_link if a:0 let vimwiki_prev_link = [a:1, []] - elseif &ft ==# 'vimwiki' + elseif vimwiki#u#ft_is_vw() let vimwiki_prev_link = [vimwiki#path#current_wiki_file(), getpos('.')] endif endif @@ -811,8 +811,8 @@ function! vimwiki#base#edit_file(command, filename, anchor, ...) " Make sure no other plugin takes ownership over the new file. Vimwiki " rules them all! Well, except for directories, which may be opened with " Netrw - if &filetype != 'vimwiki' && fname !~ '\m/$' - setfiletype vimwiki + if !vimwiki#u#ft_is_vw() && fname !~? '\m/$' + call vimwiki#u#ft_set() endif endif if a:anchor != '' diff --git a/autoload/vimwiki/tbl.vim b/autoload/vimwiki/tbl.vim @@ -676,7 +676,7 @@ endfunction function! vimwiki#tbl#format(lnum, ...) - if !(&filetype ==? 'vimwiki') + if !vimwiki#u#ft_is_vw() return endif let line = getline(a:lnum) @@ -759,7 +759,7 @@ endfunction function! vimwiki#tbl#reset_tw(lnum) - if !(&filetype ==? 'vimwiki') + if !vimwiki#u#ft_is_vw() return endif let line = getline(a:lnum) diff --git a/autoload/vimwiki/u.vim b/autoload/vimwiki/u.vim @@ -70,3 +70,28 @@ else endfunc endif + +" Sets the filetype to vimwiki +" If g:vimwiki_filetypes variable is set +" the filetype will be vimwiki.<ft1>.<ft2> etc. +function! vimwiki#u#ft_set() + let ftypelist = vimwiki#vars#get_global('filetypes') + let ftype = 'vimwiki' + for ftypeadd in ftypelist + let ftype = ftype . '.' . ftypeadd + endfor + let &filetype = ftype +endfunction + + +" Returns: 1 if filetype is vimwiki, 0 else +" If multiple fileytpes are in use 1 is returned only if the +" first ft is vimwiki which should always be the case unless +" the user manually changes it to something else +function! vimwiki#u#ft_is_vw() + if split(&filetype, '\.')[0] ==? 'vimwiki' + return 1 + else + return 0 + endif +endfunction diff --git a/autoload/vimwiki/vars.vim b/autoload/vimwiki/vars.vim @@ -160,6 +160,7 @@ function! s:read_global_settings_from_user() \ 'folding': {'type': type(''), 'default': '', 'possible_values': ['', 'expr', 'syntax', \ 'list', 'custom', ':quick', 'expr:quick', 'syntax:quick', 'list:quick', \ 'custom:quick']}, + \ 'filetypes': {'type': type([]), 'default': []}, \ 'global_ext': {'type': type(0), 'default': 1, 'min': 0, 'max': 1}, \ 'hl_cb_checked': {'type': type(0), 'default': 0, 'min': 0, 'max': 2}, \ 'hl_headers': {'type': type(0), 'default': 0, 'min': 0, 'max': 1}, diff --git a/doc/vimwiki.txt b/doc/vimwiki.txt @@ -3161,6 +3161,21 @@ values are from 0 to 2. The default is 1. +------------------------------------------------------------------------------ +*g:vimwiki_filetypes* + +A list of additional fileypes that should be registered to vimwiki files: > + + let g:vimwiki_filetypes = ['markdown', 'pandoc'] + +Would result in the filetype being set to `vimwiki.markdown.pandoc`. This can +be used to enable third party plugins such as custom folding. WARNING: this +option can allow other plugins to overwrite vimwiki settings and operation so +take care when using it. Any plugin that uses a set filetype will be enabled. + +The default is `[ ]` + + ============================================================================== 13. Getting help *vimwiki-help* diff --git a/plugin/vimwiki.vim b/plugin/vimwiki.vim @@ -89,7 +89,7 @@ function! s:setup_new_wiki_buffer() " this makes that ftplugin/vimwiki.vim and afterwards syntax/vimwiki.vim are " sourced - setfiletype vimwiki + call vimwiki#u#ft_set() endfunction @@ -102,8 +102,8 @@ function! s:setup_buffer_enter() return endif - if &filetype != 'vimwiki' - setfiletype vimwiki + if !vimwiki#u#ft_is_vw() + call vimwiki#u#ft_set() endif call s:set_global_options()