By shuffling find-alternate-file around we have
dired-find-alternate-file as well. ok?
-lum
Index: def.h
===================================================================
RCS file: /cvs/src/usr.bin/mg/def.h,v
retrieving revision 1.153
diff -u -p -u -p -r1.153 def.h
--- def.h 29 Dec 2015 19:44:32 -0000 1.153
+++ def.h 30 Dec 2015 13:20:35 -0000
@@ -377,6 +377,7 @@ int makebkfile(int, int);
int writeout(FILE **, struct buffer *, char *);
void upmodes(struct buffer *);
size_t xbasename(char *, const char *, size_t);
+int do_filevisitalt(char *);
/* line.c X */
struct line *lalloc(int);
Index: dired.c
===================================================================
RCS file: /cvs/src/usr.bin/mg/dired.c,v
retrieving revision 1.81
diff -u -p -u -p -r1.81 dired.c
--- dired.c 11 Dec 2015 20:21:23 -0000 1.81
+++ dired.c 30 Dec 2015 13:20:35 -0000
@@ -51,6 +51,7 @@ static int d_forwline(int, int);
static int d_backline(int, int);
static int d_killbuffer_cmd(int, int);
static int d_refreshbuffer(int, int);
+static int d_filevisitalt(int, int);
static void reaper(int);
static struct buffer *refreshbuffer(struct buffer *);
static int createlist(struct buffer *);
@@ -120,7 +121,9 @@ static PF diredcz[] = {
d_create_directory /* + */
};
-static PF diredc[] = {
+static PF direda[] = {
+ d_filevisitalt, /* a */
+ rescan, /* b */
d_copy, /* c */
d_del, /* d */
d_findfile, /* e */
@@ -184,7 +187,7 @@ static struct KEYMAPE (7) diredmap = {
CCHR('Z'), '+', diredcz, (KEYMAP *) & metamap
},
{
- 'c', 'g', diredc, NULL
+ 'a', 'g', direda, NULL
},
{
'n', 'x', diredn, NULL
@@ -838,6 +841,17 @@ d_backline (int f, int n)
{
backline(f | FFRAND, n);
return (d_warpdot(curwp->w_dotp, &curwp->w_doto));
+}
+
+int
+d_filevisitalt (int f, int n)
+{
+ char fname[NFILEN];
+
+ if (d_makename(curwp->w_dotp, fname, sizeof(fname)) == ABORT)
+ return (FALSE);
+
+ return(do_filevisitalt(fname));
}
/*
Index: file.c
===================================================================
RCS file: /cvs/src/usr.bin/mg/file.c,v
retrieving revision 1.99
diff -u -p -u -p -r1.99 file.c
--- file.c 29 Oct 2015 19:46:47 -0000 1.99
+++ file.c 30 Dec 2015 13:20:35 -0000
@@ -94,9 +94,7 @@ filevisit(int f, int n)
int
filevisitalt(int f, int n)
{
- struct buffer *bp;
- char fname[NFILEN], *bufp, *adjf;
- int status;
+ char fname[NFILEN], *bufp, *fn;
if (getbufcwd(fname, sizeof(fname)) != TRUE)
fname[0] = '\0';
@@ -107,11 +105,23 @@ filevisitalt(int f, int n)
else if (bufp[0] == '\0')
return (FALSE);
+ fn = fname;
+
+ return (do_filevisitalt(fn));
+}
+
+int
+do_filevisitalt(char *fn)
+{
+ struct buffer *bp;
+ int status;
+ char *adjf;
+
status = killbuffer(curbp);
if (status == ABORT || status == FALSE)
return (ABORT);
- adjf = adjustname(fname, TRUE);
+ adjf = adjustname(fn, TRUE);
if (adjf == NULL)
return (FALSE);
if (fisdir(adjf) == TRUE)
Index: mg.1
===================================================================
RCS file: /cvs/src/usr.bin/mg/mg.1,v
retrieving revision 1.99
diff -u -p -u -p -r1.99 mg.1
--- mg.1 29 Dec 2015 19:44:32 -0000 1.99
+++ mg.1 30 Dec 2015 13:20:35 -0000
@@ -952,6 +952,8 @@ dired-next-line
dired-shell-command
.It +
dired-create-directory
+.It a
+dired-find-alternate-file
.It c
dired-do-copy
.It d and C-d
@@ -988,6 +990,9 @@ Copy the file listed on the current line
Delete the files that have been flagged for deletion.
.It dired-do-rename
Rename the file listed on the current line of the dired buffer.
+.It dired-find-alternate-file
+Replace the current dired buffer with an alternate one as specified
+by the position of the cursor.
.It dired-find-file
Open the file on the current line of the dired buffer.
If the cursor is on a directory it will be opened in dired mode.