Hi,

Using scrolling in dired causes a dot reset for
forward/backward page.

This diff fixes this annoying behaviour for
forward/backward page, beginning/end of buffer,
and goto-line.

//Logan
C-x-C-c

Please test & report.
As usual feedback for improvements is welcomed ;-)

Index: basic.c
===================================================================
RCS file: /cvs/src/usr.bin/mg/basic.c,v
retrieving revision 1.30
diff -u -p -r1.30 basic.c
--- basic.c     4 Jun 2009 02:23:37 -0000       1.30
+++ basic.c     24 Apr 2011 19:24:57 -0000
@@ -12,7 +12,7 @@
  * current buffer framing bad, are hard.
  */
 #include "def.h"
-
+#include "kbd.h"
 #include <ctype.h>
 
 /*
@@ -108,7 +108,10 @@ gotobob(int f, int n)
 {
        (void) setmark(f, n);
        curwp->w_dotp = bfirstlp(curbp);
-       curwp->w_doto = 0;
+
+       /* Disable dot reset if mode is dired */
+       if ((curbp->b_modes[1] == name_mode("dired")) == NULL)
+               curwp->w_doto = 0;
        curwp->w_rflag |= WFFULL;
        curwp->w_dotline = 1;
        return (TRUE);
@@ -124,7 +127,10 @@ gotoeob(int f, int n)
 {
        (void) setmark(f, n);
        curwp->w_dotp = blastlp(curbp);
-       curwp->w_doto = llength(curwp->w_dotp);
+
+       /* Disable dot reset if mode is dired */
+       if ((curbp->b_modes[1] == name_mode("dired")) == NULL)
+               curwp->w_doto = llength(curwp->w_dotp);
        curwp->w_dotline = curwp->w_bufp->b_lines;
        curwp->w_rflag |= WFFULL;
        return (TRUE);
@@ -281,7 +287,10 @@ forwpage(int f, int n)
                curwp->w_dotp = lforw(curwp->w_dotp);
                curwp->w_dotline++;
        }
-       curwp->w_doto = 0;
+       
+       /* Disable dot reset if mode is dired */
+       if ((curbp->b_modes[1] == name_mode("dired")) == NULL)
+               curwp->w_doto = 0;
        return (TRUE);
 }
 
@@ -320,7 +329,10 @@ backpage(int f, int n)
                curwp->w_dotp = lback(curwp->w_dotp);
                curwp->w_dotline--;
        }
-       curwp->w_doto = 0;
+
+       /* Disable dot reset if mode is dired */
+       if ((curbp->b_modes[1] == name_mode("dired")) == NULL)
+               curwp->w_doto = 0;
        return (TRUE);
 }
 
@@ -494,7 +506,10 @@ gotoline(int f, int n)
                }
        }
        curwp->w_dotp = clp;
-       curwp->w_doto = 0;
+       
+       /* Disable dot reset if mode is dired */
+       if ((curbp->b_modes[1] == name_mode("dired")) == NULL) 
+               curwp->w_doto = 0;
        curwp->w_rflag |= WFMOVE;
        return (TRUE);
 }

Reply via email to