Patch 8.2.4951
Problem: Smart indenting done when not enabled.
Solution: Check option values before setting can_si. (closes #10420)
Files: src/indent.c, src/proto/indent.pro, src/change.c, src/edit.c,
src/ops.c, src/testdir/test_smartindent.vim
*** ../vim-8.2.4950/src/indent.c 2022-05-09 20:09:19.286641426 +0100
--- src/indent.c 2022-05-14 11:50:09.925281315 +0100
***************
*** 1169,1174 ****
--- 1169,1190 ----
#ifdef FEAT_SMARTINDENT
/*
+ * Return TRUE if the conditions are OK for smart indenting.
+ */
+ int
+ may_do_si()
+ {
+ return curbuf->b_p_si
+ # ifdef FEAT_CINDENT
+ && !curbuf->b_p_cin
+ # endif
+ # ifdef FEAT_EVAL
+ && *curbuf->b_p_inde == NUL
+ # endif
+ && !p_paste;
+ }
+
+ /*
* Try to do some very smart auto-indenting.
* Used when inserting a "normal" character.
*/
***************
*** 1235,1241 ****
}
// set indent of '#' always to 0
! if (curwin->w_cursor.col > 0 && can_si && c == '#')
{
// remember current indent for next line
old_indent = get_indent();
--- 1251,1257 ----
}
// set indent of '#' always to 0
! if (curwin->w_cursor.col > 0 && can_si && c == '#' && inindent(0))
{
// remember current indent for next line
old_indent = get_indent();
*** ../vim-8.2.4950/src/proto/indent.pro 2019-12-12 11:55:25.000000000
+0000
--- src/proto/indent.pro 2022-05-14 11:23:36.658313138 +0100
***************
*** 23,28 ****
--- 23,29 ----
int inindent(int extra);
void op_reindent(oparg_T *oap, int (*how)(void));
int preprocs_left(void);
+ int may_do_si(void);
void ins_try_si(int c);
void change_indent(int type, int amount, int round, int replaced, int
call_changed_bytes);
int copy_indent(int size, char_u *src);
*** ../vim-8.2.4950/src/change.c 2022-05-12 18:45:14.778530646 +0100
--- src/change.c 2022-05-14 11:22:36.906358226 +0100
***************
*** 1392,1405 ****
int do_cindent;
#endif
#ifdef FEAT_SMARTINDENT
! int do_si = (!p_paste && curbuf->b_p_si
! # ifdef FEAT_CINDENT
! && !curbuf->b_p_cin
! # endif
! # ifdef FEAT_EVAL
! && *curbuf->b_p_inde == NUL
! # endif
! );
int no_si = FALSE; // reset did_si afterwards
int first_char = NUL; // init for GCC
#endif
--- 1392,1398 ----
int do_cindent;
#endif
#ifdef FEAT_SMARTINDENT
! int do_si = may_do_si();
int no_si = FALSE; // reset did_si afterwards
int first_char = NUL; // init for GCC
#endif
*** ../vim-8.2.4950/src/edit.c 2022-05-09 20:09:19.282641427 +0100
--- src/edit.c 2022-05-14 11:42:49.485313440 +0100
***************
*** 1295,1301 ****
#endif
compl_busy = FALSE;
#ifdef FEAT_SMARTINDENT
! can_si = TRUE; // allow smartindenting
#endif
break;
--- 1295,1301 ----
#endif
compl_busy = FALSE;
#ifdef FEAT_SMARTINDENT
! can_si = may_do_si(); // allow smartindenting
#endif
break;
*** ../vim-8.2.4950/src/ops.c 2022-05-13 21:56:24.589080012 +0100
--- src/ops.c 2022-05-14 11:30:25.565978793 +0100
***************
*** 1718,1729 ****
{
l = 0;
#ifdef FEAT_SMARTINDENT
! if (!p_paste && curbuf->b_p_si
! # ifdef FEAT_CINDENT
! && !curbuf->b_p_cin
! # endif
! )
! can_si = TRUE; // It's like opening a new line, do si
#endif
}
--- 1718,1724 ----
{
l = 0;
#ifdef FEAT_SMARTINDENT
! can_si = may_do_si(); // Like opening a new line, do smart indent
#endif
}
*** ../vim-8.2.4950/src/testdir/test_smartindent.vim 2021-06-16
14:53:13.072696639 +0100
--- src/testdir/test_smartindent.vim 2022-05-14 11:35:15.997724289 +0100
***************
*** 134,137 ****
--- 134,154 ----
bw!
endfunc
+ func Test_si_after_completion()
+ new
+ setlocal ai smartindent indentexpr=
+ call setline(1, 'foo foot')
+ call feedkeys("o f\<C-X>\<C-N>#", 'tx')
+ call assert_equal(' foo#', getline(2))
+ bwipe!
+ endfunc
+
+ func Test_no_si_after_completion()
+ new
+ call setline(1, 'foo foot')
+ call feedkeys("o f\<C-X>\<C-N>#", 'tx')
+ call assert_equal(' foo#', getline(2))
+ bwipe!
+ endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
*** ../vim-8.2.4950/src/version.c 2022-05-13 21:56:24.589080012 +0100
--- src/version.c 2022-05-14 11:36:29.477658565 +0100
***************
*** 748,749 ****
--- 748,751 ----
{ /* Add new patch number below this line */
+ /**/
+ 4951,
/**/
--
hundred-and-one symptoms of being an internet addict:
191. You rate eating establishments not by the quality of the food,
but by the availability of electrical outlets for your PowerBook.
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// \\\
\\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/vim_dev/20220514105255.CF2A01C076B%40moolenaar.net.