summaryrefslogtreecommitdiff
path: root/add-patch.c
diff options
context:
space:
mode:
authorJohannes Schindelin <johannes.schindelin@gmx.de>2019-12-13 08:08:05 +0000
committerJunio C Hamano <gitster@pobox.com>2019-12-13 12:37:14 -0800
commit54d9d9b2eebe1c8f8b54626f98a5e1414ce766ba (patch)
tree0c4f2daf92ba6b0f12fc4bca3788ec6484022a31 /add-patch.c
parentade246efed509a68348901e7a085ceb55915bfea (diff)
downloadgit-54d9d9b2eebe1c8f8b54626f98a5e1414ce766ba.tar.gz
built-in add -p: only show the applicable parts of the help text
When displaying the only hunk in a file's diff, the prompt already excludes the commands to navigate to the previous/next hunk. Let's also let the `?` command show only the help lines corresponding to the commands that are displayed in the prompt. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'add-patch.c')
-rw-r--r--add-patch.c32
1 files changed, 28 insertions, 4 deletions
diff --git a/add-patch.c b/add-patch.c
index 5e9829a8b4..1eb0ab97bb 100644
--- a/add-patch.c
+++ b/add-patch.c
@@ -1008,8 +1008,10 @@ N_("y - stage this hunk\n"
"n - do not stage this hunk\n"
"q - quit; do not stage this hunk or any of the remaining ones\n"
"a - stage this and all the remaining hunks\n"
- "d - do not stage this hunk nor any of the remaining hunks\n"
- "j - leave this hunk undecided, see next undecided hunk\n"
+ "d - do not stage this hunk nor any of the remaining hunks\n");
+
+static const char help_patch_remainder[] =
+N_("j - leave this hunk undecided, see next undecided hunk\n"
"J - leave this hunk undecided, see next hunk\n"
"k - leave this hunk undecided, see previous undecided hunk\n"
"K - leave this hunk undecided, see previous hunk\n"
@@ -1246,9 +1248,31 @@ soft_increment:
hunk->use = USE_HUNK;
goto soft_increment;
}
- } else
- color_fprintf(stdout, s->s.help_color,
+ } else {
+ const char *p = _(help_patch_remainder), *eol = p;
+
+ color_fprintf(stdout, s->s.help_color, "%s",
_(help_patch_text));
+
+ /*
+ * Show only those lines of the remainder that are
+ * actually applicable with the current hunk.
+ */
+ for (; *p; p = eol + (*eol == '\n')) {
+ eol = strchrnul(p, '\n');
+
+ /*
+ * `s->buf` still contains the part of the
+ * commands shown in the prompt that are not
+ * always available.
+ */
+ if (*p != '?' && !strchr(s->buf.buf, *p))
+ continue;
+
+ color_fprintf_ln(stdout, s->s.help_color,
+ "%.*s", (int)(eol - p), p);
+ }
+ }
}
/* Any hunk to be used? */