From e47209e71f734676bda934bdec9d7e2f1ac3670e Mon Sep 17 00:00:00 2001 From: extrawurst Date: Tue, 19 Mar 2024 17:47:52 -0700 Subject: [PATCH 1/2] fix #2126 --- src/popups/tag_commit.rs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/popups/tag_commit.rs b/src/popups/tag_commit.rs index 4f52274762..965fca7f43 100644 --- a/src/popups/tag_commit.rs +++ b/src/popups/tag_commit.rs @@ -66,15 +66,12 @@ impl Component for TagCommitPopup { fn event(&mut self, ev: &Event) -> Result { if self.is_visible() { - if self.input.event(ev)?.is_consumed() { - return Ok(EventState::Consumed); - } - if let Event::Key(e) = ev { if key_match(e, self.key_config.keys.enter) && self.is_valid_tag() { try_or_popup!(self, "tag error:", self.tag()); + return Ok(EventState::Consumed); } else if key_match( e, self.key_config.keys.tag_annotate, @@ -93,10 +90,12 @@ impl Component for TagCommitPopup { strings::tag_popup_annotation_msg(), ); self.mode = Mode::Annotation { tag_name }; + return Ok(EventState::Consumed); } - - return Ok(EventState::Consumed); } + + self.input.event(ev)?; + return Ok(EventState::Consumed); } Ok(EventState::NotConsumed) } From 91ae9fb57d6d5f0f3de24227764aa5d28de6aaf2 Mon Sep 17 00:00:00 2001 From: extrawurst Date: Fri, 22 Mar 2024 11:53:50 -0700 Subject: [PATCH 2/2] multiline annotation tag message edit --- src/components/textinput.rs | 6 +++++ src/popups/tag_commit.rs | 45 +++++++++++++++++++++++++------------ src/strings.rs | 7 +++++- 3 files changed, 43 insertions(+), 15 deletions(-) diff --git a/src/components/textinput.rs b/src/components/textinput.rs index 0dff6e53c4..df87ae9d2c 100644 --- a/src/components/textinput.rs +++ b/src/components/textinput.rs @@ -88,6 +88,12 @@ impl TextInputComponent { self } + /// + pub fn set_input_type(&mut self, input_type: InputType) { + self.clear(); + self.input_type = input_type; + } + /// Clear the `msg`. pub fn clear(&mut self) { self.msg.take(); diff --git a/src/popups/tag_commit.rs b/src/popups/tag_commit.rs index 965fca7f43..696aba171c 100644 --- a/src/popups/tag_commit.rs +++ b/src/popups/tag_commit.rs @@ -46,9 +46,13 @@ impl Component for TagCommitPopup { if self.is_visible() || force_all { self.input.commands(out, force_all); + let is_annotation_mode = + matches!(self.mode, Mode::Annotation { .. }); + out.push(CommandInfo::new( strings::commands::tag_commit_confirm_msg( &self.key_config, + is_annotation_mode, ), self.is_valid_tag(), true, @@ -67,29 +71,27 @@ impl Component for TagCommitPopup { fn event(&mut self, ev: &Event) -> Result { if self.is_visible() { if let Event::Key(e) = ev { - if key_match(e, self.key_config.keys.enter) + let is_annotation_mode = + matches!(self.mode, Mode::Annotation { .. }); + + if !is_annotation_mode + && key_match(e, self.key_config.keys.enter) && self.is_valid_tag() { try_or_popup!(self, "tag error:", self.tag()); return Ok(EventState::Consumed); + } + if is_annotation_mode + && key_match(e, self.key_config.keys.commit) + { + try_or_popup!(self, "tag error:", self.tag()); + return Ok(EventState::Consumed); } else if key_match( e, self.key_config.keys.tag_annotate, ) && self.is_valid_tag() { - let tag_name: String = - self.input.get_text().into(); - - self.input.clear(); - self.input.set_title( - strings::tag_popup_annotation_title( - &tag_name, - ), - ); - self.input.set_default_msg( - strings::tag_popup_annotation_msg(), - ); - self.mode = Mode::Annotation { tag_name }; + self.start_annotate_mode(); return Ok(EventState::Consumed); } } @@ -110,6 +112,7 @@ impl Component for TagCommitPopup { fn show(&mut self) -> Result<()> { self.mode = Mode::Name; + self.input.set_input_type(InputType::Singleline); self.input.set_title(strings::tag_popup_name_title()); self.input.set_default_msg(strings::tag_popup_name_msg()); self.input.show()?; @@ -165,6 +168,7 @@ impl TagCommitPopup { .flatten() .and_then(|val| val.parse::().ok()) .unwrap_or_default(); + anyhow::ensure!(!gpgsign, "config tag.gpgsign=true detected.\ngpg signing not supported.\ndeactivate in your repo/gitconfig to be able to tag without signing."); let (tag_name, tag_annotation) = self.tag_info(); @@ -200,4 +204,17 @@ impl TagCommitPopup { Ok(()) } + + fn start_annotate_mode(&mut self) { + let tag_name: String = self.input.get_text().into(); + + self.input.clear(); + self.input.set_input_type(InputType::Multiline); + self.input.set_title(strings::tag_popup_annotation_title( + &tag_name, + )); + self.input + .set_default_msg(strings::tag_popup_annotation_msg()); + self.mode = Mode::Annotation { tag_name }; + } } diff --git a/src/strings.rs b/src/strings.rs index a369a8692e..67eb79ba7a 100644 --- a/src/strings.rs +++ b/src/strings.rs @@ -1423,11 +1423,16 @@ pub mod commands { } pub fn tag_commit_confirm_msg( key_config: &SharedKeyConfig, + is_annotation_mode: bool, ) -> CommandText { CommandText::new( format!( "Tag [{}]", - key_config.get_hint(key_config.keys.enter), + key_config.get_hint(if is_annotation_mode { + key_config.keys.commit + } else { + key_config.keys.enter + }), ), "tag commit", CMD_GROUP_LOG,