зеркало из
https://github.com/glebtv/tui-textarea.git
synced 2026-09-03 22:35:50 +03:00
allow to change cursor style
Этот коммит содержится в:
@@ -200,6 +200,5 @@ impl<'a> Drop for Editor<'a> {
|
||||
}
|
||||
|
||||
fn main() -> io::Result<()> {
|
||||
let mut editor = Editor::new(env::args_os().skip(1))?;
|
||||
editor.run()
|
||||
Editor::new(env::args_os().skip(1))?.run()
|
||||
}
|
||||
|
||||
@@ -44,6 +44,7 @@ pub struct TextArea<'a> {
|
||||
cursor_line_style: Style,
|
||||
line_number_style: Option<Style>,
|
||||
scroll_top: (AtomicU16, AtomicU16),
|
||||
cursor_style: Style,
|
||||
yank: String,
|
||||
}
|
||||
|
||||
@@ -136,6 +137,7 @@ impl<'a> TextArea<'a> {
|
||||
cursor_line_style: Style::default().add_modifier(Modifier::UNDERLINED),
|
||||
line_number_style: None,
|
||||
scroll_top: (AtomicU16::new(0), AtomicU16::new(0)),
|
||||
cursor_style: Style::default().add_modifier(Modifier::REVERSED),
|
||||
yank: String::new(),
|
||||
}
|
||||
}
|
||||
@@ -935,19 +937,18 @@ impl<'a> TextArea<'a> {
|
||||
}
|
||||
|
||||
if i == self.cursor.0 {
|
||||
let cursor_style = Style::default().add_modifier(Modifier::REVERSED);
|
||||
if let Some((i, c)) = l.char_indices().nth(self.cursor.1) {
|
||||
let j = i + c.len_utf8();
|
||||
spans.extend_from_slice(&[
|
||||
Span::styled(&l[..i], self.cursor_line_style),
|
||||
Span::styled(&l[i..j], cursor_style),
|
||||
Span::styled(&l[i..j], self.cursor_style),
|
||||
Span::styled(&l[j..], self.cursor_line_style),
|
||||
]);
|
||||
} else {
|
||||
// When cursor is at the end of line
|
||||
spans.extend_from_slice(&[
|
||||
Span::styled(l.as_str(), self.cursor_line_style),
|
||||
Span::styled(" ", cursor_style),
|
||||
Span::styled(" ", self.cursor_style),
|
||||
]);
|
||||
}
|
||||
} else {
|
||||
@@ -1098,6 +1099,16 @@ impl<'a> TextArea<'a> {
|
||||
|
||||
/// Remove the style of line number which was set by [`TextArea::set_line_number_style`]. After calling this
|
||||
/// method, Line numbers will no longer be shown.
|
||||
/// ```
|
||||
/// use tui::style::{Style, Color};
|
||||
/// use tui_textarea::TextArea;
|
||||
///
|
||||
/// let mut textarea = TextArea::default();
|
||||
///
|
||||
/// textarea.set_line_number_style(Style::default().bg(Color::DarkGray));
|
||||
/// textarea.remove_line_number();
|
||||
/// assert_eq!(textarea.line_number_style(), None);
|
||||
/// ```
|
||||
pub fn remove_line_number(&mut self) {
|
||||
self.line_number_style = None;
|
||||
}
|
||||
@@ -1107,6 +1118,27 @@ impl<'a> TextArea<'a> {
|
||||
self.line_number_style
|
||||
}
|
||||
|
||||
/// Set the style of cursor. By default, a cursor is rendered in the reversed color. Setting the same style as
|
||||
/// cursor line hides a cursor.
|
||||
/// ```
|
||||
/// use tui::style::{Style, Color};
|
||||
/// use tui_textarea::TextArea;
|
||||
///
|
||||
/// let mut textarea = TextArea::default();
|
||||
///
|
||||
/// let style = Style::default().bg(Color::Red);
|
||||
/// textarea.set_cursor_style(style);
|
||||
/// assert_eq!(textarea.cursor_style(), style);
|
||||
/// ```
|
||||
pub fn set_cursor_style(&mut self, style: Style) {
|
||||
self.cursor_style = style;
|
||||
}
|
||||
|
||||
/// Get the style of cursor.
|
||||
pub fn cursor_style(&self) -> Style {
|
||||
self.cursor_style
|
||||
}
|
||||
|
||||
/// Get slice of line texts. This method borrows the content, but not moves. Note that the returned slice will
|
||||
/// never be empty because an empty text means a slice containing one empty line. This is correct since any text
|
||||
/// file must end with a newline.
|
||||
|
||||
Ссылка в новой задаче
Block a user