From bd863e7d4570bea38e9094c70972b6daf496f59a Mon Sep 17 00:00:00 2001 From: Jeet Sukumaran Date: Fri, 24 Sep 2021 22:50:19 -0700 Subject: [PATCH] :AnyFoldActivate command takes bang attribute, allowing for (re)activation. Sometimes another foldexpr or related mappings might be useful. It would be nice to restore AnyFold after this. Previously, the double initialization guard in the #init function prevented in. This patch allows the command to to take a bang (``AnyFoldActivate!``) which reloads the foldexpr and remaps keys etc. --- autoload/anyfold.vim | 54 ++++++++++++++++++++++++++------------------ plugin/anyfold.vim | 5 ++-- 2 files changed, 35 insertions(+), 24 deletions(-) diff --git a/autoload/anyfold.vim b/autoload/anyfold.vim index bf0022c..3cea666 100644 --- a/autoload/anyfold.vim +++ b/autoload/anyfold.vim @@ -1,33 +1,41 @@ "----------------------------------------------------------------------------/ " Initialization: Activation of requested features "----------------------------------------------------------------------------/ -function! anyfold#init(force) abort +function! anyfold#init(force, bang) abort + let anyfold_reinitializing = 0 + if a:bang == 1 + " skip double initialization guards + if exists("b:anyfold_initialised") + let anyfold_reinitializing = 1 + endif + let b:anyfold_initialised = 1 + else + if exists("g:anyfold_activate") + let b:anyfold_activate = g:anyfold_activate + endif - if exists("g:anyfold_activate") - let b:anyfold_activate = g:anyfold_activate - endif + if !a:force + if !exists("b:anyfold_activate") + return + elseif !b:anyfold_activate + return + endif + endif - if !a:force - if !exists("b:anyfold_activate") - return - elseif !b:anyfold_activate + " make sure initialisation only happens once + if exists("b:anyfold_initialised") return + else + let b:anyfold_initialised = 1 endif - endif - " make sure initialisation only happens once - if exists("b:anyfold_initialised") - return - else - let b:anyfold_initialised = 1 - endif - - if exists("b:anyfold_activate") - echoerr "anyfold: 'let anyfold_activate=1' is deprecated, replace by command ':AnyFoldActivate' (see ':h AnyFoldActivate')" - endif + if exists("b:anyfold_activate") + echoerr "anyfold: 'let anyfold_activate=1' is deprecated, replace by command ':AnyFoldActivate' (see ':h AnyFoldActivate')" + endif - if exists("b:AnyFoldActivate") || exists("g:AnyFoldActivate") - echoerr "anyfold: 'let AnyFoldActivate=1' does not work, ':AnyFoldActivate' is a command! (see ':h AnyFoldActivate')" + if exists("b:AnyFoldActivate") || exists("g:AnyFoldActivate") + echoerr "anyfold: 'let AnyFoldActivate=1' does not work, ':AnyFoldActivate' is a command! (see ':h AnyFoldActivate')" + endif endif if s:AnyfoldDisable() @@ -67,7 +75,9 @@ function! anyfold#init(force) abort endif " calculate indents for first time - call s:InitIndentList() + if !anyfold_reinitializing + call s:InitIndentList() + endif " folds are always updated when buffer has changed autocmd TextChanged,InsertLeave call s:ReloadFolds() diff --git a/plugin/anyfold.vim b/plugin/anyfold.vim index ce2d072..075d5e3 100644 --- a/plugin/anyfold.vim +++ b/plugin/anyfold.vim @@ -3,8 +3,9 @@ if exists("b:loaded_anyfold") endif let b:loaded_anyfold = 1 -command! AnyFoldActivate call anyfold#init(1) +command! -bang AnyFoldActivate call anyfold#init(1, '' == '!') " deprecated initialization using anyfold_activate variable " still works but echoes a warning -au BufNewFile,BufRead * call anyfold#init(0) +au BufNewFile,BufRead * call anyfold#init(0, "n/a") +