forked from aniani/vim
updated for version 7.3.867
Problem: Matchparen does not update match when using auto-indenting. (Marc Aldorasi) Solution: Add the TextChanged and TextChangedI autocommand events.
This commit is contained in:
@@ -14,6 +14,9 @@ let g:loaded_matchparen = 1
|
|||||||
augroup matchparen
|
augroup matchparen
|
||||||
" Replace all matchparen autocommands
|
" Replace all matchparen autocommands
|
||||||
autocmd! CursorMoved,CursorMovedI,WinEnter * call s:Highlight_Matching_Pair()
|
autocmd! CursorMoved,CursorMovedI,WinEnter * call s:Highlight_Matching_Pair()
|
||||||
|
if exists('##TextChanged')
|
||||||
|
autocmd! TextChanged,TextChangedI * call s:Highlight_Matching_Pair()
|
||||||
|
endif
|
||||||
augroup END
|
augroup END
|
||||||
|
|
||||||
" Skip the rest if it was already done.
|
" Skip the rest if it was already done.
|
||||||
|
15
src/edit.c
15
src/edit.c
@@ -1592,6 +1592,21 @@ ins_redraw(ready)
|
|||||||
# endif
|
# endif
|
||||||
last_cursormoved = curwin->w_cursor;
|
last_cursormoved = curwin->w_cursor;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef FEAT_AUTOCMD
|
||||||
|
/* Trigger TextChangedI if b_changedtick differs. */
|
||||||
|
if (!ready && has_textchangedI()
|
||||||
|
&& last_changedtick != curbuf->b_changedtick
|
||||||
|
# ifdef FEAT_INS_EXPAND
|
||||||
|
&& !pum_visible()
|
||||||
|
# endif
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (last_changedtick_buf == curbuf)
|
||||||
|
apply_autocmds(EVENT_TEXTCHANGEDI, NULL, NULL, FALSE, curbuf);
|
||||||
|
last_changedtick_buf = curbuf;
|
||||||
|
last_changedtick = curbuf->b_changedtick;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
if (must_redraw)
|
if (must_redraw)
|
||||||
update_screen(0);
|
update_screen(0);
|
||||||
|
20
src/fileio.c
20
src/fileio.c
@@ -7713,6 +7713,8 @@ static struct event_name
|
|||||||
{"TabLeave", EVENT_TABLEAVE},
|
{"TabLeave", EVENT_TABLEAVE},
|
||||||
{"TermChanged", EVENT_TERMCHANGED},
|
{"TermChanged", EVENT_TERMCHANGED},
|
||||||
{"TermResponse", EVENT_TERMRESPONSE},
|
{"TermResponse", EVENT_TERMRESPONSE},
|
||||||
|
{"TextChanged", EVENT_TEXTCHANGED},
|
||||||
|
{"TextChangedI", EVENT_TEXTCHANGEDI},
|
||||||
{"User", EVENT_USER},
|
{"User", EVENT_USER},
|
||||||
{"VimEnter", EVENT_VIMENTER},
|
{"VimEnter", EVENT_VIMENTER},
|
||||||
{"VimLeave", EVENT_VIMLEAVE},
|
{"VimLeave", EVENT_VIMLEAVE},
|
||||||
@@ -9137,6 +9139,24 @@ has_cursormovedI()
|
|||||||
return (first_autopat[(int)EVENT_CURSORMOVEDI] != NULL);
|
return (first_autopat[(int)EVENT_CURSORMOVEDI] != NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return TRUE when there is a TextChanged autocommand defined.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
has_textchanged()
|
||||||
|
{
|
||||||
|
return (first_autopat[(int)EVENT_TEXTCHANGED] != NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return TRUE when there is a TextChangedI autocommand defined.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
has_textchangedI()
|
||||||
|
{
|
||||||
|
return (first_autopat[(int)EVENT_TEXTCHANGEDI] != NULL);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return TRUE when there is an InsertCharPre autocommand defined.
|
* Return TRUE when there is an InsertCharPre autocommand defined.
|
||||||
*/
|
*/
|
||||||
|
@@ -1057,11 +1057,13 @@ EXTERN int autocmd_fname_full; /* autocmd_fname is full path */
|
|||||||
EXTERN int autocmd_bufnr INIT(= 0); /* fnum for <abuf> on cmdline */
|
EXTERN int autocmd_bufnr INIT(= 0); /* fnum for <abuf> on cmdline */
|
||||||
EXTERN char_u *autocmd_match INIT(= NULL); /* name for <amatch> on cmdline */
|
EXTERN char_u *autocmd_match INIT(= NULL); /* name for <amatch> on cmdline */
|
||||||
EXTERN int did_cursorhold INIT(= FALSE); /* set when CursorHold t'gerd */
|
EXTERN int did_cursorhold INIT(= FALSE); /* set when CursorHold t'gerd */
|
||||||
EXTERN pos_T last_cursormoved /* for CursorMoved event */
|
EXTERN pos_T last_cursormoved /* for CursorMoved event */
|
||||||
# ifdef DO_INIT
|
# ifdef DO_INIT
|
||||||
= INIT_POS_T(0, 0, 0)
|
= INIT_POS_T(0, 0, 0)
|
||||||
# endif
|
# endif
|
||||||
;
|
;
|
||||||
|
EXTERN int last_changedtick INIT(= 0); /* for TextChanged event */
|
||||||
|
EXTERN buf_T *last_changedtick_buf INIT(= NULL);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef FEAT_WINDOWS
|
#ifdef FEAT_WINDOWS
|
||||||
|
13
src/main.c
13
src/main.c
@@ -1168,6 +1168,19 @@ main_loop(cmdwin, noexmode)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef FEAT_AUTOCMD
|
||||||
|
/* Trigger TextChanged if b_changedtick differs. */
|
||||||
|
if (!finish_op && has_textchanged()
|
||||||
|
&& last_changedtick != curbuf->b_changedtick)
|
||||||
|
{
|
||||||
|
if (last_changedtick_buf == curbuf)
|
||||||
|
apply_autocmds(EVENT_TEXTCHANGED, NULL, NULL,
|
||||||
|
FALSE, curbuf);
|
||||||
|
last_changedtick_buf = curbuf;
|
||||||
|
last_changedtick = curbuf->b_changedtick;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(FEAT_DIFF) && defined(FEAT_SCROLLBIND)
|
#if defined(FEAT_DIFF) && defined(FEAT_SCROLLBIND)
|
||||||
/* Scroll-binding for diff mode may have been postponed until
|
/* Scroll-binding for diff mode may have been postponed until
|
||||||
* here. Avoids doing it for every change. */
|
* here. Avoids doing it for every change. */
|
||||||
|
@@ -44,6 +44,8 @@ int has_cursorhold __ARGS((void));
|
|||||||
int trigger_cursorhold __ARGS((void));
|
int trigger_cursorhold __ARGS((void));
|
||||||
int has_cursormoved __ARGS((void));
|
int has_cursormoved __ARGS((void));
|
||||||
int has_cursormovedI __ARGS((void));
|
int has_cursormovedI __ARGS((void));
|
||||||
|
int has_textchanged __ARGS((void));
|
||||||
|
int has_textchangedI __ARGS((void));
|
||||||
int has_insertcharpre __ARGS((void));
|
int has_insertcharpre __ARGS((void));
|
||||||
void block_autocmds __ARGS((void));
|
void block_autocmds __ARGS((void));
|
||||||
void unblock_autocmds __ARGS((void));
|
void unblock_autocmds __ARGS((void));
|
||||||
|
@@ -728,6 +728,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
867,
|
||||||
/**/
|
/**/
|
||||||
866,
|
866,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -1300,6 +1300,8 @@ enum auto_event
|
|||||||
EVENT_TABENTER, /* after entering a tab page */
|
EVENT_TABENTER, /* after entering a tab page */
|
||||||
EVENT_SHELLCMDPOST, /* after ":!cmd" */
|
EVENT_SHELLCMDPOST, /* after ":!cmd" */
|
||||||
EVENT_SHELLFILTERPOST, /* after ":1,2!cmd", ":w !cmd", ":r !cmd". */
|
EVENT_SHELLFILTERPOST, /* after ":1,2!cmd", ":w !cmd", ":r !cmd". */
|
||||||
|
EVENT_TEXTCHANGED, /* text was modified */
|
||||||
|
EVENT_TEXTCHANGEDI, /* text was modified in Insert mode*/
|
||||||
NUM_EVENTS /* MUST be the last one */
|
NUM_EVENTS /* MUST be the last one */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user