terminal paint find

This commit is contained in:
Dongdong Zhou 2021-10-24 22:52:12 +01:00
parent 3bd4a16647
commit 3ca0bda446
1 changed files with 75 additions and 16 deletions

View File

@ -238,7 +238,6 @@ fn toggle_visual(&mut self, visual_mode: VisualMode) {
if !term.mode().contains(TermMode::VI) {
term.toggle_vi_mode();
}
term.selection = None;
let ty = match visual_mode {
VisualMode::Normal => SelectionType::Simple,
VisualMode::Linewise => SelectionType::Lines,
@ -956,6 +955,8 @@ fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceTabData, env: &Env) {
for item in content.display_iter {
let point = item.point;
let cell = item.cell;
let inverse = cell.flags.contains(Flags::INVERSE);
let x = point.column.0 as f64 * char_width;
let y =
(point.line.0 as f64 + content.display_offset as f64) * line_height;
@ -972,7 +973,6 @@ fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceTabData, env: &Env) {
fg = fg.with_alpha(0.66);
}
let inverse = cell.flags.contains(Flags::INVERSE);
if inverse {
let fg_clone = fg.clone();
fg = bg;
@ -1016,20 +1016,80 @@ fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceTabData, env: &Env) {
fg = term_bg.clone();
}
let mut builder = ctx
.text()
.new_text_layout(cell.c.to_string())
.font(
data.config.editor.font_family(),
data.config.editor.font_size as f64,
)
.text_color(fg);
if bold {
builder = builder
.default_attribute(TextAttribute::Weight(FontWeight::BOLD));
if cell.c != ' ' && cell.c != '\t' {
let mut builder = ctx
.text()
.new_text_layout(cell.c.to_string())
.font(
data.config.editor.font_family(),
data.config.editor.font_size as f64,
)
.text_color(fg);
if bold {
builder = builder
.default_attribute(TextAttribute::Weight(FontWeight::BOLD));
}
let text_layout = builder.build().unwrap();
ctx.draw_text(&text_layout, Point::new(x, y + y_shift));
}
}
if let Some(search_string) = data.find.search_string.as_ref() {
if let Ok(dfas) = RegexSearch::new(search_string) {
let mut start = alacritty_terminal::index::Point::new(
alacritty_terminal::index::Line(
-(content.display_offset as i32),
),
alacritty_terminal::index::Column(0),
);
let end_line =
(start.line + term.screen_lines()).min(term.bottommost_line());
let mut max_lines = (end_line.0 - start.line.0) as usize;
while let Some(m) = term.search_next(
&dfas,
start,
Direction::Right,
Side::Left,
Some(max_lines),
) {
let match_start = m.start();
if match_start.line.0 < start.line.0
|| (match_start.line.0 == start.line.0
&& match_start.column.0 < start.column.0)
{
break;
}
let x = match_start.column.0 as f64 * char_width;
let y = (match_start.line.0 as f64
+ content.display_offset as f64)
* line_height;
let rect = Rect::ZERO.with_origin(Point::new(x, y)).with_size(
Size::new(
(m.end().column.0 - m.start().column.0
+ term.grid()[*m.end()].c.width().unwrap_or(1))
as f64
* char_width,
line_height,
),
);
ctx.stroke(
rect,
data.config
.get_color_unchecked(LapceTheme::TERMINAL_FOREGROUND),
1.0,
);
start = *m.end();
if start.column.0 < term.last_column() {
start.column.0 += 1;
} else {
if start.line.0 < term.bottommost_line() {
start.column.0 = 0;
start.line.0 += 1;
}
}
max_lines = (end_line.0 - start.line.0) as usize;
}
}
let text_layout = builder.build().unwrap();
ctx.draw_text(&text_layout, Point::new(x, y + y_shift));
}
}
}
@ -1044,7 +1104,6 @@ impl EventProxy {}
impl EventListener for EventProxy {
fn send_event(&self, event: alacritty_terminal::event::Event) {
println!("terminal event proxy got event {:?}", event);
match event {
alacritty_terminal::event::Event::PtyWrite(s) => {
println!("pyt write {}", s);