@@ -31,7 +31,6 @@ use crate::bottom_pane::textarea::TextAreaState;
3131use codex_file_search:: FileMatch ;
3232use std:: cell:: RefCell ;
3333
34- const BASE_PLACEHOLDER_TEXT : & str = "Ask Codex to do anything" ;
3534/// If the pasted content exceeds this number of characters, replace it with a
3635/// placeholder in the UI.
3736const LARGE_PASTE_CHAR_THRESHOLD : usize = 1000 ;
@@ -61,6 +60,7 @@ pub(crate) struct ChatComposer {
6160 pending_pastes : Vec < ( String , String ) > ,
6261 token_usage_info : Option < TokenUsageInfo > ,
6362 has_focus : bool ,
63+ placeholder_text : String ,
6464}
6565
6666/// Popup state – at most one can be visible at any time.
@@ -75,6 +75,7 @@ impl ChatComposer {
7575 has_input_focus : bool ,
7676 app_event_tx : AppEventSender ,
7777 enhanced_keys_supported : bool ,
78+ placeholder_text : String ,
7879 ) -> Self {
7980 let use_shift_enter_hint = enhanced_keys_supported;
8081
@@ -91,6 +92,7 @@ impl ChatComposer {
9192 pending_pastes : Vec :: new ( ) ,
9293 token_usage_info : None ,
9394 has_focus : has_input_focus,
95+ placeholder_text,
9496 }
9597 }
9698
@@ -712,7 +714,7 @@ impl WidgetRef for &ChatComposer {
712714 let mut state = self . textarea_state . borrow_mut ( ) ;
713715 StatefulWidgetRef :: render_ref ( & ( & self . textarea ) , textarea_rect, buf, & mut state) ;
714716 if self . textarea . text ( ) . is_empty ( ) {
715- Line :: from ( BASE_PLACEHOLDER_TEXT )
717+ Line :: from ( self . placeholder_text . as_str ( ) )
716718 . style ( Style :: default ( ) . dim ( ) )
717719 . render_ref ( textarea_rect. inner ( Margin :: new ( 1 , 0 ) ) , buf) ;
718720 }
@@ -885,7 +887,8 @@ mod tests {
885887
886888 let ( tx, _rx) = std:: sync:: mpsc:: channel ( ) ;
887889 let sender = AppEventSender :: new ( tx) ;
888- let mut composer = ChatComposer :: new ( true , sender, false ) ;
890+ let mut composer =
891+ ChatComposer :: new ( true , sender, false , "Ask Codex to do anything" . to_string ( ) ) ;
889892
890893 let needs_redraw = composer. handle_paste ( "hello" . to_string ( ) ) ;
891894 assert ! ( needs_redraw) ;
@@ -908,7 +911,8 @@ mod tests {
908911
909912 let ( tx, _rx) = std:: sync:: mpsc:: channel ( ) ;
910913 let sender = AppEventSender :: new ( tx) ;
911- let mut composer = ChatComposer :: new ( true , sender, false ) ;
914+ let mut composer =
915+ ChatComposer :: new ( true , sender, false , "Ask Codex to do anything" . to_string ( ) ) ;
912916
913917 let large = "x" . repeat ( LARGE_PASTE_CHAR_THRESHOLD + 10 ) ;
914918 let needs_redraw = composer. handle_paste ( large. clone ( ) ) ;
@@ -937,7 +941,8 @@ mod tests {
937941 let large = "y" . repeat ( LARGE_PASTE_CHAR_THRESHOLD + 1 ) ;
938942 let ( tx, _rx) = std:: sync:: mpsc:: channel ( ) ;
939943 let sender = AppEventSender :: new ( tx) ;
940- let mut composer = ChatComposer :: new ( true , sender, false ) ;
944+ let mut composer =
945+ ChatComposer :: new ( true , sender, false , "Ask Codex to do anything" . to_string ( ) ) ;
941946
942947 composer. handle_paste ( large) ;
943948 assert_eq ! ( composer. pending_pastes. len( ) , 1 ) ;
@@ -973,7 +978,12 @@ mod tests {
973978
974979 for ( name, input) in test_cases {
975980 // Create a fresh composer for each test case
976- let mut composer = ChatComposer :: new ( true , sender. clone ( ) , false ) ;
981+ let mut composer = ChatComposer :: new (
982+ true ,
983+ sender. clone ( ) ,
984+ false ,
985+ "Ask Codex to do anything" . to_string ( ) ,
986+ ) ;
977987
978988 if let Some ( text) = input {
979989 composer. handle_paste ( text) ;
@@ -1011,7 +1021,8 @@ mod tests {
10111021
10121022 let ( tx, rx) = std:: sync:: mpsc:: channel ( ) ;
10131023 let sender = AppEventSender :: new ( tx) ;
1014- let mut composer = ChatComposer :: new ( true , sender, false ) ;
1024+ let mut composer =
1025+ ChatComposer :: new ( true , sender, false , "Ask Codex to do anything" . to_string ( ) ) ;
10151026
10161027 // Type the slash command.
10171028 for ch in [
@@ -1054,7 +1065,8 @@ mod tests {
10541065
10551066 let ( tx, rx) = std:: sync:: mpsc:: channel ( ) ;
10561067 let sender = AppEventSender :: new ( tx) ;
1057- let mut composer = ChatComposer :: new ( true , sender, false ) ;
1068+ let mut composer =
1069+ ChatComposer :: new ( true , sender, false , "Ask Codex to do anything" . to_string ( ) ) ;
10581070
10591071 for ch in [ '/' , 'm' , 'e' , 'n' , 't' , 'i' , 'o' , 'n' ] {
10601072 let _ = composer. handle_key_event ( KeyEvent :: new ( KeyCode :: Char ( ch) , KeyModifiers :: NONE ) ) ;
@@ -1093,7 +1105,8 @@ mod tests {
10931105
10941106 let ( tx, _rx) = std:: sync:: mpsc:: channel ( ) ;
10951107 let sender = AppEventSender :: new ( tx) ;
1096- let mut composer = ChatComposer :: new ( true , sender, false ) ;
1108+ let mut composer =
1109+ ChatComposer :: new ( true , sender, false , "Ask Codex to do anything" . to_string ( ) ) ;
10971110
10981111 // Define test cases: (paste content, is_large)
10991112 let test_cases = [
@@ -1166,7 +1179,8 @@ mod tests {
11661179
11671180 let ( tx, _rx) = std:: sync:: mpsc:: channel ( ) ;
11681181 let sender = AppEventSender :: new ( tx) ;
1169- let mut composer = ChatComposer :: new ( true , sender, false ) ;
1182+ let mut composer =
1183+ ChatComposer :: new ( true , sender, false , "Ask Codex to do anything" . to_string ( ) ) ;
11701184
11711185 // Define test cases: (content, is_large)
11721186 let test_cases = [
@@ -1232,7 +1246,8 @@ mod tests {
12321246
12331247 let ( tx, _rx) = std:: sync:: mpsc:: channel ( ) ;
12341248 let sender = AppEventSender :: new ( tx) ;
1235- let mut composer = ChatComposer :: new ( true , sender, false ) ;
1249+ let mut composer =
1250+ ChatComposer :: new ( true , sender, false , "Ask Codex to do anything" . to_string ( ) ) ;
12361251
12371252 // Define test cases: (cursor_position_from_end, expected_pending_count)
12381253 let test_cases = [
0 commit comments