Hi,

for completeness, would anything like the diff below be acceptable?

I might begin using /etc/remote soon, and I found the old remote.5[0]
to have had this, and also described as such in remote(5) on
docs.oracle.com, so i chose to reuse "es".

-Artturi

[0]: http://man.openbsd.org/OpenBSD-5.7/remote.5


diff --git a/share/man/man5/remote.5 b/share/man/man5/remote.5
index 2a50ca97d8a..b0d046a266a 100644
--- a/share/man/man5/remote.5
+++ b/share/man/man5/remote.5
@@ -88,6 +88,15 @@ If this file refers to a terminal line,
 .Xr cu 1
 attempts to perform an exclusive open on the device to ensure only
 one user at a time has access to the port.
+.It Sy \&es
+(str)
+The escape character for
+.Xr cu 1 .
+This should be a single character, or
+.Ql ^
+followed by a letter.
+The default is
+.Ql ~ .
 .El
 .Sh FILES
 .Bl -tag -width /etc/remote -compact
diff --git a/usr.bin/cu/cu.1 b/usr.bin/cu/cu.1
index 5daab4bc074..61c723a45e4 100644
--- a/usr.bin/cu/cu.1
+++ b/usr.bin/cu/cu.1
@@ -105,6 +105,7 @@ uses the
 .Xr remote 5
 database to retrieve the
 .Sy dc Pq directly connected ,
+.Sy es Pq escape character ,
 .Sy dv Pq device
 and
 .Sy br Pq baud rate
diff --git a/usr.bin/cu/cu.c b/usr.bin/cu/cu.c
index 697f72d3418..cba4ff1601d 100644
--- a/usr.bin/cu/cu.c
+++ b/usr.bin/cu/cu.c
@@ -41,7 +41,7 @@ FILE                  *record_file;
 struct termios          saved_tio;
 struct bufferevent     *input_ev;
 struct bufferevent     *output_ev;
-int                     escape_char = '~';
+int                     escape_char = -1;
 int                     is_direct = -1;
 int                     restricted = 0;
 const char             *line_path = NULL;
@@ -159,6 +159,8 @@ main(int argc, char **argv)
                }
        }
 
+       if (escape_char == -1)
+               escape_char = '~';
        if (line_path == NULL)
                line_path = "/dev/cua00";
        if (line_speed == -1)
@@ -402,6 +404,25 @@ try_remote(const char *host, const char *path, const char 
*entry)
        if (line_path == NULL && cgetstr(cp, "dv", &s) >= 0)
                line_path = s;
 
+       s = NULL;
+       if (escape_char == -1 && cgetustr(cp, "es", &s) >= 0) {
+               switch (strnlen(s, 3)) {
+               case 1:
+                       escape_char = (u_char)s[0];
+                       break;
+               case 2:
+                       if (s[0] == '^' &&
+                           (u_char)s[1] >= 64 && (u_char)s[1] < 128) {
+                               escape_char = (u_char)s[1] & 31;
+                               break;
+                       }
+                       /* FALLTHROUGH */
+               default:
+                       cu_warnx("invalid escape character: %s", s);
+               }
+               free(s);
+       }
+
        if (line_speed == -1 && cgetnum(cp, "br", &l) >= 0) {
                if (l < 0 || l > INT_MAX)
                        cu_errx(1, "speed out of range");

Reply via email to