[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
ksh: set +o emacs-usemeta
- To: tech@openbsd.org
- Subject: ksh: set +o emacs-usemeta
- From: Christian Weisgerber <naddy@mips.inka.de>
- Date: Sat, 14 Jun 2003 21:46:33 +0200
- Content-Disposition: inline
- User-Agent: Mutt/1.4.1i
Currently, our system ksh always interprets the 8th bit as meta
(^[) prefix in emacs command-line editing mode. This means that
you cannot enter 8-bit characters for filenames etc.
The small patch below makes this behavior configurable by way of a
new emacs-usemeta shell option. "set +o emacs-usemeta" and type
away characters with the 8th bit set.
Do we want this? Does anybody care? Comments?
Index: emacs.c
===================================================================
RCS file: /cvs/src/bin/ksh/emacs.c,v
retrieving revision 1.19
diff -u -r1.19 emacs.c
--- emacs.c 16 Apr 2003 23:11:52 -0000 1.19
+++ emacs.c 14 Jun 2003 00:41:06 -0000
@@ -25,7 +25,7 @@
#define CTRL(x) ((x) == '?' ? 0x7F : (x) & 0x1F) /* ASCII */
#define UNCTRL(x) ((x) == 0x7F ? '?' : (x) | 0x40) /* ASCII */
#define META(x) ((x) & 0x7f)
-#define ISMETA(x) (x_usemeta && ((x) & 0x80))
+#define ISMETA(x) (Flag(FEMACSUSEMETA) && ((x) & 0x80))
/* values returned by keyboard functions */
@@ -101,7 +101,6 @@
static int x_displen;
static int x_arg; /* general purpose arg */
static int x_arg_defaulted;/* x_arg not explicitly set; defaulted to 1 */
-static int x_usemeta; /* no 8-bit ascii, meta = ESC */
static int xlp_valid;
/* end from 4.9 edit.h } */
@@ -1530,7 +1529,7 @@
*/
locale = setlocale(LC_CTYPE, NULL);
if (locale == NULL || !strcmp(locale, "C") || !strcmp(locale, "POSIX"))
- x_usemeta = 1;
+ Flag(FEMACSUSEMETA) = 1;
}
static void
Index: ksh.1tbl
===================================================================
RCS file: /cvs/src/bin/ksh/ksh.1tbl,v
retrieving revision 1.53
diff -u -r1.53 ksh.1tbl
--- ksh.1tbl 6 Jun 2003 10:05:52 -0000 1.53
+++ ksh.1tbl 14 Jun 2003 19:36:17 -0000
@@ -3352,6 +3352,9 @@
.It Ic emacs
Enable BRL emacs-like command-line editing (interactive shells only); see
.Sx Emacs editing mode .
+.It Ic emacs-usemeta
+In emacs command-line editing, use the 8th bit as meta (^[) prefix.
+This is the default.
.It Ic gmacs
Enable gmacs-like command-line editing (interactive shells only).
Currently identical to emacs editing except that transpose (^T) acts slightly
@@ -4307,8 +4310,7 @@
.Ic emacs
option is set, interactive input line editing is enabled.
Warning: This mode is
-slightly different from the emacs mode in the original Korn shell and the 8th
-bit is stripped in emacs mode.
+slightly different from the emacs mode in the original Korn shell.
In this mode, various editing commands
(typically bound to one or more control characters) cause immediate actions
without waiting for a newline.
Index: misc.c
===================================================================
RCS file: /cvs/src/bin/ksh/misc.c,v
retrieving revision 1.16
diff -u -r1.16 misc.c
--- misc.c 16 Apr 2003 23:11:52 -0000 1.16
+++ misc.c 14 Jun 2003 00:30:44 -0000
@@ -143,6 +143,7 @@
{ (char *) 0, 'c', OF_CMDLINE },
#ifdef EMACS
{ "emacs", 0, OF_ANY },
+ { "emacs-usemeta", 0, OF_ANY }, /* non-standard */
#endif
{ "errexit", 'e', OF_ANY },
#ifdef EMACS
Index: sh.h
===================================================================
RCS file: /cvs/src/bin/ksh/sh.h,v
retrieving revision 1.13
diff -u -r1.13 sh.h
--- sh.h 16 May 2003 19:58:57 -0000 1.13
+++ sh.h 14 Jun 2003 00:41:47 -0000
@@ -474,6 +474,7 @@
FCOMMAND, /* -c: (invocation) execute specified command */
#ifdef EMACS
FEMACS, /* emacs command editing */
+ FEMACSUSEMETA, /* use 8th bit as meta */
#endif
FERREXIT, /* -e: quit on error */
#ifdef EMACS
--
Christian "naddy" Weisgerber naddy@mips.inka.de