@@ -1691,17 +1691,28 @@ ins_redraw(
16911691#ifdef FEAT_AUTOCMD
16921692 /* Trigger TextChangedI if b_changedtick differs. */
16931693 if (ready && has_textchangedI ()
1694- && last_changedtick != CHANGEDTICK (curbuf )
1694+ && curbuf -> b_last_changedtick != CHANGEDTICK (curbuf )
16951695# ifdef FEAT_INS_EXPAND
16961696 && !pum_visible ()
16971697# endif
16981698 )
16991699 {
1700- if (last_changedtick_buf == curbuf )
1701- apply_autocmds (EVENT_TEXTCHANGEDI , NULL , NULL , FALSE, curbuf );
1702- last_changedtick_buf = curbuf ;
1703- last_changedtick = CHANGEDTICK (curbuf );
1700+ apply_autocmds (EVENT_TEXTCHANGEDI , NULL , NULL , FALSE, curbuf );
1701+ curbuf -> b_last_changedtick = CHANGEDTICK (curbuf );
17041702 }
1703+
1704+ # ifdef FEAT_INS_EXPAND
1705+ /* Trigger TextChangedP if b_changedtick differs. When the popupmenu closes
1706+ * TextChangedI will need to trigger for backwards compatibility, thus use
1707+ * different b_last_changedtick* variables. */
1708+ if (ready && has_textchangedP ()
1709+ && curbuf -> b_last_changedtick_pum != CHANGEDTICK (curbuf )
1710+ && pum_visible ())
1711+ {
1712+ apply_autocmds (EVENT_TEXTCHANGEDP , NULL , NULL , FALSE, curbuf );
1713+ curbuf -> b_last_changedtick_pum = CHANGEDTICK (curbuf );
1714+ }
1715+ # endif
17051716#endif
17061717
17071718 if (must_redraw )
@@ -2937,7 +2948,7 @@ ins_compl_del_pum(void)
29372948 if (compl_match_array != NULL )
29382949 {
29392950 pum_undisplay ();
2940- vim_clear (( void * * ) & compl_match_array );
2951+ VIM_CLEAR ( compl_match_array );
29412952 }
29422953}
29432954
@@ -3439,8 +3450,8 @@ ins_compl_free(void)
34393450 compl_T * match ;
34403451 int i ;
34413452
3442- vim_clear (( void * * ) & compl_pattern );
3443- vim_clear (( void * * ) & compl_leader );
3453+ VIM_CLEAR ( compl_pattern );
3454+ VIM_CLEAR ( compl_leader );
34443455
34453456 if (compl_first_match == NULL )
34463457 return ;
@@ -3472,10 +3483,10 @@ ins_compl_clear(void)
34723483 compl_cont_status = 0 ;
34733484 compl_started = FALSE;
34743485 compl_matches = 0 ;
3475- vim_clear (( void * * ) & compl_pattern );
3476- vim_clear (( void * * ) & compl_leader );
3486+ VIM_CLEAR ( compl_pattern );
3487+ VIM_CLEAR ( compl_leader );
34773488 edit_submode_extra = NULL ;
3478- vim_clear (( void * * ) & compl_orig_text );
3489+ VIM_CLEAR ( compl_orig_text );
34793490 compl_enter_selects = FALSE;
34803491 /* clear v:completed_item */
34813492 set_vim_var_dict (VV_COMPLETED_ITEM , dict_alloc_lock (VAR_FIXED ));
@@ -5587,8 +5598,8 @@ ins_complete(int c, int enable_pum)
55875598 if (compl_orig_text == NULL || ins_compl_add (compl_orig_text ,
55885599 -1 , p_ic , NULL , NULL , 0 , ORIGINAL_TEXT , FALSE) != OK )
55895600 {
5590- vim_clear (( void * * ) & compl_pattern );
5591- vim_clear (( void * * ) & compl_orig_text );
5601+ VIM_CLEAR ( compl_pattern );
5602+ VIM_CLEAR ( compl_orig_text );
55925603 return FAIL ;
55935604 }
55945605
@@ -7217,9 +7228,9 @@ set_last_insert(int c)
72177228 void
72187229free_last_insert (void )
72197230{
7220- vim_clear (( void * * ) & last_insert );
7231+ VIM_CLEAR ( last_insert );
72217232# ifdef FEAT_INS_EXPAND
7222- vim_clear (( void * * ) & compl_orig_text );
7233+ VIM_CLEAR ( compl_orig_text );
72237234# endif
72247235}
72257236#endif
@@ -7847,7 +7858,7 @@ mb_replace_pop_ins(int cc)
78477858 static void
78487859replace_flush (void )
78497860{
7850- vim_clear (( void * * ) & replace_stack );
7861+ VIM_CLEAR ( replace_stack );
78517862 replace_stack_len = 0 ;
78527863 replace_stack_nr = 0 ;
78537864}
0 commit comments