Re: [PATCH/RFC] launch_editor: ignore SIGINT while the editor has control
- From
Paul Fox <pgf@foxharp.boston.ma.us>
- Date
- Nov 7, 2012, 23:35 UTC
- Message-ID
- <20121107233515.107ED2E8089@grass.foxharp.boston.ma.us>
- In-Reply-To
- <20121107220027.GA17463@shrek.podlesie.net>
the user's editor likely catches SIGINT (ctrl-C). but if the user spawns a command from the editor and uses ctrl-C to kill that command, the SIGINT will likely also kill git itself. (depending on the editor, this can leave the terminal in an unusable state.)
Signed-off-by: Paul Fox <pgf@foxharp.boston.ma.us> ---
krzysztof wrote: ... > editor.c: In function 'launch_editor': > editor.c:42:3: warning: implicit declaration of function 'sigchain_push' [-Wimplicit-function-declaration] > editor.c:44:3: warning: implicit declaration of function 'sigchain_pop' [-Wimplicit-function-declaration]
sigh. i had that initially, lost the patch, and then recreated without it. but i'm surprised my build (i did rebuild! :-) doesn't emit those errors. in any case, here's the fixed patch.
editor.c | 7 ++++++- 1 files changed, 6 insertions(+), 1 deletions(-)
diff --git a/editor.c b/editor.c index d834003..3ca361b 100644 --- a/editor.c +++ b/editor.c @@ -1,6 +1,7 @@ #include "cache.h" #include "strbuf.h" #include "run-command.h" +#include "sigchain.h" #ifndef DEFAULT_EDITOR #define DEFAULT_EDITOR "vi" @@ -37,8 +38,12 @@ int launch_editor(const char *path, struct strbuf *buffer, const char *const *en if (strcmp(editor, ":")) { const char *args[] = { editor, path, NULL }; + int ret; - if (run_command_v_opt_cd_env(args, RUN_USING_SHELL, NULL, env)) + sigchain_push(SIGINT, SIG_IGN); + ret = run_command_v_opt_cd_env(args, RUN_USING_SHELL, NULL, env); + sigchain_pop(SIGINT); + if (ret) return error("There was a problem with the editor '%s'.", editor); }
-- 1.7.5.4 =--------------------- paul fox, pgf@foxharp.boston.ma.us (arlington, ma, where it's 26.6 degrees)