@@ -273,6 +273,7 @@ impl ChatComposer {
273
273
274
274
if !starts_with_cmd {
275
275
self . textarea . set_text ( & format ! ( "/{} " , cmd. command( ) ) ) ;
276
+ self . textarea . set_cursor ( self . textarea . text ( ) . len ( ) ) ;
276
277
}
277
278
}
278
279
( InputResult :: None , true )
@@ -1071,6 +1072,28 @@ mod tests {
1071
1072
}
1072
1073
}
1073
1074
1075
+ #[ test]
1076
+ fn slash_tab_completion_moves_cursor_to_end ( ) {
1077
+ use crossterm:: event:: KeyCode ;
1078
+ use crossterm:: event:: KeyEvent ;
1079
+ use crossterm:: event:: KeyModifiers ;
1080
+
1081
+ let ( tx, _rx) = std:: sync:: mpsc:: channel ( ) ;
1082
+ let sender = AppEventSender :: new ( tx) ;
1083
+ let mut composer =
1084
+ ChatComposer :: new ( true , sender, false , "Ask Codex to do anything" . to_string ( ) ) ;
1085
+
1086
+ for ch in [ '/' , 'c' ] {
1087
+ let _ = composer. handle_key_event ( KeyEvent :: new ( KeyCode :: Char ( ch) , KeyModifiers :: NONE ) ) ;
1088
+ }
1089
+
1090
+ let ( _result, _needs_redraw) =
1091
+ composer. handle_key_event ( KeyEvent :: new ( KeyCode :: Tab , KeyModifiers :: NONE ) ) ;
1092
+
1093
+ assert_eq ! ( composer. textarea. text( ) , "/compact " ) ;
1094
+ assert_eq ! ( composer. textarea. cursor( ) , composer. textarea. text( ) . len( ) ) ;
1095
+ }
1096
+
1074
1097
#[ test]
1075
1098
fn slash_mention_dispatches_command_and_inserts_at ( ) {
1076
1099
use crossterm:: event:: KeyCode ;
0 commit comments