This is what you're talking about. C-n & C-p warp the dot on the filename. I've overwritten the default forwline() and backline() functions.
I like this. If others don't find it annoying, we can go forward. I'll look at another issue that Mark brought up when I'll be done with work. Index: dired.c =================================================================== RCS file: /cvs/src/usr.bin/mg/dired.c,v retrieving revision 1.48 diff -u -p -r1.48 dired.c --- dired.c 23 Jan 2011 00:45:03 -0000 1.48 +++ dired.c 1 Aug 2011 06:04:01 -0000 @@ -36,6 +36,11 @@ 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 int d_forwline(int, int); +static int d_backline(int, int); +static int d_gotoline(int, int); static void reaper(int); extern struct keymap_s helpmap, cXmap, metamap; @@ -57,16 +62,16 @@ static PF dirednul[] = { static PF diredcl[] = { reposition, /* ^L */ d_findfile, /* ^M */ - forwline, /* ^N */ - rescan, /* ^O */ - backline, /* ^P */ + d_forwline, /* ^N */ + d_gotoline, /* ^O */ + d_backline, /* ^P */ rescan, /* ^Q */ backisearch, /* ^R */ forwisearch, /* ^S */ - rescan, /* ^T */ + d_backpage, /* ^T */ universal_argument, /* ^U */ forwpage, /* ^V */ - rescan, /* ^W */ + d_forwpage, /* ^W */ NULL /* ^X */ }; @@ -77,7 +82,7 @@ static PF diredcz[] = { rescan, /* ^] */ rescan, /* ^^ */ rescan, /* ^_ */ - forwline, /* SP */ + d_forwline, /* SP */ d_shell_command, /* ! */ rescan, /* " */ rescan, /* # */ @@ -99,9 +104,9 @@ static PF diredc[] = { }; static PF diredn[] = { - forwline, /* n */ + d_forwline, /* n */ d_ffotherwindow, /* o */ - backline, /* p */ + d_backline, /* p */ rescan, /* q */ d_rename, /* r */ rescan, /* s */ @@ -590,6 +595,56 @@ 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; +} + +static int +d_gotoline(int f, int n) +{ + gotoline(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_forwline(int f, int n) +{ + forwline(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_backline(int f, int n) +{ + backline(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; } /*