patch 9.1.1384: still some problem with the new tutors filetype plugin
Problem: still some problem with the new tutors filetype plugin
Solution: refactor code to enable/disable tutor mode into
tutor#EnableInteractive() function, include a test
(Phạm Bình An)
I find it annoying that Tutor's interactive mode is always on (or debug
mode is off) even when I open a tutor file with :edit command.
I think it makes more sense to make this "interactive mode":
- Always on when it is opened with :Tutor command
- Off otherwise
For more references, see `:help` feature, it is a much better than
:Tutor, since I don't have to run `:let g:help_debug = 1` just to be able
to edit and save a help file
Therefore, I remove `g:tutor_debug`
closes: #17299
Signed-off-by: Phạm Bình An <phambinhanctb2004@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/runtime/autoload/tutor.vim b/runtime/autoload/tutor.vim
index 3265fdd..6ab7960 100644
--- a/runtime/autoload/tutor.vim
+++ b/runtime/autoload/tutor.vim
@@ -210,6 +210,7 @@
call tutor#SetupVim()
exe "edit ".l:to_open
+ call tutor#EnableInteractive(v:true)
endfunction
function! tutor#TutorCmdComplete(lead,line,pos)
@@ -217,3 +218,24 @@
let l:names = uniq(sort(map(l:tutors, 'fnamemodify(v:val, ":t:r")'), 's:Sort'))
return join(l:names, "\n")
endfunction
+
+" Enables/disables interactive mode.
+function! tutor#EnableInteractive(enable)
+ let enable = a:enable
+ if enable
+ setlocal buftype=nofile
+ setlocal concealcursor+=inv
+ setlocal conceallevel=2
+ call tutor#ApplyMarks()
+ augroup tutor_interactive
+ autocmd! TextChanged,TextChangedI <buffer> call tutor#ApplyMarksOnChanged()
+ augroup END
+ else
+ setlocal buftype<
+ setlocal concealcursor<
+ setlocal conceallevel<
+ if exists('#tutor_interactive')
+ autocmd! tutor_interactive * <buffer>
+ endif
+ endif
+endfunction
diff --git a/runtime/ftplugin/tutor.vim b/runtime/ftplugin/tutor.vim
index 5660cbf..92bca8d 100644
--- a/runtime/ftplugin/tutor.vim
+++ b/runtime/ftplugin/tutor.vim
@@ -6,21 +6,13 @@
" Original Author: Felipe Morales <hel.sheep@gmail.com>
" Last Change:
" 2025 May 10 set b:undo_ftplugin
+" 2025 May 12 update b:undo_ftplugin
" Base: {{{1
call tutor#SetupVim()
" Buffer Settings: {{{1
setlocal noreadonly
-if !exists('g:tutor_debug') || g:tutor_debug == 0
- setlocal buftype=nofile
- setlocal concealcursor+=inv
- setlocal conceallevel=2
-else
- setlocal buftype=
- setlocal concealcursor&
- setlocal conceallevel=0
-endif
setlocal noundofile
setlocal keywordprg=:help
@@ -46,14 +38,7 @@
sign define tutorok text=✓ texthl=tutorOK
sign define tutorbad text=✗ texthl=tutorX
-if !exists('g:tutor_debug') || g:tutor_debug == 0
- call tutor#ApplyMarks()
- autocmd! TextChanged,TextChangedI <buffer> call tutor#ApplyMarksOnChanged()
-endif
-
-let b:undo_ftplugin = 'unlet! g:tutor_debug |'
-let b:undo_ftplugin ..= 'setl concealcursor< conceallevel< |'
-let b:undo_ftplugin ..= 'setl foldmethod< foldexpr< foldlevel< |'
-let b:undo_ftplugin ..= 'setl buftype< undofile< keywordprg< iskeyword< |'
+let b:undo_ftplugin = "setl foldmethod< foldexpr< foldlevel< undofile< keywordprg< iskeyword< |"
+ \ . "call tutor#EnableInteractive(v:false) |"
" vim: fdm=marker
diff --git a/runtime/plugin/tutor.vim b/runtime/plugin/tutor.vim
index b79ba93..495f317 100644
--- a/runtime/plugin/tutor.vim
+++ b/runtime/plugin/tutor.vim
@@ -2,16 +2,11 @@
" Maintainer: This runtime file is looking for a new maintainer.
" Contributors: Phạm Bình An <phambinhanctb2004@gmail.com>
" Original Author: Felipe Morales <hel.sheep@gmail.com>
-" Date: 2025 May 10
+" Date: 2025 May 12
if exists('g:loaded_tutor_mode_plugin') || &compatible
finish
endif
let g:loaded_tutor_mode_plugin = 1
-" Define this variable so that users get cmdline completion.
-if !exists('g:tutor_debug')
- let g:tutor_debug = 0
-endif
-
command! -nargs=? -complete=custom,tutor#TutorCmdComplete Tutor call tutor#TutorCmd(<q-args>)
diff --git a/runtime/tutor/tutor.tutor b/runtime/tutor/tutor.tutor
index b46fcc4..cdef5d5 100644
--- a/runtime/tutor/tutor.tutor
+++ b/runtime/tutor/tutor.tutor
@@ -17,15 +17,8 @@
## SETTING UP *setting-up*
-First, you'll need to enable "debug" mode
-~~~ cmd
- :let g:tutor_debug = 1
-~~~
-This will allow saving changes to the tutor files and will disable conceals, so
-you can more easily check your changes.
-
-After this, create a new .tutor file (we will be practicing on this very file, so you
-don't need to do this now):
+Create a new .tutor file (we will be practicing on this very file, so you don't
+need to do this now):
~~~ cmd
:e new-tutorial.tutor
~~~
diff --git a/src/testdir/Make_all.mak b/src/testdir/Make_all.mak
index de4e30f..88bf5c3 100644
--- a/src/testdir/Make_all.mak
+++ b/src/testdir/Make_all.mak
@@ -245,6 +245,7 @@
test_plugin_matchparen \
test_plugin_termdebug \
test_plugin_tohtml \
+ test_plugin_tutor \
test_plugin_zip \
test_plus_arg_edit \
test_popup \
@@ -511,6 +512,7 @@
test_plugin_matchparen.res \
test_plugin_termdebug.res \
test_plugin_tohtml.res \
+ test_plugin_tutor.res \
test_plugin_zip.res \
test_plus_arg_edit.res \
test_popup.res \
diff --git a/src/testdir/test_plugin_tutor.vim b/src/testdir/test_plugin_tutor.vim
new file mode 100644
index 0000000..61cea3f
--- /dev/null
+++ b/src/testdir/test_plugin_tutor.vim
@@ -0,0 +1,16 @@
+" Test for the new-tutor plugin
+
+func SetUp()
+ set nocompatible
+ runtime plugin/tutor.vim
+endfunc
+
+func Test_auto_enable_interactive()
+ Tutor
+ call assert_equal('nofile', &buftype)
+ call assert_match('tutor#EnableInteractive', b:undo_ftplugin)
+
+ edit Xtutor/Xtest.tutor
+ call assert_true(empty(&buftype))
+ call assert_match('tutor#EnableInteractive', b:undo_ftplugin)
+endfunc
diff --git a/src/version.c b/src/version.c
index 4a9ad83..55860d2 100644
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1384,
+/**/
1383,
/**/
1382,