MCPcopy Create free account
hub / github.com/FastFlowLM/FastFlowLM / get_interactive_input

Method get_interactive_input

src/runner/cli_wide.cpp:99–215  ·  view source on GitHub ↗

\brief Get interactive input with arrow key support

Source from the content-addressed store, hash-verified

97
98/// \brief Get interactive input with arrow key support
99std::string CLIWide::get_interactive_input() {
100 InputState state;
101 state.lines.push_back(""); // Start with one empty line
102 state.is_wrapped_line.push_back(false); // First line is not wrapped
103 state.utf8_buffer.clear(); // Initialize UTF-8 buffer
104
105 bool receiving_unicode_char = false;
106
107 while (true) {
108 print_prompt_and_line(state);
109
110 while (true) {
111 // Use ReadConsoleInput for all input
112 INPUT_RECORD inputRecord;
113 if (!read_console_input(inputRecord)) continue;
114
115 // Get key event record
116 KEY_EVENT_RECORD keyEvent;
117 if (inputRecord.EventType == KEY_EVENT) {
118 keyEvent = inputRecord.Event.KeyEvent;
119 }
120 else{
121 continue;
122 }
123
124 // Only handle key down events
125 if ((!keyEvent.bKeyDown) && (keyEvent.wVirtualKeyCode != 0x12)) continue;
126
127 KeyAction action = KeyAction::CONTINUE;
128
129 // Handle different key types
130 if (keyEvent.wVirtualKeyCode == VK_UP || keyEvent.wVirtualKeyCode == VK_DOWN ||
131 keyEvent.wVirtualKeyCode == VK_LEFT || keyEvent.wVirtualKeyCode == VK_RIGHT) {
132 action = handle_arrow_keys(keyEvent, state);
133 } else if (keyEvent.wVirtualKeyCode == VK_HOME || keyEvent.wVirtualKeyCode == VK_END ||
134 keyEvent.wVirtualKeyCode == VK_DELETE) {
135 action = handle_navigation_keys(keyEvent, state);
136 } else if (keyEvent.wVirtualKeyCode == VK_F1 || keyEvent.wVirtualKeyCode == VK_F2 ||
137 keyEvent.wVirtualKeyCode == VK_F3 || keyEvent.wVirtualKeyCode == VK_F4 ||
138 keyEvent.wVirtualKeyCode == VK_F5 || keyEvent.wVirtualKeyCode == VK_F6 ||
139 keyEvent.wVirtualKeyCode == VK_F7 || keyEvent.wVirtualKeyCode == VK_F8 ||
140 keyEvent.wVirtualKeyCode == VK_F9 || keyEvent.wVirtualKeyCode == VK_F10 ||
141 keyEvent.wVirtualKeyCode == VK_F11 || keyEvent.wVirtualKeyCode == VK_F12) {
142 action = handle_extended_key(keyEvent, state);
143 } else {
144 action = handle_regular_key(keyEvent, state);
145 }
146
147 switch (action) {
148 case KeyAction::CONTINUE:
149 continue;
150 case KeyAction::NEW_LINE:
151 print_prompt_and_line(state);
152 continue;
153 case KeyAction::BREAK_INNER_LOOP:
154 break;
155 case KeyAction::BREAK_OUTER_LOOP:
156 goto outer_loop_end;

Callers 1

runMethod · 0.45

Calls 5

push_backMethod · 0.80
clearMethod · 0.80
sizeMethod · 0.45
resizeMethod · 0.45
emptyMethod · 0.45

Tested by

no test coverage detected