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

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

From
Kaartic Sivaraam <kaartic.sivaraam@gmail.com>
Date
Nov 27, 2017, 17:17 UTC
Message-ID
<1bb4eeb1-eaaf-11ec-8215-08d3490577a8@gmail.com>
In-Reply-To
<20171127134716.69471-1-lars.schneider@autodesk.com>
On Monday 27 November 2017 07:17 PM, lars.schneider@autodesk.com 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.
Show 48 quoted lines
> +		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
> 
Previous: lars.schneider@autodesk.comNext: Eric Sunshine
Message 2 of 11 in “launch_editor(): indicate that Git waits for user input”
  1. launch_editor(): indicate that Git waits for user inputlars.schneider@autodesk.com, Nov 27, 2017
  2. Kaartic SivaraamNov 27, 2017
  3. Eric SunshineNov 27, 2017
  4. Lars SchneiderNov 27, 2017
  5. brian m. carlsonNov 27, 2017
  6. Jeff KingNov 27, 2017
  7. Junio C HamanoNov 28, 2017
  8. Lars SchneiderNov 28, 2017
  9. brian m. carlsonNov 29, 2017
  10. Junio C HamanoNov 27, 2017
  11. Lars SchneiderNov 28, 2017

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.