summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOmar Polo <op@cvs.openbsd.org>2024-06-04 06:48:35 +0000
committerOmar Polo <op@cvs.openbsd.org>2024-06-04 06:48:35 +0000
commit20838781e9d278d36859ece0569d0647e7d8163f (patch)
treebac12b45521948ba1bea243f0224d8610470778c
parent4ae5b24e964a1bd0588d7f25d263de60f67368ed (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.c39
-rw-r--r--usr.bin/mg/mg.18
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