diff options
author | Mark Lumsden <lum@cvs.openbsd.org> | 2016-01-02 10:39:20 +0000 |
---|---|---|
committer | Mark Lumsden <lum@cvs.openbsd.org> | 2016-01-02 10:39:20 +0000 |
commit | 0bb664c34d5982a5f8be531fca70341fe4d41229 (patch) | |
tree | 8e2dfec3fd1f07295eaaec27eb233aebd9c2b739 | |
parent | 04d43ec6e85627acbd32646b1d235f9290465596 (diff) |
Add dired-find-alternate-file.
-rw-r--r-- | usr.bin/mg/def.h | 3 | ||||
-rw-r--r-- | usr.bin/mg/dired.c | 20 | ||||
-rw-r--r-- | usr.bin/mg/file.c | 18 | ||||
-rw-r--r-- | usr.bin/mg/mg.1 | 9 |
4 files changed, 39 insertions, 11 deletions
diff --git a/usr.bin/mg/def.h b/usr.bin/mg/def.h index 21bc78cb4fd..51fd9ebdb12 100644 --- a/usr.bin/mg/def.h +++ b/usr.bin/mg/def.h @@ -1,4 +1,4 @@ -/* $OpenBSD: def.h,v 1.153 2015/12/29 19:44:32 lum Exp $ */ +/* $OpenBSD: def.h,v 1.154 2016/01/02 10:39:19 lum Exp $ */ /* This file is in the public domain. */ @@ -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); diff --git a/usr.bin/mg/dired.c b/usr.bin/mg/dired.c index 668bb325a2c..33cfc57a5fb 100644 --- a/usr.bin/mg/dired.c +++ b/usr.bin/mg/dired.c @@ -1,4 +1,4 @@ -/* $OpenBSD: dired.c,v 1.81 2015/12/11 20:21:23 mmcc Exp $ */ +/* $OpenBSD: dired.c,v 1.82 2016/01/02 10:39:19 lum Exp $ */ /* This file is in the public domain. */ @@ -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 @@ -840,6 +843,17 @@ d_backline (int f, int 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)); +} + /* * XXX dname needs to have enough place to store an additional '/'. */ diff --git a/usr.bin/mg/file.c b/usr.bin/mg/file.c index 27b379de43c..6483b6b5c8f 100644 --- a/usr.bin/mg/file.c +++ b/usr.bin/mg/file.c @@ -1,4 +1,4 @@ -/* $OpenBSD: file.c,v 1.99 2015/10/29 19:46:47 lum Exp $ */ +/* $OpenBSD: file.c,v 1.100 2016/01/02 10:39:19 lum Exp $ */ /* This file is in the public domain. */ @@ -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; if (getbufcwd(fname, sizeof(fname)) != TRUE) fname[0] = '\0'; @@ -107,11 +105,21 @@ filevisitalt(int f, int n) else if (bufp[0] == '\0') return (FALSE); + return (do_filevisitalt(fname)); +} + +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) diff --git a/usr.bin/mg/mg.1 b/usr.bin/mg/mg.1 index 4edb05d0a5d..19fa0c3097c 100644 --- a/usr.bin/mg/mg.1 +++ b/usr.bin/mg/mg.1 @@ -1,7 +1,7 @@ -.\" $OpenBSD: mg.1,v 1.100 2015/12/30 16:53:17 lum Exp $ +.\" $OpenBSD: mg.1,v 1.101 2016/01/02 10:39:19 lum Exp $ .\" This file is in the public domain. .\" -.Dd $Mdocdate: December 30 2015 $ +.Dd $Mdocdate: January 2 2016 $ .Dt MG 1 .Os .Sh NAME @@ -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 of the dired buffer. 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 in the dired buffer. .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. |