summaryrefslogtreecommitdiff
path: root/usr.bin/mg
diff options
context:
space:
mode:
authorMark Lumsden <lum@cvs.openbsd.org>2019-07-03 18:11:08 +0000
committerMark Lumsden <lum@cvs.openbsd.org>2019-07-03 18:11:08 +0000
commitf063ac3cbe721eb92512c87b11f9434bf6385d68 (patch)
tree334d7241c1c95bd4f04531a1125464b378f9ff92 /usr.bin/mg
parenta90effbf4d01e073bf35840c42fcc0757524843c (diff)
selfinsert() can't be called directly from a startup file or by
'eval-current-buffer' since it is by design, meant to be called interactively as characters are typed in a buffer. ask_selfinsert() allows selfinsert() to be used by excline(). Having ask_selfinsert() helps with regression testing. No manual page entry since use case is a bit obscure. See 'insert' command.
Diffstat (limited to 'usr.bin/mg')
-rw-r--r--usr.bin/mg/def.h3
-rw-r--r--usr.bin/mg/funmap.c3
-rw-r--r--usr.bin/mg/kbd.c25
3 files changed, 28 insertions, 3 deletions
diff --git a/usr.bin/mg/def.h b/usr.bin/mg/def.h
index fab4bde10ad..1a571d9b1ca 100644
--- a/usr.bin/mg/def.h
+++ b/usr.bin/mg/def.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: def.h,v 1.161 2019/07/02 16:25:39 lum Exp $ */
+/* $OpenBSD: def.h,v 1.162 2019/07/03 18:11:07 lum Exp $ */
/* This file is in the public domain. */
@@ -490,6 +490,7 @@ int rescan(int, int);
int universal_argument(int, int);
int digit_argument(int, int);
int negative_argument(int, int);
+int ask_selfinsert(int, int);
int selfinsert(int, int);
int quote(int, int);
diff --git a/usr.bin/mg/funmap.c b/usr.bin/mg/funmap.c
index cb555dfee9a..0d0c026d546 100644
--- a/usr.bin/mg/funmap.c
+++ b/usr.bin/mg/funmap.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: funmap.c,v 1.57 2019/07/02 16:25:39 lum Exp $ */
+/* $OpenBSD: funmap.c,v 1.58 2019/07/03 18:11:07 lum Exp $ */
/* This file is in the public domain */
@@ -179,6 +179,7 @@ static struct funmap functnames[] = {
{searchagain, "search-again",},
{backsearch, "search-backward",},
{forwsearch, "search-forward",},
+ {ask_selfinsert, "self-insert-char",},
{selfinsert, "self-insert-command",},
{sentencespace, "sentence-end-double-space",},
#ifdef REGEX
diff --git a/usr.bin/mg/kbd.c b/usr.bin/mg/kbd.c
index cc3e93b7649..06d6c9fcf48 100644
--- a/usr.bin/mg/kbd.c
+++ b/usr.bin/mg/kbd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kbd.c,v 1.32 2019/06/26 16:54:29 lum Exp $ */
+/* $OpenBSD: kbd.c,v 1.33 2019/07/03 18:11:07 lum Exp $ */
/* This file is in the public domain. */
@@ -390,6 +390,29 @@ selfinsert(int f, int n)
}
/*
+ * selfinsert() can't be called directly from a startup file or by
+ * 'eval-current-buffer' since it is by design, meant to be called interactively
+ * as characters are typed in a buffer. ask_selfinsert() allows selfinsert() to
+ * be used by excline(). Having ask_selfinsert() helps with regression testing.
+ * No manual page entry since use case is a bit obscure. See 'insert' command.
+ */
+int
+ask_selfinsert(int f, int n)
+{
+ char *c, cbuf[2];
+
+ if ((c = eread("Insert a character: ", cbuf, sizeof(cbuf),
+ EFNEW)) == NULL || (c[0] == '\0'))
+ return (ABORT);
+
+ key.k_chars[0] = *c;
+ key.k_chars[1] = '\0';
+ key.k_count = 1;
+
+ return (selfinsert(FFRAND, 1));
+}
+
+/*
* This could be implemented as a keymap with everything defined as self-insert.
*/
int