MCPcopy Index your code
hub / github.com/endbasic/endbasic / do_char

Method do_char

std/src/console/readline.rs:171–212  ·  view source on GitHub ↗

Handles a regular character insertion.

(&mut self, ch: char)

Source from the content-addressed store, hash-verified

169
170 /// Handles a regular character insertion.
171 fn do_char(&mut self, ch: char) -> io::Result<DispatchResult> {
172 if self.input_width == 0 {
173 return Ok(DispatchResult::Continue);
174 }
175
176 let line_len = self.line.len();
177 let new_view_start = self.adjust_view(self.pos + 1, self.view_start);
178 if new_view_start == self.view_start && line_len < self.input_width {
179 if self.pos < line_len {
180 self.console.hide_cursor()?;
181 if self.echo {
182 let mut buf = [0u8; 4];
183 self.console.write(ch.encode_utf8(&mut buf))?;
184 self.console.write(&self.line.end(self.pos))?;
185 } else {
186 self.console.write(&SECURE_CHAR.repeat(line_len - self.pos + 1))?;
187 }
188 self.console.move_within_line(-((line_len - self.pos) as i16))?;
189 self.console.show_cursor()?;
190 self.line.insert(self.pos, ch);
191 } else {
192 if self.echo {
193 let mut buf = [0u8; 4];
194 self.console.write(ch.encode_utf8(&mut buf))?;
195 } else {
196 self.console.write(SECURE_CHAR)?;
197 }
198 self.line.insert(line_len, ch);
199 }
200 self.pos += 1;
201 self.sync_rendered();
202 } else {
203 let old_pos = self.current_pos();
204 let clear_len = self.rendered_len;
205 self.line.insert(self.pos, ch);
206 self.pos += 1;
207 self.view_start = new_view_start;
208 self.sync_rendered();
209 self.redraw_line(old_pos, clear_len, self.current_pos())?;
210 }
211 Ok(DispatchResult::Continue)
212 }
213
214 /// Handles deletion of the character under the cursor.
215 fn do_delete(&mut self) -> io::Result<DispatchResult> {

Callers 1

runMethod · 0.80

Calls 11

adjust_viewMethod · 0.80
endMethod · 0.80
sync_renderedMethod · 0.80
current_posMethod · 0.80
redraw_lineMethod · 0.80
lenMethod · 0.45
hide_cursorMethod · 0.45
writeMethod · 0.45
move_within_lineMethod · 0.45
show_cursorMethod · 0.45
insertMethod · 0.45

Tested by

no test coverage detected