@@ -11,9 +11,10 @@ use crate::{
1111} ;
1212use anyhow:: Result ;
1313use asyncgit:: sync:: { self , RepoPathRef } ;
14- use crossterm:: event:: Event ;
14+ use crossterm:: event:: { Event , KeyCode , KeyEvent } ;
1515use easy_cast:: Cast ;
1616use ratatui:: { layout:: Rect , widgets:: Paragraph , Frame } ;
17+ use std:: borrow:: Cow ;
1718
1819pub struct CreateBranchPopup {
1920 repo : RepoPathRef ,
@@ -57,11 +58,28 @@ impl Component for CreateBranchPopup {
5758
5859 fn event ( & mut self , ev : & Event ) -> Result < EventState > {
5960 if self . is_visible ( ) {
60- if self . input . event ( ev) ?. is_consumed ( ) {
61+ let ev = match ev {
62+ Event :: Key ( KeyEvent {
63+ code : KeyCode :: Char ( c) ,
64+ modifiers,
65+ kind,
66+ state,
67+ } ) => Cow :: Owned ( Event :: Key ( KeyEvent {
68+ code : KeyCode :: Char ( strings:: normalize_branch_name_char (
69+ * c,
70+ ) ) ,
71+ modifiers : * modifiers,
72+ kind : * kind,
73+ state : * state,
74+ } ) ) ,
75+ _ => Cow :: Borrowed ( ev) ,
76+ } ;
77+
78+ if self . input . event ( & ev) ?. is_consumed ( ) {
6179 return Ok ( EventState :: Consumed ) ;
6280 }
6381
64- if let Event :: Key ( e) = ev {
82+ if let Event :: Key ( e) = ev. as_ref ( ) {
6583 if key_match ( e, self . key_config . keys . enter ) {
6684 self . create_branch ( ) ;
6785 }
@@ -168,3 +186,19 @@ impl CreateBranchPopup {
168186 }
169187 }
170188}
189+
190+ #[ cfg( test) ]
191+ mod tests {
192+ use super :: * ;
193+
194+ #[ test]
195+ fn test_spaces_are_replaced_by_dashes_in_branch_name ( ) {
196+ let input = "feature/auto replace spaces in branch name" ;
197+ let output: String =
198+ input. chars ( ) . map ( normalize_branch_name_char) . collect ( ) ;
199+ assert_eq ! (
200+ output,
201+ "feature/auto-replace-spaces-in-branch-name"
202+ ) ;
203+ }
204+ }
0 commit comments