diff options
author | Omar Polo <op@cvs.openbsd.org> | 2024-06-04 06:48:35 +0000 |
---|---|---|
committer | Omar Polo <op@cvs.openbsd.org> | 2024-06-04 06:48:35 +0000 |
commit | 20838781e9d278d36859ece0569d0647e7d8163f (patch) | |
tree | bac12b45521948ba1bea243f0224d8610470778c | |
parent | 4ae5b24e964a1bd0588d7f25d263de60f67368ed (diff) |
add dired-up-directory bound to ^ to go up on directory in dired buffers
diff from Dante Catalfamo (date [at] lambda [dot] cx) with some minor
style nits and the manpage bits from me.
ok florian@
-rw-r--r-- | usr.bin/mg/dired.c | 39 | ||||
-rw-r--r-- | usr.bin/mg/mg.1 | 8 |
2 files changed, 41 insertions, 6 deletions
diff --git a/usr.bin/mg/dired.c b/usr.bin/mg/dired.c index 5cb747c3746..128ed0a31e0 100644 --- a/usr.bin/mg/dired.c +++ b/usr.bin/mg/dired.c @@ -1,4 +1,4 @@ -/* $OpenBSD: dired.c,v 1.102 2023/03/08 04:43:11 guenther Exp $ */ +/* $OpenBSD: dired.c,v 1.103 2024/06/04 06:48:34 op Exp $ */ /* This file is in the public domain. */ @@ -34,6 +34,7 @@ static int d_otherwindow(int, int); static int d_undel(int, int); static int d_undelbak(int, int); static int d_findfile(int, int); +static int d_updirectory(int, int); static int d_ffotherwindow(int, int); static int d_expunge(int, int); static int d_copy(int, int); @@ -122,6 +123,10 @@ static PF diredcz[] = { d_create_directory /* + */ }; +static PF diredcaret[] = { + d_updirectory /* ^ */ +}; + static PF direda[] = { d_filevisitalt, /* a */ rescan, /* b */ @@ -172,9 +177,9 @@ static struct KEYMAPE (1) d_backpagemap = { } }; -static struct KEYMAPE (7) diredmap = { - 7, - 7, +static struct KEYMAPE (8) diredmap = { + 8, + 8, rescan, { { @@ -191,6 +196,9 @@ static struct KEYMAPE (7) diredmap = { CCHR('Z'), '+', diredcz, (KEYMAP *) & metamap }, { + '^', '^', diredcaret, NULL + }, + { 'a', 'j', direda, NULL }, { @@ -224,6 +232,7 @@ dired_init(void) funmap_add(d_undel, "dired-unmark", 0); funmap_add(d_undelbak, "dired-unmark-backward", 0); funmap_add(d_killbuffer_cmd, "quit-window", 0); + funmap_add(d_updirectory, "dired-up-directory", 0); maps_add((KEYMAP *)&diredmap, "dired"); dobindkey(fundamental_map, "dired", "^Xd"); } @@ -364,6 +373,28 @@ d_findfile(int f, int n) } int +d_updirectory(int f, int n) +{ + struct buffer *bp; + int ret; + char fname[NFILEN]; + + ret = snprintf(fname, sizeof(fname), "%s..", curbp->b_fname); + if (ret < 0 || (size_t)ret >= sizeof(fname)) + return (ABORT); /* Name is too long. */ + + bp = dired_(fname); + if (bp == NULL) + return (FALSE); + curbp = bp; + if (showbuffer(bp, curwp, WFFULL) != TRUE) + return (FALSE); + if (bp->b_fname[0] != 0) + return (TRUE); + return (readin(fname)); +} + +int d_ffotherwindow(int f, int n) { char fname[NFILEN]; diff --git a/usr.bin/mg/mg.1 b/usr.bin/mg/mg.1 index 4faeb8fb293..ca684157d14 100644 --- a/usr.bin/mg/mg.1 +++ b/usr.bin/mg/mg.1 @@ -1,7 +1,7 @@ -.\" $OpenBSD: mg.1,v 1.136 2023/10/16 08:33:16 op Exp $ +.\" $OpenBSD: mg.1,v 1.137 2024/06/04 06:48:34 op Exp $ .\" This file is in the public domain. .\" -.Dd $Mdocdate: October 16 2023 $ +.Dd $Mdocdate: June 4 2024 $ .Dt MG 1 .Os .Sh NAME @@ -1055,6 +1055,8 @@ dired-next-line dired-shell-command .It + dired-create-directory +.It ^ +dired-up-directory .It a dired-find-alternate-file .It c @@ -1130,6 +1132,8 @@ Remove the deletion flag for the file on the current line. .It Ic dired-unmark-backward Remove the deletion flag from the file listed on the previous line of the dired buffer, then move up to that line. +.It Ic dired-up-directory +Open a dired buffer in the parent directory. .It Ic quit-window Close the current dired buffer. .El |