# HG changeset patch # User Bram Moolenaar # Date 1663678804 -7200 # Node ID c0be6563fa398af7702c944166c648b507aff489 # Parent 7d342e8f916daa4f61c5a4c7b0195d000744637d patch 9.0.0513: may not be able to use a pattern ad the debug prompt Commit: https://github.com/vim/vim/commit/9781d9c00517a67c44b50b040cca2c5804daf15c Author: Bram Moolenaar Date: Tue Sep 20 13:51:25 2022 +0100 patch 9.0.0513: may not be able to use a pattern ad the debug prompt Problem: May not be able to use a pattern ad the debug prompt. Solution: Temporarily disable the timeout. (closes https://github.com/vim/vim/issues/11164) diff --git a/src/debugger.c b/src/debugger.c --- a/src/debugger.c +++ b/src/debugger.c @@ -87,6 +87,7 @@ do_debug(char_u *cmd) msg_silent = FALSE; // display messages emsg_silent = FALSE; // display error messages redir_off = TRUE; // don't redirect debug commands + save_timeout_for_debugging(); // disable regexp timeout flag State = MODE_NORMAL; debug_mode = TRUE; @@ -293,6 +294,7 @@ do_debug(char_u *cmd) redraw_all_later(UPD_NOT_VALID); need_wait_return = FALSE; msg_scroll = save_msg_scroll; + restore_timeout_for_debugging(); lines_left = Rows - 1; State = save_State; debug_mode = FALSE; diff --git a/src/proto/regexp.pro b/src/proto/regexp.pro --- a/src/proto/regexp.pro +++ b/src/proto/regexp.pro @@ -1,6 +1,8 @@ /* regexp.c */ void init_regexp_timeout(long msec); void disable_regexp_timeout(void); +void save_timeout_for_debugging(void); +void restore_timeout_for_debugging(void); int re_multiline(regprog_T *prog); char_u *skip_regexp(char_u *startp, int delim, int magic); char_u *skip_regexp_err(char_u *startp, int delim, int magic); diff --git a/src/regexp.c b/src/regexp.c --- a/src/regexp.c +++ b/src/regexp.c @@ -80,6 +80,34 @@ disable_regexp_timeout(void) } #endif +#if defined(FEAT_EVAL) || defined(PROTO) +# ifdef FEAT_RELTIME +static sig_atomic_t *saved_timeout_flag; +# endif + +/* + * Used at the debug prompt: disable the timeout so that expression evaluation + * can used patterns. + * Must be followed by calling restore_timeout_for_debugging(). + */ + void +save_timeout_for_debugging(void) +{ +# ifdef FEAT_RELTIME + saved_timeout_flag = (sig_atomic_t *)timeout_flag; + timeout_flag = &dummy_timeout_flag; +# endif +} + + void +restore_timeout_for_debugging(void) +{ +# ifdef FEAT_RELTIME + timeout_flag = saved_timeout_flag; +# endif +} +#endif + /* * The first byte of the BT regexp internal "program" is actually this magic * number; the start node begins in the second byte. It's used to catch the diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -700,6 +700,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 513, +/**/ 512, /**/ 511,