Index | Thread | Search

From:
Crystal Kolipe <kolipe.c@exoticsilicon.com>
Subject:
Re: Fix for vi editing mode in sftp(1) (PING)
To:
Walter Alejandro Iglesias <wai@roquesor.com>, Damien Miller <djm@mindrot.org>, tech@openbsd.org
Date:
Tue, 20 Jan 2026 13:45:19 +0000

Download raw body.

Thread
On Tue, Jan 20, 2026 at 12:33:53PM +0000, Stuart Henderson wrote:
> I think using the same variable for two different purposes makes
> things more confusing.

It does.

> I do have a small improvement to the previous diff (changed the
> comment, no code change).

OK by me for this version.

> Index: sftp.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/ssh/sftp.c,v
> diff -u -p -r1.247 sftp.c
> --- sftp.c	13 Oct 2025 00:54:29 -0000	1.247
> +++ sftp.c	20 Jan 2026 12:33:25 -0000
> @@ -2204,6 +2204,7 @@ interactive_loop(struct sftp_conn *conn,
>  	char *remote_path;
>  	char *dir = NULL, *startdir = NULL;
>  	char cmd[2048];
> +	const char *editor;
>  	int err, interactive;
>  	EditLine *el = NULL;
>  	History *hl = NULL;
> @@ -2239,6 +2240,10 @@ interactive_loop(struct sftp_conn *conn,
>  		el_set(el, EL_BIND, "\\e\\e[D", "ed-prev-word", NULL);
>  		/* make ^w match ksh behaviour */
>  		el_set(el, EL_BIND, "^w", "ed-delete-prev-word", NULL);
> +
> +		/* el_source() may have changed EL_EDITOR to vi */
> +		if (el_get(el, EL_EDITOR, &editor) == 0 && editor[0] == 'v')
> +			el_set(el, EL_BIND, "^[", "vi-command-mode", NULL);
>  	}
> 
>  	if ((remote_path = sftp_realpath(conn, ".")) == NULL)