@@ -361,6 +361,8 @@ include::config/diff.txt[]
include::config/difftool.txt[]
+include::config/editor.txt[]
+
include::config/extensions.txt[]
include::config/fastimport.txt[]
new file mode 100644
@@ -0,0 +1,8 @@
+editor.stty::
+ A boolean variable that tells git to save and restore its
+ terminal settings when the editor is invoked, to avoid
+ being affected by garbled input/output, if it misbehaves.
++
+It defaults to 'true' if your editor is "vi" (which is
+also the default if there is no `core.editor`), or to
+'false' otherwise.
@@ -50,7 +50,7 @@ const char *git_sequence_editor(void)
static int prepare_term(const char *editor)
{
- int need_saverestore = !strcmp(editor, "vi");
+ int need_saverestore = !strcmp(editor, DEFAULT_EDITOR);
git_config_get_bool("editor.stty", &need_saverestore);
if (need_saverestore)
@@ -68,8 +68,10 @@ static int launch_specified_editor(const char *editor, const char *path,
struct strbuf realpath = STRBUF_INIT;
const char *args[] = { editor, NULL, NULL };
struct child_process p = CHILD_PROCESS_INIT;
- int ret, sig, need_restore = 0;
- int print_waiting_for_editor = advice_enabled(ADVICE_WAITING_FOR_EDITOR) && isatty(2);
+ int ret, sig, need_restore;
+ int is_interactive = isatty(2);
+ int print_waiting_for_editor = advice_enabled(ADVICE_WAITING_FOR_EDITOR) &&
+ is_interactive;
if (print_waiting_for_editor) {
/*
@@ -94,7 +96,7 @@ static int launch_specified_editor(const char *editor, const char *path,
p.env = env;
p.use_shell = 1;
p.trace2_child_class = "editor";
- need_restore = prepare_term(editor);
+ need_restore = is_interactive ? prepare_term(editor) : 0;
if (start_command(&p) < 0) {
if (need_restore)
restore_term();
Use DEFAULT_EDITOR instead of another hardcoding of "vi". Do a minor refactoring to avoid having to call isatty(2) twice, and while at it, a related reformatting that avoids an overlong line. Only check if we should enable saving/restoring the terminal if the session is interactive. Add documentation for the configuration variable. Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com> --- All of the commit message is meant to be thrown away once/if this is squashed into the previous commit. Signed-off-by could be transformed into a Helped-by if anything could be of use here otherwise. Documentation/config.txt | 2 ++ Documentation/config/editor.txt | 8 ++++++++ editor.c | 10 ++++++---- 3 files changed, 16 insertions(+), 4 deletions(-) create mode 100644 Documentation/config/editor.txt