change cursor shape depending on edit mode (#494)

This commit is contained in:
Carl Schierig 2022-10-21 09:03:53 +02:00 committed by GitHub
parent 8e1511ad05
commit da27f0041a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 5 deletions

View File

@ -1373,8 +1373,13 @@ impl Reedline {
"",
);
self.painter
.repaint_buffer(prompt, &lines, None, self.use_ansi_coloring)?;
self.painter.repaint_buffer(
prompt,
&lines,
self.prompt_edit_mode(),
None,
self.use_ansi_coloring,
)?;
}
Ok(())
@ -1435,8 +1440,13 @@ impl Reedline {
let menu = self.menus.iter().find(|menu| menu.is_active());
self.painter
.repaint_buffer(prompt, &lines, menu, self.use_ansi_coloring)
self.painter.repaint_buffer(
prompt,
&lines,
self.prompt_edit_mode(),
menu,
self.use_ansi_coloring,
)
}
/// Adds an external printer

View File

@ -1,3 +1,5 @@
use crate::PromptEditMode;
use {
super::utils::{coerce_crlf, line_width},
crate::{
@ -132,6 +134,7 @@ impl Painter {
&mut self,
prompt: &dyn Prompt,
lines: &PromptLines,
prompt_mode: PromptEditMode,
menu: Option<&ReedlineMenu>,
use_ansi_coloring: bool,
) -> Result<()> {
@ -172,7 +175,13 @@ impl Painter {
// can print without overwriting the things written during the painting
self.last_required_lines = required_lines;
self.stdout.queue(RestorePosition)?.queue(cursor::Show)?;
self.stdout
.queue(RestorePosition)?
.queue(cursor::SetCursorShape(match prompt_mode {
PromptEditMode::Vi(crate::PromptViMode::Insert) => cursor::CursorShape::Line,
_ => cursor::CursorShape::Block,
}))?
.queue(cursor::Show)?;
self.stdout.flush()
}