From: "Chris Howlett via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Kristoffer Haugsbakk <kristofferhaugsbakk@fastmail.com>,
Chris Howlett <chowlett09@gmail.com>,
Chris Howlett <chowlett09@gmail.com>
Subject: [PATCH v2] help: add prompt-yes setting for autocorrect
Date: Mon, 17 Feb 2025 14:19:20 +0000 [thread overview]
Message-ID: <pull.1852.v2.git.1739801960334.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.1852.git.1736933815236.gitgitgadget@gmail.com>
From: Chris Howlett <chowlett09@gmail.com>
The help.autocorrect functionality is really useful, saving frustration
when a dev fat-fingers a command, and git has a pretty good idea what
was originally intended. The config settings are a nice selection, with
"prompt" asking the user to confirm that they want to run the assumed
command.
However, with "prompt", the choice defaults to "No" - that is, hitting
return will _not_ run the command. For me at least, if git is confident
it knows which command I wanted, it's usually right, and the golden path
would be to run the command.
Therefore this patch adds "prompt-yes" as a counterpart config setting
for help.autocorrect, which does the same as "prompt", but defaults to
"Yes" - hitting return will run the assumed command.
I have not added any tests because the test suite doesn't have any tests
(that I could find) for the "prompt" behaviour - I'm assuming this is
because it's hard/impossible to simulate the interactive terminal prompt
Signed-off-by: Chris Howlett <chowlett09@gmail.com>
---
Add prompt-yes config setting for help.autocorrect
Changes since v1:
* PR rebased against master and fixed up, to account for e21bf2c and
e4542d8
------------------------------------------------------------------------
This is my first patch request to git - please do let me know if I
should be doing something differently!
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1852%2Fasilano%2Fautocorrect-allow-prompt-default-yes-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1852/asilano/autocorrect-allow-prompt-default-yes-v2
Pull-Request: https://github.com/gitgitgadget/git/pull/1852
Range-diff vs v1:
1: b87c772089e ! 1: cade4f1719e help: add prompt-yes setting for autocorrect
@@ Commit message
Signed-off-by: Chris Howlett <chowlett09@gmail.com>
- ## Documentation/config/help.txt ##
-@@ Documentation/config/help.txt: help.autoCorrect::
+ ## Documentation/config/help.adoc ##
+@@ Documentation/config/help.adoc: immediately.
deciseconds (0.1 sec).
- - "immediate": run the suggested command immediately.
+ - "never": don't run or show any suggested command.
- "prompt": show the suggestion and prompt for confirmation to run
-the command.
+the command. The default choice at the prompt is "No"
+ - "prompt-yes": show the suggestion and prompt for confirmation to run
+the command. The default choice at the prompt is "Yes"
- - "never": don't run or show any suggested command.
help.htmlPath::
+ Specify the path where the HTML documentation resides. File system paths
## help.c ##
@@ help.c: struct help_unknown_cmd_config {
struct cmdnames aliases;
};
-+#define AUTOCORRECT_PROMPT_YES (-4)
++#define AUTOCORRECT_PROMPT_YES (-5)
+ #define AUTOCORRECT_SHOW (-4)
#define AUTOCORRECT_PROMPT (-3)
#define AUTOCORRECT_NEVER (-2)
- #define AUTOCORRECT_IMMEDIATELY (-1)
-@@ help.c: static int git_unknown_cmd_config(const char *var, const char *value,
- cfg->autocorrect = AUTOCORRECT_IMMEDIATELY;
- } else if (!strcmp(value, "prompt")) {
- cfg->autocorrect = AUTOCORRECT_PROMPT;
-+ } else if (!strcmp(value, "prompt-yes")) {
-+ cfg->autocorrect = AUTOCORRECT_PROMPT_YES;
- } else {
- int v = git_config_int(var, value, ctx->kvi);
- cfg->autocorrect = (v < 0)
+@@ help.c: static int parse_autocorrect(const char *value)
+
+ if (!strcmp(value, "prompt"))
+ return AUTOCORRECT_PROMPT;
++ if (!strcmp(value, "prompt-yes"))
++ return AUTOCORRECT_PROMPT_YES;
+ if (!strcmp(value, "never"))
+ return AUTOCORRECT_NEVER;
+ if (!strcmp(value, "immediate"))
@@ help.c: char *help_unknown_cmd(const char *cmd)
if ((cfg.autocorrect == AUTOCORRECT_PROMPT) && (!isatty(0) || !isatty(2)))
cfg.autocorrect = AUTOCORRECT_NEVER;
Documentation/config/help.adoc | 4 +++-
help.c | 15 +++++++++++++++
2 files changed, 18 insertions(+), 1 deletion(-)
diff --git a/Documentation/config/help.adoc b/Documentation/config/help.adoc
index b369589cec9..69b13b119f1 100644
--- a/Documentation/config/help.adoc
+++ b/Documentation/config/help.adoc
@@ -18,7 +18,9 @@ immediately.
deciseconds (0.1 sec).
- "never": don't run or show any suggested command.
- "prompt": show the suggestion and prompt for confirmation to run
-the command.
+the command. The default choice at the prompt is "No"
+ - "prompt-yes": show the suggestion and prompt for confirmation to run
+the command. The default choice at the prompt is "Yes"
help.htmlPath::
Specify the path where the HTML documentation resides. File system paths
diff --git a/help.c b/help.c
index 8d91afe851d..2a25882af02 100644
--- a/help.c
+++ b/help.c
@@ -552,6 +552,7 @@ struct help_unknown_cmd_config {
struct cmdnames aliases;
};
+#define AUTOCORRECT_PROMPT_YES (-5)
#define AUTOCORRECT_SHOW (-4)
#define AUTOCORRECT_PROMPT (-3)
#define AUTOCORRECT_NEVER (-2)
@@ -570,6 +571,8 @@ static int parse_autocorrect(const char *value)
if (!strcmp(value, "prompt"))
return AUTOCORRECT_PROMPT;
+ if (!strcmp(value, "prompt-yes"))
+ return AUTOCORRECT_PROMPT_YES;
if (!strcmp(value, "never"))
return AUTOCORRECT_NEVER;
if (!strcmp(value, "immediate"))
@@ -650,6 +653,9 @@ char *help_unknown_cmd(const char *cmd)
if ((cfg.autocorrect == AUTOCORRECT_PROMPT) && (!isatty(0) || !isatty(2)))
cfg.autocorrect = AUTOCORRECT_NEVER;
+ if ((cfg.autocorrect == AUTOCORRECT_PROMPT_YES) && (!isatty(0) || !isatty(2)))
+ cfg.autocorrect = AUTOCORRECT_IMMEDIATELY;
+
if (cfg.autocorrect == AUTOCORRECT_NEVER) {
fprintf_ln(stderr, _("git: '%s' is not a git command. See 'git --help'."), cmd);
exit(1);
@@ -738,6 +744,15 @@ char *help_unknown_cmd(const char *cmd)
if (!(starts_with(answer, "y") ||
starts_with(answer, "Y")))
exit(1);
+ } else if (cfg.autocorrect == AUTOCORRECT_PROMPT_YES) {
+ char *answer;
+ struct strbuf msg = STRBUF_INIT;
+ strbuf_addf(&msg, _("Run '%s' instead [Y/n]? "), assumed);
+ answer = git_prompt(msg.buf, PROMPT_ECHO);
+ strbuf_release(&msg);
+ if (starts_with(answer, "n") ||
+ starts_with(answer, "N"))
+ exit(1);
} else {
fprintf_ln(stderr,
_("Continuing in %0.1f seconds, "
base-commit: 03944513488db4a81fdb4c21c3b515e4cb260b05
--
gitgitgadget
next prev parent reply other threads:[~2025-02-17 14:19 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-15 9:36 [PATCH] help: add prompt-yes setting for autocorrect Chris Howlett via GitGitGadget
2025-01-15 9:51 ` Kristoffer Haugsbakk
2025-01-15 10:21 ` Chris Howlett
2025-01-15 17:40 ` Kristoffer Haugsbakk
2025-02-17 14:19 ` Chris Howlett via GitGitGadget [this message]
[not found] ` <pull.1852.v2.git.1739801702034.gitgitgadget@gmail.com>
2025-03-04 21:41 ` [PREVIEW v2] " Chris Howlett
2025-03-04 22:33 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=pull.1852.v2.git.1739801960334.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=chowlett09@gmail.com \
--cc=git@vger.kernel.org \
--cc=kristofferhaugsbakk@fastmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.