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;