<<< Date Index >>>     <<< Thread Index >>>

For 1.5.9: menu_move_off (was: Change in behavior <current-middle>)



Hi,

I've updated the menu_context patch to reintroduce the menu_move_off
variable that hasn't made it into 1.5.8.

The patch fixes menu_prev_line and menu_next_line which didn't work
with menu_context > 0 and also makes <current-middle> work even if
there are less messages than screen lines (thanks to René Clerc and
Vincent Lefevre for spotting these issues).

Christoph
-- 
cb@xxxxxxxx | http://www.df7cb.de/
patch-1.5.8.cb.menu_context.8
-----------------------------

This patch introduces two new options, menu_context and menu_move_off. It is an
improved version of patch-1.5.5.1.mgs.index-context.5 my Mike Schiraldi (where
menu_context was called index_context).

  6.3.101.  menu_context (already included in mutt CVS/1.5.7)

  Type: number
  Default: 0

  This variable controls the number of lines of context that are given
  when scrolling through menus. (Similar to ````$pager_context''''.)

  6.3.102.  menu_move_off (NEW)

  Type: boolean
  Default: yes

  When unset, the bottom entry of menus will never scroll up past the
  bottom of the screen, unless there are less entries than lines.  When
  set, the bottom entry may move off the bottom.

Patch homepage: http://www.df7cb.de/projects/mutt/

Changelog:
  menu_context.6: 2004-03-06
    new option menu_move_off
  menu_context.7: 2004-03-20
    fixed jumping menu in case menu->max <= menu->pagelen
    (Thanks to Alain Bench for the report)
  menu_context.8: 2005-02-27
    updated patch for mutt CVS and fixed menu_prev_line and menu_next_line
    (Thanks to René Clerc for the report)
    also made <current-middle> honor menu_move_off
    (spotted by Vincent Lefevre)

Christoph Berg <cb@xxxxxxxx>

------------------------------------------------------------------------

diff -urp ../MUTT/mutt/PATCHES mutt/PATCHES
--- ../MUTT/mutt/PATCHES        2002-12-09 18:44:54.000000000 +0100
+++ mutt/PATCHES        2005-02-26 23:43:03.000000000 +0100
@@ -0,0 +1 @@
+patch-1.5.8.cb.menu_context.8
diff -urp ../MUTT/mutt/init.h mutt/init.h
--- ../MUTT/mutt/init.h 2005-02-12 21:13:20.000000000 +0100
+++ mutt/init.h 2005-02-26 23:45:29.000000000 +0100
@@ -1096,6 +1096,13 @@ struct option_t MuttVars[] = {
   ** This variable controls the number of lines of context that are given
   ** when scrolling through menus. (Similar to ``$$pager_context''.)
   */
+  { "menu_move_off",   DT_BOOL, R_NONE, OPTMENUMOVEOFF, 0 },
+  /*
+  ** .pp
+  ** When \fIunset\fP, the bottom entry of menus will never scroll up past
+  ** the bottom of the screen, unless there are less entries than lines.
+  ** When \fIset\fP, the bottom entry may move off the bottom.
+  */
   { "menu_scroll",     DT_BOOL, R_NONE, OPTMENUSCROLL, 0 },
   /*
   ** .pp
diff -urp ../MUTT/mutt/menu.c mutt/menu.c
--- ../MUTT/mutt/menu.c 2005-02-12 21:13:20.000000000 +0100
+++ mutt/menu.c 2005-02-27 02:13:54.000000000 +0100
@@ -374,7 +374,7 @@ void menu_check_recenter (MUTTMENU *menu
   int c = MIN (MenuContext, menu->pagelen / 2);
   int old_top = menu->top;
 
-  if (menu->max <= menu->pagelen) /* less entries than lines */
+  if (!option (OPTMENUMOVEOFF) && menu->max <= menu->pagelen) /* less entries 
than lines */
   {
     if (menu->top != 0) {
       menu->top = 0;
@@ -396,8 +396,8 @@ void menu_check_recenter (MUTTMENU *menu
       menu->top -= (menu->pagelen - c) * ((menu->top + menu->pagelen - 1 - 
menu->current) / (menu->pagelen - c)) - c;
   }
 
-  /* make entries stick to bottom */
-  menu->top = MIN (menu->top, menu->max - menu->pagelen);
+  if (!option (OPTMENUMOVEOFF)) /* make entries stick to bottom */
+    menu->top = MIN (menu->top, menu->max - menu->pagelen);
   menu->top = MAX (menu->top, 0);
 
   if (menu->top != old_top)
@@ -433,10 +433,13 @@ void menu_next_line (MUTTMENU *menu)
 {
   if (menu->max)
   {
-    if (menu->top + 1 < menu->max)
+    int c = MIN (MenuContext, menu->pagelen / 2);
+
+    if (menu->top + 1 < menu->max - c
+      && (option(OPTMENUMOVEOFF) || (menu->max > menu->pagelen && menu->top < 
menu->max - menu->pagelen)))
     {
       menu->top++;
-      if (menu->current < menu->top)
+      if (menu->current < menu->top + c && menu->current < menu->max - 1)
        menu->current++;
       menu->redraw = REDRAW_INDEX;
     }
@@ -451,8 +454,10 @@ void menu_prev_line (MUTTMENU *menu)
 {
   if (menu->top > 0)
   {
+    int c = MIN (MenuContext, menu->pagelen / 2);
+
     menu->top--;
-    if (menu->current >= menu->top + menu->pagelen)
+    if (menu->current >= menu->top + menu->pagelen - c && menu->current > 1)
       menu->current--;
     menu->redraw = REDRAW_INDEX;
   }
diff -urp ../MUTT/mutt/mutt.h mutt/mutt.h
--- ../MUTT/mutt/mutt.h 2005-02-12 21:13:20.000000000 +0100
+++ mutt/mutt.h 2005-02-26 23:42:17.000000000 +0100
@@ -388,6 +388,7 @@ enum
   OPTMARKERS,
   OPTMARKOLD,
   OPTMENUSCROLL,       /* scroll menu instead of implicit next-page */
+  OPTMENUMOVEOFF,      /* allow menu to scroll past last entry */
   OPTMETAKEY,          /* interpret ALT-x as ESC-x */
   OPTMETOO,
   OPTMHPURGE,

Attachment: signature.asc
Description: Digital signature