git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[RFC PATCH 2/2] editor: save and reset terminal after calling EDITOR

From
Carlo Marcelo Arenas Belón <carenas@gmail.com>
Date
Oct 2, 2021, 15:36 UTC
Message-ID
<20211002153654.52443-3-carenas@gmail.com>
In-Reply-To
<20211002153654.52443-1-carenas@gmail.com>

When EDITOR is invoked to modify a commit message, it will likely change the terminal settings, and if it misbehaves will leave the terminal output as shown in microsoft/terminal#9359.

Instead use the recently added {push,pop}_term() functions to save the terminal configuration and recover safely.

[1] https://github.com/microsoft/terminal/issues/9359
Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>
---
 editor.c | 4 ++++
 1 file changed, 4 insertions(+)
diff --git a/editor.c b/editor.c
index 6303ae0ab0..9095841642 100644
--- a/editor.c
+++ b/editor.c
@@ -3,6 +3,7 @@
 #include "strbuf.h"
 #include "run-command.h"
 #include "sigchain.h"
+#include "compat/terminal.h"
 
 #ifndef DEFAULT_EDITOR
 #define DEFAULT_EDITOR "vi"
@@ -83,7 +84,9 @@ static int launch_specified_editor(const char *editor, const char *path,
 		p.env = env;
 		p.use_shell = 1;
 		p.trace2_child_class = "editor";
+		push_term(1);
 		if (start_command(&p) < 0) {
+			pop_term();
 			strbuf_release(&realpath);
 			return error("unable to start editor '%s'", editor);
 		}
@@ -91,6 +94,7 @@ static int launch_specified_editor(const char *editor, const char *path,
 		sigchain_push(SIGINT, SIG_IGN);
 		sigchain_push(SIGQUIT, SIG_IGN);
 		ret = finish_command(&p);
+		pop_term();
 		strbuf_release(&realpath);
 		sig = ret - 128;
 		sigchain_pop(SIGINT);
-- 
2.33.0.955.gee03ddbf0e
Previous: Carlo Marcelo Arenas BelónNext: Carlo Marcelo Arenas Belón
Message 3 of 14 in “protect git from a rogue editor”
  1. 0/2 protect git from a rogue editorCarlo Marcelo Arenas Belón, Oct 2, 2021
  2. 1/2 terminal: teach git how to save/restore its terminal settingsCarlo Marcelo Arenas Belón, Oct 2, 2021
  3. 2/2 editor: save and reset terminal after calling EDITORCarlo Marcelo Arenas Belón, Oct 2, 2021
  4. 0/2 protect git from a rogue editorCarlo Marcelo Arenas Belón, Oct 4, 2021
  5. 1/2 terminal: teach git how to save/restore its terminal settingsCarlo Marcelo Arenas Belón, Oct 4, 2021
  6. Junio C HamanoOct 4, 2021
  7. Carlo ArenasOct 4, 2021
  8. Junio C HamanoOct 4, 2021
  9. Carlo ArenasOct 4, 2021
  10. 2/2 editor: save and reset terminal after calling EDITORCarlo Marcelo Arenas Belón, Oct 4, 2021
  11. Junio C HamanoOct 4, 2021
  12. 0/2 protect git from a rogue editorCarlo Marcelo Arenas Belón, Oct 5, 2021
  13. 1/2 terminal: teach git how to save/restore its terminal settingsCarlo Marcelo Arenas Belón, Oct 5, 2021
  14. 2/2 editor: save and reset terminal after calling EDITORCarlo Marcelo Arenas Belón, Oct 5, 2021

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.