Why only % rather than have -e take an argument like ssh?
On Wed, Mar 13, 2019 at 02:35:06PM +0200, Artturi Alm wrote: > Hi, > > i don't have issues with tilde when using locally, but i mostly ssh to > reach cu, and too many times i've forgotten to configure ssh/use -e, > with this cu(1) becomes safer/easier to use for us with non-english > keyboard. > ~tilde is certainly annoying when it's three key presses alone, > and then you mostly get only one shot at trying.. > > is this bloat? > > -Artturi > > > diff --git a/usr.bin/cu/command.c b/usr.bin/cu/command.c > index c07fe73aeca..d97db3b56de 100644 > --- a/usr.bin/cu/command.c > +++ b/usr.bin/cu/command.c > @@ -223,6 +223,8 @@ start_record(void) > void > do_command(char c) > { > + char esc = alt_esc ? '%' : '~'; > + > if (restricted && strchr("CRX$>", c) != NULL) { > cu_warnx("~%c command is not allowed in restricted mode", c); > return; > @@ -271,15 +273,16 @@ do_command(char c) > break; > case '?': > printf("\r\n" > - "~# send break\r\n" > - "~$ pipe local command to remote host\r\n" > - "~> send file to remote host\r\n" > - "~C connect program to remote host\r\n" > - "~D de-assert DTR line briefly\r\n" > - "~R start recording to file\r\n" > - "~S set speed\r\n" > - "~X send file with XMODEM\r\n" > - "~? get this summary\r\n" > + "%c# send break\r\n" > + "%c$ pipe local command to remote host\r\n" > + "%c> send file to remote host\r\n" > + "%cC connect program to remote host\r\n" > + "%cD de-assert DTR line briefly\r\n" > + "%cR start recording to file\r\n" > + "%cS set speed\r\n" > + "%cX send file with XMODEM\r\n" > + "%c? get this summary\r\n", > + esc, esc, esc, esc, esc, esc, esc, esc, esc > ); > break; > } > diff --git a/usr.bin/cu/cu.1 b/usr.bin/cu/cu.1 > index 104a6ea7893..1d609e14947 100644 > --- a/usr.bin/cu/cu.1 > +++ b/usr.bin/cu/cu.1 > @@ -35,7 +35,7 @@ > .Nd serial terminal emulator > .Sh SYNOPSIS > .Nm > -.Op Fl dr > +.Op Fl der > .Op Fl l Ar line > .Op Fl s Ar speed | Fl Ar speed > .Nm > @@ -55,6 +55,10 @@ The options are as follows: > Specify that the line is directly connected and > .Nm > should not allow the driver to block waiting for a carrier to be detected. > +.It Fl e > +Use a percent sign > +.Pq Ql % > +as the escape character instead of tilde. > .It Fl l Ar line > Specify the line to use. > Either of the forms like > diff --git a/usr.bin/cu/cu.c b/usr.bin/cu/cu.c > index 03a2df4181f..b66f4698605 100644 > --- a/usr.bin/cu/cu.c > +++ b/usr.bin/cu/cu.c > @@ -41,6 +41,7 @@ FILE *record_file; > struct termios saved_tio; > struct bufferevent *input_ev; > struct bufferevent *output_ev; > +int alt_esc = 0; > int is_direct = -1; > int restricted = 0; > const char *line_path = NULL; > @@ -53,7 +54,7 @@ struct event sighup_ev; > enum { > STATE_NONE, > STATE_NEWLINE, > - STATE_TILDE > + STATE_ESCAPE > } last_state = STATE_NEWLINE; > > __dead void usage(void); > @@ -67,7 +68,7 @@ void try_remote(const char *, const char *, > const char *); > __dead void > usage(void) > { > - fprintf(stderr, "usage: %s [-dr] [-l line] [-s speed | -speed]\n", > + fprintf(stderr, "usage: %s [-der] [-l line] [-s speed | -speed]\n", > __progname); > fprintf(stderr, " %s [host]\n", __progname); > exit(1); > @@ -101,11 +102,14 @@ main(int argc, char **argv) > errx(1, "speed asprintf"); > } > > - while ((opt = getopt(argc, argv, "drl:s:")) != -1) { > + while ((opt = getopt(argc, argv, "derl:s:")) != -1) { > switch (opt) { > case 'd': > is_direct = 1; > break; > + case 'e': > + alt_esc = 1; > + break; > case 'r': > if (pledge("stdio rpath wpath tty", NULL) == -1) > err(1, "pledge"); > @@ -308,14 +312,14 @@ stream_read(struct bufferevent *bufev, void *data) > last_state = STATE_NEWLINE; > break; > case STATE_NEWLINE: > - if (state_change && *ptr == '~') { > - last_state = STATE_TILDE; > + if (state_change && *ptr == "~%"[alt_esc]) { > + last_state = STATE_ESCAPE; > continue; > } > if (*ptr != '\r') > last_state = STATE_NONE; > break; > - case STATE_TILDE: > + case STATE_ESCAPE: > do_command(*ptr); > last_state = STATE_NEWLINE; > continue; > diff --git a/usr.bin/cu/cu.h b/usr.bin/cu/cu.h > index 2a7ca45d414..9d8ea3fc86a 100644 > --- a/usr.bin/cu/cu.h > +++ b/usr.bin/cu/cu.h > @@ -23,6 +23,7 @@ > void do_command(char); > > /* cu.c */ > +extern int alt_esc; > extern int restricted; > extern FILE *record_file; > extern struct termios saved_tio;