fileio: Replace some event checking functions with one has_event

This commit is contained in:
Charles Joachim
2016-01-10 22:45:49 -05:00
parent 3b94756feb
commit 879c668d14
4 changed files with 47 additions and 92 deletions

View File

@@ -1352,24 +1352,21 @@ ins_redraw (
if (char_avail()) if (char_avail())
return; return;
/* Trigger CursorMoved if the cursor moved. Not when the popup menu is // Trigger CursorMoved if the cursor moved. Not when the popup menu is
* visible, the command might delete it. */ // visible, the command might delete it.
if (ready && ( if (ready && (has_event(EVENT_CURSORMOVEDI) || curwin->w_p_cole > 0)
has_cursormovedI()
||
curwin->w_p_cole > 0
)
&& !equalpos(last_cursormoved, curwin->w_cursor) && !equalpos(last_cursormoved, curwin->w_cursor)
&& !pum_visible() && !pum_visible()) {
) { // Need to update the screen first, to make sure syntax
/* Need to update the screen first, to make sure syntax // highlighting is correct after making a change (e.g., inserting
* highlighting is correct after making a change (e.g., inserting // a "(". The autocommand may also require a redraw, so it's done
* a "(". The autocommand may also require a redraw, so it's done // again below, unfortunately.
* again below, unfortunately. */ if (syntax_present(curwin) && must_redraw) {
if (syntax_present(curwin) && must_redraw)
update_screen(0); update_screen(0);
if (has_cursormovedI()) }
apply_autocmds(EVENT_CURSORMOVEDI, NULL, NULL, FALSE, curbuf); if (has_event(EVENT_CURSORMOVEDI)) {
apply_autocmds(EVENT_CURSORMOVEDI, NULL, NULL, false, curbuf);
}
if (curwin->w_p_cole > 0) { if (curwin->w_p_cole > 0) {
conceal_old_cursor_line = last_cursormoved.lnum; conceal_old_cursor_line = last_cursormoved.lnum;
conceal_new_cursor_line = curwin->w_cursor.lnum; conceal_new_cursor_line = curwin->w_cursor.lnum;
@@ -1378,13 +1375,13 @@ ins_redraw (
last_cursormoved = curwin->w_cursor; last_cursormoved = curwin->w_cursor;
} }
/* Trigger TextChangedI if b_changedtick differs. */ // Trigger TextChangedI if b_changedtick differs.
if (ready && has_textchangedI() if (ready && has_event(EVENT_TEXTCHANGEDI)
&& last_changedtick != curbuf->b_changedtick && last_changedtick != curbuf->b_changedtick
&& !pum_visible() && !pum_visible()) {
) { if (last_changedtick_buf == curbuf) {
if (last_changedtick_buf == curbuf) apply_autocmds(EVENT_TEXTCHANGEDI, NULL, NULL, false, curbuf);
apply_autocmds(EVENT_TEXTCHANGEDI, NULL, NULL, FALSE, curbuf); }
last_changedtick_buf = curbuf; last_changedtick_buf = curbuf;
last_changedtick = curbuf->b_changedtick; last_changedtick = curbuf->b_changedtick;
} }
@@ -5124,24 +5121,20 @@ insertchar (
can_si = FALSE; can_si = FALSE;
can_si_back = FALSE; can_si_back = FALSE;
/* // If there's any pending input, grab up to INPUT_BUFLEN at once.
* If there's any pending input, grab up to INPUT_BUFLEN at once. // This speeds up normal text input considerably.
* This speeds up normal text input considerably. // Don't do this when 'cindent' or 'indentexpr' is set, because we might
* Don't do this when 'cindent' or 'indentexpr' is set, because we might // need to re-indent at a ':', or any other character (but not what
* need to re-indent at a ':', or any other character (but not what // 'paste' is set)..
* 'paste' is set).. // Don't do this when there an InsertCharPre autocommand is defined,
* Don't do this when there an InsertCharPre autocommand is defined, // because we need to fire the event for every character.
* because we need to fire the event for every character.
*/
if (!ISSPECIAL(c) if (!ISSPECIAL(c)
&& (!has_mbyte || (*mb_char2len)(c) == 1) && (!has_mbyte || (*mb_char2len)(c) == 1)
&& vpeekc() != NUL && vpeekc() != NUL
&& !(State & REPLACE_FLAG) && !(State & REPLACE_FLAG)
&& !cindent_on() && !cindent_on()
&& !p_ri && !p_ri
&& !has_insertcharpre() && !has_event(EVENT_INSERTCHARPRE)) {
) {
#define INPUT_BUFLEN 100 #define INPUT_BUFLEN 100
char_u buf[INPUT_BUFLEN + 1]; char_u buf[INPUT_BUFLEN + 1];
int i; int i;
@@ -8486,13 +8479,13 @@ static char_u *do_insert_char_pre(int c)
{ {
char_u buf[MB_MAXBYTES + 1]; char_u buf[MB_MAXBYTES + 1];
/* Return quickly when there is nothing to do. */ // Return quickly when there is nothing to do.
if (!has_insertcharpre()) if (!has_event(EVENT_INSERTCHARPRE)) {
return NULL; return NULL;
}
if (has_mbyte) if (has_mbyte) {
buf[(*mb_char2bytes)(c, buf)] = NUL; buf[(*mb_char2bytes)(c, buf)] = NUL;
else { } else {
buf[0] = c; buf[0] = c;
buf[1] = NUL; buf[1] = NUL;
} }

View File

@@ -1694,7 +1694,7 @@ static char_u * do_one_cmd(char_u **cmdlinep,
// autocommands defined, trigger the matching autocommands. // autocommands defined, trigger the matching autocommands.
if (p != NULL && ea.cmdidx == CMD_SIZE && !ea.skip if (p != NULL && ea.cmdidx == CMD_SIZE && !ea.skip
&& ASCII_ISUPPER(*ea.cmd) && ASCII_ISUPPER(*ea.cmd)
&& has_cmdundefined()) { && has_event(EVENT_CMDUNDEFINED)) {
p = ea.cmd; p = ea.cmd;
while (ASCII_ISALNUM(*p)) { while (ASCII_ISALNUM(*p)) {
++p; ++p;

View File

@@ -6266,50 +6266,12 @@ int trigger_cursorhold(void)
return FALSE; return FALSE;
} }
/* /// Return true if "event" autocommand is defined.
* Return TRUE when there is a CursorMoved autocommand defined. ///
*/ /// @param event the autocommand to check
int has_cursormoved(void) bool has_event(int event) FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT
{ {
return first_autopat[(int)EVENT_CURSORMOVED] != NULL; return first_autopat[event] != NULL;
}
/*
* Return TRUE when there is a CursorMovedI autocommand defined.
*/
int has_cursormovedI(void)
{
return first_autopat[(int)EVENT_CURSORMOVEDI] != NULL;
}
/*
* Return TRUE when there is a TextChanged autocommand defined.
*/
int has_textchanged(void)
{
return first_autopat[(int)EVENT_TEXTCHANGED] != NULL;
}
/*
* Return TRUE when there is a TextChangedI autocommand defined.
*/
int has_textchangedI(void)
{
return first_autopat[(int)EVENT_TEXTCHANGEDI] != NULL;
}
/*
* Return TRUE when there is an InsertCharPre autocommand defined.
*/
int has_insertcharpre(void)
{
return first_autopat[(int)EVENT_INSERTCHARPRE] != NULL;
}
/// @returns true when there is an CmdUndefined autocommand defined.
int has_cmdundefined(void)
{
return first_autopat[(int)EVENT_CMDUNDEFINED] != NULL;
} }
static int static int

View File

@@ -1205,9 +1205,9 @@ static void normal_check_interrupt(NormalState *s)
static void normal_check_cursor_moved(NormalState *s) static void normal_check_cursor_moved(NormalState *s)
{ {
// Trigger CursorMoved if the cursor moved. // Trigger CursorMoved if the cursor moved.
if (!finish_op && (has_cursormoved() || curwin->w_p_cole > 0) if (!finish_op && (has_event(EVENT_CURSORMOVED) || curwin->w_p_cole > 0)
&& !equalpos(last_cursormoved, curwin->w_cursor)) { && !equalpos(last_cursormoved, curwin->w_cursor)) {
if (has_cursormoved()) { if (has_event(EVENT_CURSORMOVED)) {
apply_autocmds(EVENT_CURSORMOVED, NULL, NULL, false, curbuf); apply_autocmds(EVENT_CURSORMOVED, NULL, NULL, false, curbuf);
} }
@@ -1224,7 +1224,7 @@ static void normal_check_cursor_moved(NormalState *s)
static void normal_check_text_changed(NormalState *s) static void normal_check_text_changed(NormalState *s)
{ {
// Trigger TextChanged if b_changedtick differs. // Trigger TextChanged if b_changedtick differs.
if (!finish_op && has_textchanged() if (!finish_op && has_event(EVENT_TEXTCHANGED)
&& last_changedtick != curbuf->b_changedtick) { && last_changedtick != curbuf->b_changedtick) {
if (last_changedtick_buf == curbuf) { if (last_changedtick_buf == curbuf) {
apply_autocmds(EVENT_TEXTCHANGED, NULL, NULL, false, curbuf); apply_autocmds(EVENT_TEXTCHANGED, NULL, NULL, false, curbuf);