Hi,

kjell@ suggested a different approach. Instead of
using hacks in basic.c, I've added wrappers in dired
itself.

Rather than overwriting existing keys (C-v and M-v),
I think that using C-w and C-T is better for now.

As usual, I welcome feedback.

Index: src/usr.bin/mg/dired.c
===================================================================
RCS file: /cvs/src/usr.bin/mg/dired.c,v
retrieving revision 1.48
diff -u -p -r1.48 dired.c
--- src/usr.bin/mg/dired.c      23 Jan 2011 00:45:03 -0000      1.48
+++ src/usr.bin/mg/dired.c      18 Jul 2011 22:47:43 -0000
@@ -36,6 +36,8 @@ static int     d_rename(int, int);
 static int      d_shell_command(int, int);
 static int      d_create_directory(int, int);
 static int      d_makename(struct line *, char *, size_t);
+static int      d_forwpage(int, int);
+static int      d_backpage(int, int);
 static void     reaper(int);
 
 extern struct keymap_s helpmap, cXmap, metamap;
@@ -63,10 +65,10 @@ static PF diredcl[] = {
        rescan,                 /* ^Q */
        backisearch,            /* ^R */
        forwisearch,            /* ^S */
-       rescan,                 /* ^T */
+       d_backpage,             /* ^T */
        universal_argument,     /* ^U */
        forwpage,               /* ^V */
-       rescan,                 /* ^W */
+       d_forwpage,             /* ^W */
        NULL                    /* ^X */
 };
 
@@ -590,6 +592,26 @@ d_makename(struct line *lp, char *fn, si
        if (strlcat(fn, p, len) >= len)
                return (FALSE);
        return ((lgetc(lp, 2) == 'd') ? TRUE : FALSE);
+}
+
+static int
+d_forwpage(int f, int n)
+{
+       forwpage(f | FFRAND, n);
+       if ((strrchr(curwp->w_dotp->l_text, ' ')) != NULL)
+               curwp->w_doto = strrchr(curwp->w_dotp->l_text, ' ') -
+                  curwp->w_dotp->l_text + 1;
+       return TRUE;
+}
+
+static int
+d_backpage(int f, int n)
+{
+       backpage(f | FFRAND, n);
+       if ((strrchr(curwp->w_dotp->l_text, ' ')) != NULL)
+               curwp->w_doto = strrchr(curwp->w_dotp->l_text, ' ') -
+                  curwp->w_dotp->l_text + 1;
+       return TRUE;
 }
 
 /*

Reply via email to