Index | Thread | Search

From:
Walter Alejandro Iglesias <wai@roquesor.com>
Subject:
Fix for vi editing mode in sftp(1) (PING)
To:
tech@openbsd.org
Date:
Mon, 19 Jan 2026 11:09:58 +0100

Download raw body.

Thread
On Sun, Dec 21, 2025 at 11:49:36AM +0100, Walter Alejandro Iglesias wrote:
> Currently vi editing mode doesn't work in sftp(1), only emacs.  Since
> editline(3) support is already included in sftp, it doesn't hurt to make
> it fully work, right?
> 
> To test it you need this:
> 
>   $ cat ~/.editrc
>   sftp:bind -v
> 


Index: sftp.c
===================================================================
RCS file: /cvs/src/usr.bin/ssh/sftp.c,v
diff -u -p -u -p -r1.247 sftp.c
--- sftp.c	13 Oct 2025 00:54:29 -0000	1.247
+++ sftp.c	19 Dec 2025 15:21:45 -0000
@@ -2210,6 +2210,7 @@ interactive_loop(struct sftp_conn *conn,
 	HistEvent hev;
 	extern char *__progname;
 	struct complete_ctx complete_ctx;
+	const char *editor;
 
 	if (!batchmode && isatty(STDIN_FILENO)) {
 		if ((el = el_init(__progname, stdin, stdout, stderr)) == NULL)
@@ -2239,6 +2240,11 @@ 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);
+
+		/* Vi command mode */
+		el_get(el, EL_EDITOR, &editor);
+		if (editor[0] == 'v')
+			el_set(el, EL_BIND, "^[", "vi-command-mode", NULL);
 	}
 
 	if ((remote_path = sftp_realpath(conn, ".")) == NULL)



-- 
Walter