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);
}