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");
