Web lists-archives.com

Re: [PATCH v3] launch_editor(): indicate that Git waits for user input




On Monday 27 November 2017 07:17 PM, lars.schneider@xxxxxxxxxxxx wrote:

Show a message in the original terminal and get rid of it when the
editor returns.


"... except in the case when an error occurs." could  be included if needed.
+		static const char *close_notice = NULL;
+

IIRC, this variable is bound to be `static` for sake of future proofing. So, I guess you could use the following suggestion of Eric Sunshine in the below conditional.

    If you reverse this condition to say (!close_notice && isatty(2)),
    then you save an isatty() invocation each time if close_notice is
    already assigned.

+		if (isatty(2) && !close_notice) {
+			char *term = getenv("TERM");
+
+			if (term && strcmp(term, "dumb"))
+				/*
+				 * go back to the beginning and erase the
+				 * entire line if the terminal is capable
+				 * to do so, to avoid wasting the vertical
+				 * space.
+				 */
+				close_notice = "\r\033[K";
+			else if (term && strstr(term, "emacsclient"))
+				/*
+				 * `emacsclient` (or `emacsclientw` on Windows) already prints
+				 * ("Waiting for Emacs...") if a file is opened for editing.
+				 * Therefore, we don't need to print the editor launch info.
+				 */
+				;
+			else
+				/* otherwise, complete and waste the line */
+				close_notice = _("done.\n");
+		}
+
+		if (close_notice) {
+			fprintf(stderr, _("Launched editor. Waiting for your input... "));
+			fflush(stderr);
+		}

  		p.argv = args;
  		p.env = env;
@@ -53,11 +82,14 @@ int launch_editor(const char *path, struct strbuf *buffer, const char *const *en
  		sig = ret - 128;
  		sigchain_pop(SIGINT);
  		sigchain_pop(SIGQUIT);
+
  		if (sig == SIGINT || sig == SIGQUIT)
  			raise(sig);
  		if (ret)
  			return error("There was a problem with the editor '%s'.",
  					editor);
+		if (close_notice)
+			fputs(close_notice, stderr);
  	}

  	if (!buffer)
--
2.15.0