]> granicus.if.org Git - mutt/commitdiff
Create R_PAGER_FLOW config variable flag.
authorKevin McCarthy <kevin@8t8.us>
Tue, 9 May 2017 23:07:46 +0000 (16:07 -0700)
committerKevin McCarthy <kevin@8t8.us>
Tue, 9 May 2017 23:07:46 +0000 (16:07 -0700)
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.

init.c
init.h
menu.c
mutt_menu.h
pager.c

diff --git a/init.c b/init.c
index 9ca6f8b601cd6d4f7c97f7152a16113bbafe2a22..aef6483eef8716caa7c13df83169da2f68ab2f25 100644 (file)
--- a/init.c
+++ b/init.c
@@ -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)
diff --git a/init.h b/init.h
index 82a499b315e481c29f1438cc75e36782f5599e61..f5ec7a732dfdfde24f829e03ebc458007ae4a5e7 100644 (file)
--- a/init.h
+++ b/init.h
 #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
diff --git a/menu.c b/menu.c
index 425a3cbdcef68761d0c6b6a1c00851a531fcbdb1..5a166f2ba836bf8821dc2922c7290f71ee81708a 100644 (file)
--- a/menu.c
+++ b/menu.c
@@ -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)
index 32754dc73480a0c3ef49a940d65125e7f83a6f7f..ed872bcc9a08bf535f25509bf79c3318b11e7760 100644 (file)
@@ -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 *);
diff --git a/pager.c b/pager.c
index 7c322eeee5cb3bbadb971afcf256cf862804d57f..a45febb74a761d4e782c1acdca898a65056d7311 100644 (file)
--- a/pager.c
+++ b/pager.c
@@ -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: