duat_utils/modes/
regular.rs1use duat_core::{
2 data::Pass,
3 file::File,
4 mode::{self, KeyCode, KeyEvent, KeyMod, key},
5 prelude::Handle,
6 ui::Ui,
7};
8
9use super::{IncSearch, RunCommands, SearchFwd, SearchRev};
10
11#[derive(Clone)]
13pub struct Regular;
14
15impl<U: Ui> mode::Mode<U> for Regular {
16 type Widget = File<U>;
17
18 fn send_key(&mut self, pa: &mut Pass, key: KeyEvent, handle: Handle<Self::Widget, U>) {
19 match key {
20 key!(KeyCode::Char(char)) => handle.edit_all(pa, |mut e| {
22 e.insert(char);
23 e.move_hor(1);
24 }),
25 key!(KeyCode::Enter) => handle.edit_all(pa, |mut e| {
26 e.insert('\n');
27 e.move_hor(1);
28 }),
29
30 key!(KeyCode::Backspace) => handle.edit_all(pa, |mut e| {
32 if e.anchor().is_some() {
33 e.replace("");
34 e.unset_anchor();
35 } else {
36 e.move_hor(-1);
37 e.replace("");
38 }
39 }),
40 key!(KeyCode::Delete) => handle.edit_all(pa, |mut e| {
41 e.replace("");
42 e.unset_anchor();
43 }),
44
45 key!(KeyCode::Left, KeyMod::SHIFT) => handle.edit_all(pa, |mut e| {
47 e.set_anchor_if_needed();
48 e.move_hor(-1);
49 }),
50 key!(KeyCode::Right, KeyMod::SHIFT) => handle.edit_all(pa, |mut e| {
51 e.set_anchor_if_needed();
52 e.move_hor(1);
53 }),
54 key!(KeyCode::Up, KeyMod::SHIFT) => handle.edit_all(pa, |mut e| {
55 e.set_anchor_if_needed();
56 e.move_ver(-1);
57 }),
58 key!(KeyCode::Down, KeyMod::SHIFT) => handle.edit_all(pa, |mut e| {
59 e.set_anchor_if_needed();
60 e.move_ver(1);
61 }),
62 key!(KeyCode::Left, KeyMod::NONE) => handle.edit_all(pa, |mut e| {
63 e.unset_anchor();
64 e.move_hor(-1);
65 }),
66 key!(KeyCode::Right, KeyMod::NONE) => handle.edit_all(pa, |mut e| {
67 e.unset_anchor();
68 e.move_hor(1);
69 }),
70 key!(KeyCode::Up, KeyMod::NONE) => handle.edit_all(pa, |mut e| {
71 e.unset_anchor();
72 e.move_ver(-1);
73 }),
74 key!(KeyCode::Down, KeyMod::NONE) => handle.edit_all(pa, |mut e| {
75 e.unset_anchor();
76 e.move_ver(1);
77 }),
78
79 key!(KeyCode::Char('p'), KeyMod::CONTROL) => mode::set::<U>(RunCommands::new()),
81 key!(KeyCode::Char('f'), KeyMod::CONTROL) => mode::set::<U>(IncSearch::new(SearchFwd)),
82 key!(KeyCode::Char('F'), KeyMod::CONTROL) => mode::set::<U>(IncSearch::new(SearchRev)),
83
84 _ => {}
85 }
86 }
87}