Commit 0636c24b authored by Kevin J. McCarthy's avatar Kevin J. McCarthy

Create R_PAGER_FLOW config variable flag.

Use this for $header_color_partial, $markers, and $smart_wrap.  When
these options are changed in the pager, this flag will force a
recalculation of lineInfo.

Remove the manual checks in OP_ENTER_COMMAND for $markers and
$smart_wrap, and instead use the same REDRAW_FLOW processing used for
a SigWinch.
parent 71b52d48
......@@ -1797,6 +1797,11 @@ static void mutt_restore_default (struct option_t *p)
mutt_set_menu_redraw_full (MENU_MAIN);
if (p->flags & R_PAGER)
mutt_set_menu_redraw_full (MENU_PAGER);
if (p->flags & R_PAGER_FLOW)
{
mutt_set_menu_redraw_full (MENU_PAGER);
mutt_set_menu_redraw (MENU_PAGER, REDRAW_FLOW);
}
if (p->flags & R_RESORT_SUB)
set_option (OPTSORTSUBTHREADS);
if (p->flags & R_RESORT)
......@@ -2580,6 +2585,11 @@ static int parse_set (BUFFER *tmp, BUFFER *s, unsigned long data, BUFFER *err)
mutt_set_menu_redraw_full (MENU_MAIN);
if (MuttVars[idx].flags & R_PAGER)
mutt_set_menu_redraw_full (MENU_PAGER);
if (MuttVars[idx].flags & R_PAGER_FLOW)
{
mutt_set_menu_redraw_full (MENU_PAGER);
mutt_set_menu_redraw (MENU_PAGER, REDRAW_FLOW);
}
if (MuttVars[idx].flags & R_RESORT_SUB)
set_option (OPTSORTSUBTHREADS);
if (MuttVars[idx].flags & R_RESORT)
......
......@@ -59,13 +59,14 @@
#define R_NONE 0
#define R_INDEX (1<<0) /* redraw the index menu (MENU_MAIN) */
#define R_PAGER (1<<1) /* redraw the pager menu */
#define R_RESORT (1<<2) /* resort the mailbox */
#define R_RESORT_SUB (1<<3) /* resort subthreads */
#define R_RESORT_INIT (1<<4) /* resort from scratch */
#define R_TREE (1<<5) /* redraw the thread tree */
#define R_REFLOW (1<<6) /* reflow window layout and full redraw */
#define R_SIDEBAR (1<<7) /* redraw the sidebar */
#define R_MENU (1<<8) /* redraw all menus */
#define R_PAGER_FLOW (1<<2) /* reflow lineInfo and redraw the pager menu */
#define R_RESORT (1<<3) /* resort the mailbox */
#define R_RESORT_SUB (1<<4) /* resort subthreads */
#define R_RESORT_INIT (1<<5) /* resort from scratch */
#define R_TREE (1<<6) /* redraw the thread tree */
#define R_REFLOW (1<<7) /* reflow window layout and full redraw */
#define R_SIDEBAR (1<<8) /* redraw the sidebar */
#define R_MENU (1<<9) /* redraw all menus */
#define R_BOTH (R_INDEX | R_PAGER)
#define R_RESORT_BOTH (R_RESORT | R_RESORT_SUB)
......@@ -1007,7 +1008,7 @@ struct option_t MuttVars[] = {
*/
#endif /* HAVE_GDBM || HAVE_DB4 */
#endif /* USE_HCACHE */
{ "header_color_partial", DT_BOOL, R_PAGER|R_REFLOW, OPTHEADERCOLORPARTIAL, 0 },
{ "header_color_partial", DT_BOOL, R_PAGER_FLOW, OPTHEADERCOLORPARTIAL, 0 },
/*
** .pp
** When \fIset\fP, color header regexps behave like color body regexps:
......@@ -1518,7 +1519,7 @@ struct option_t MuttVars[] = {
** will show up with an ``O'' next to them in the index menu,
** indicating that they are old.
*/
{ "markers", DT_BOOL, R_PAGER, OPTMARKERS, 1 },
{ "markers", DT_BOOL, R_PAGER_FLOW, OPTMARKERS, 1 },
/*
** .pp
** Controls the display of wrapped lines in the internal pager. If set, a
......@@ -2911,7 +2912,7 @@ struct option_t MuttVars[] = {
** messages from the current folder. The default is to pause one second, so
** a value of zero for this option suppresses the pause.
*/
{ "smart_wrap", DT_BOOL, R_PAGER, OPTWRAP, 1 },
{ "smart_wrap", DT_BOOL, R_PAGER_FLOW, OPTWRAP, 1 },
/*
** .pp
** Controls the display of lines longer than the screen width in the
......
......@@ -792,6 +792,12 @@ void mutt_set_current_menu_redraw_full (void)
current_menu->redraw = REDRAW_FULL;
}
void mutt_set_menu_redraw (int menu_type, int redraw)
{
if (CurrentMenu == menu_type)
mutt_set_current_menu_redraw (redraw);
}
void mutt_set_menu_redraw_full (int menu_type)
{
if (CurrentMenu == menu_type)
......
......@@ -128,6 +128,7 @@ void mutt_push_current_menu (MUTTMENU *);
void mutt_pop_current_menu (MUTTMENU *);
void mutt_set_current_menu_redraw (int);
void mutt_set_current_menu_redraw_full ();
void mutt_set_menu_redraw (int, int);
void mutt_set_menu_redraw_full (int);
void mutt_current_menu_redraw (void);
int mutt_menuLoop (MUTTMENU *);
......
......@@ -1905,10 +1905,9 @@ mutt_pager (const char *banner, const char *fname, int flags, pager_t *extra)
char buffer[LONG_STRING];
char helpstr[SHORT_STRING*2];
char tmphelp[SHORT_STRING*2];
int i, j, ch = 0, rc = -1;
int i, ch = 0, rc = -1;
int err, first = 1;
int r = -1, wrapped = 0, searchctx = 0;
int old_smart_wrap, old_markers;
MUTTMENU *pager_menu = NULL;
int old_PagerIndexLines; /* some people want to resize it
......@@ -2562,8 +2561,6 @@ search_next:
break;
case OP_ENTER_COMMAND:
old_smart_wrap = option (OPTWRAP);
old_markers = option (OPTMARKERS);
old_PagerIndexLines = PagerIndexLines;
mutt_enter_command ();
......@@ -2581,65 +2578,16 @@ search_next:
mutt_menuDestroy (&rd.index);
rd.index = NULL;
}
if (option (OPTWRAP) != old_smart_wrap ||
option (OPTMARKERS) != old_markers)
{
if (flags & MUTT_PAGER_RETWINCH)
{
ch = -1;
rc = OP_REFORMAT_WINCH;
continue;
}
/* count the real lines above */
j = 0;
for (i = 0; i <= rd.topline; i++)
{
if (!rd.lineInfo[i].continuation)
j++;
}
/* we need to restart the whole thing */
for (i = 0; i < rd.maxLine; i++)
{
rd.lineInfo[i].offset = 0;
rd.lineInfo[i].type = -1;
rd.lineInfo[i].continuation = 0;
rd.lineInfo[i].chunks = 0;
rd.lineInfo[i].search_cnt = -1;
rd.lineInfo[i].quote = NULL;
safe_realloc (&(rd.lineInfo[i].syntax), sizeof (struct syntax_t));
if (rd.SearchCompiled && rd.lineInfo[i].search)
FREE (&(rd.lineInfo[i].search));
}
if (rd.SearchCompiled)
{
regfree (&rd.SearchRE);
rd.SearchCompiled = 0;
}
rd.SearchFlag = 0;
/* try to keep the old position */
rd.topline = 0;
rd.lastLine = 0;
while (j > 0 && display_line (rd.fp, &rd.last_pos, &rd.lineInfo, rd.topline,
&rd.lastLine, &rd.maxLine,
(rd.has_types ? MUTT_TYPES : 0) | (flags & MUTT_PAGER_NOWRAP),
&rd.QuoteList, &rd.q_level, &rd.force_redraw,
&rd.SearchRE, rd.pager_window) == 0)
{
if (! rd.lineInfo[rd.topline].continuation)
j--;
if (j > 0)
rd.topline++;
}
ch = 0;
}
if ((pager_menu->redraw & REDRAW_FLOW) &&
(flags & MUTT_PAGER_RETWINCH))
{
ch = -1;
rc = OP_REFORMAT_WINCH;
continue;
}
ch = 0;
break;
case OP_FLAG_MESSAGE:
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment