From 1e74443b5adaf9a33f6db04a411b358262e90df5 Mon Sep 17 00:00:00 2001 From: Rane Brown Date: Fri, 12 Apr 2019 07:42:49 -0600 Subject: [PATCH] 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. --- autoload/vimwiki/base.vim | 6 +++--- autoload/vimwiki/tbl.vim | 4 ++-- autoload/vimwiki/u.vim | 25 +++++++++++++++++++++++++ autoload/vimwiki/vars.vim | 1 + doc/vimwiki.txt | 15 +++++++++++++++ plugin/vimwiki.vim | 6 +++--- 6 files changed, 49 insertions(+), 8 deletions(-) diff --git a/autoload/vimwiki/base.vim b/autoload/vimwiki/base.vim index b2c1bfc..43c851e 100644 --- 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 index 125eb8b..d5974aa 100644 --- 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 index c8f62ee..12d6a2d 100644 --- 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.. 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 index 0f83912..74e06ec 100644 --- 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 index 687c8f5..b8dc208 100644 --- 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 index ffe51b9..cda0186 100644 --- 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()