Re: Mike Schiraldi in <20040118234027.GB9036@xxxxxxxxxxxx> > A long time ago, i wrote a patch that adds a variable, index_context, which > works like pager_context: When moving the indicator through the index, > scrolling will start happening n lines early -- in other words, before you > reach the end of the screen. This is useful for exactly the same reason > pager_context is useful -- it allows you to always see a few messages ahead > and it lets you know when you're getting close to the end. > > I've been using this for years, and it seems to work great. But it sure > would be nice if it was included into mutt so i wouldn't have to keep > applying the patch myself. I've been using an older version of this patch for several months now (patch-1.4.mgs.index-context.4) and I really love it. I've tested the patch Mike sent with his mail and it seems to work equally well (some lines concerning index redraw were moved around). > See attached. Attached is a version of that patch with a proper PATCHES entry. Christoph -- Christoph Berg <cb@xxxxxxxxxxxxxxxx>, http://www.df7cb.de/ Wohnheim D, 2405, Universität des Saarlandes, 0681/9657944
diff -ur ../MUTT/mutt/PATCHES mutt/PATCHES
--- ../MUTT/mutt/PATCHES 2002-12-09 18:44:54.000000000 +0100
+++ mutt/PATCHES 2004-01-19 14:18:37.000000000 +0100
@@ -0,0 +1 @@
+patch-1.5.5.1.mgs.index-context.5
Nur in mutt: PATCHES~.
diff -ur ../MUTT/mutt/globals.h mutt/globals.h
--- ../MUTT/mutt/globals.h 2003-07-15 13:41:32.000000000 +0200
+++ mutt/globals.h 2004-01-19 14:17:42.000000000 +0100
@@ -142,6 +142,7 @@
WHERE short ConnectTimeout;
WHERE short HistSize;
+WHERE short IndexContext;
WHERE short PagerContext;
WHERE short PagerIndexLines;
WHERE short ReadInc;
diff -ur ../MUTT/mutt/init.h mutt/init.h
--- ../MUTT/mutt/init.h 2004-01-05 19:49:00.000000000 +0100
+++ mutt/init.h 2004-01-19 14:17:42.000000000 +0100
@@ -883,6 +883,12 @@
{ "indent_str", DT_SYN, R_NONE, UL "indent_string", 0 },
/*
*/
+ { "index_context", DT_NUM, R_NONE, UL &IndexContext, 0 },
+ /*
+ ** .pp
+ ** This variable controls the number of lines of context that are given
+ ** when scrolling through the message index.
+ */
{ "index_format", DT_STR, R_BOTH, UL &HdrFmt, UL "%4C %Z %{%b %d}
%-15.15L (%?l?%4l&%4c?) %s" },
/*
** .pp
diff -ur ../MUTT/mutt/menu.c mutt/menu.c
--- ../MUTT/mutt/menu.c 2004-01-05 19:49:00.000000000 +0100
+++ mutt/menu.c 2004-01-19 14:17:42.000000000 +0100
@@ -373,32 +373,34 @@
void menu_check_recenter (MUTTMENU *menu)
{
+ int ic = MIN (IndexContext, menu->pagelen / 2);
+ int old_top = menu->top;
+
if (menu->max <= menu->pagelen && menu->top != 0)
{
menu->top = 0;
set_option (OPTNEEDREDRAW);
- menu->redraw |= REDRAW_INDEX;
}
- else if (menu->current >= menu->top + menu->pagelen)
+ else if (menu->current >= menu->top + menu->pagelen - ic)
{
if (option (OPTMENUSCROLL) || (menu->pagelen <= 0))
- menu->top = menu->current - menu->pagelen + 1;
+ menu->top = menu->current - menu->pagelen + ic + 1;
else
menu->top += menu->pagelen * ((menu->current - menu->top) /
menu->pagelen);
- menu->redraw |= REDRAW_INDEX;
}
- else if (menu->current < menu->top)
+ else if (menu->current < menu->top + ic)
{
if (option (OPTMENUSCROLL) || (menu->pagelen <= 0))
- menu->top = menu->current;
+ menu->top = menu->current - ic;
else
- {
menu->top -= menu->pagelen * ((menu->top + menu->pagelen - 1 -
menu->current) / menu->pagelen);
- if (menu->top < 0)
- menu->top = 0;
- }
- menu->redraw |= REDRAW_INDEX;
}
+
+ menu->top = MIN (menu->top, menu->max - menu->pagelen);
+ menu->top = MAX (menu->top, 0);
+
+ if (menu->top != old_top)
+ menu->redraw |= REDRAW_INDEX;
}
void menu_jump (MUTTMENU *menu)
@@ -482,7 +484,9 @@
void menu_prev_page (MUTTMENU *menu)
{
- if (menu->top > 0)
+ int ic = MIN (IndexContext, menu->pagelen / 2);
+
+ if (menu->top > ic)
{
if ((menu->top -= menu->pagelen) < 0)
menu->top = 0;
Attachment:
signature.asc
Description: Digital signature