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>
This commit is contained in:
Phạm Bình An
2025-05-12 20:39:24 +02:00
committed by Christian Brabandt
parent 8d0e42b710
commit 13bea589a2
7 changed files with 48 additions and 33 deletions

View File

@ -210,6 +210,7 @@ function! tutor#TutorCmd(tutor_name)
call tutor#SetupVim()
exe "edit ".l:to_open
call tutor#EnableInteractive(v:true)
endfunction
function! tutor#TutorCmdComplete(lead,line,pos)
@ -217,3 +218,24 @@ function! tutor#TutorCmdComplete(lead,line,pos)
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

View File

@ -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 @@ call tutor#SetNormalMappings()
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

View File

@ -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>)

View File

@ -17,15 +17,8 @@ Table of contents:
## 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
~~~

View File

@ -245,6 +245,7 @@ NEW_TESTS = \
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 @@ NEW_TESTS_RES = \
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 \

View File

@ -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

View File

@ -704,6 +704,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1384,
/**/
1383,
/**/