Undo/redo support
This commit is contained in:
parent
f76f83565c
commit
c84a256376
4 changed files with 63 additions and 4 deletions
41
Cargo.lock
generated
41
Cargo.lock
generated
|
|
@ -878,7 +878,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "cosmic-text"
|
||||
version = "0.10.0"
|
||||
source = "git+https://github.com/pop-os/cosmic-text?branch=vi-editor#d001e5c09eef98ee0c3b1f549132924d32aa63ec"
|
||||
source = "git+https://github.com/pop-os/cosmic-text?branch=vi-editor#5352fdee940ef009ea978837afdfc44c468f7be8"
|
||||
dependencies = [
|
||||
"fontdb 0.15.0",
|
||||
"libm",
|
||||
|
|
@ -891,6 +891,7 @@ dependencies = [
|
|||
"swash",
|
||||
"syntect",
|
||||
"sys-locale",
|
||||
"undo_2",
|
||||
"unicode-bidi",
|
||||
"unicode-linebreak",
|
||||
"unicode-script",
|
||||
|
|
@ -2764,7 +2765,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "modit"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/pop-os/modit.git#94896d457c31079b9d6c19e592984c4262e4774e"
|
||||
source = "git+https://github.com/pop-os/modit.git#add73b87f02db213b74a8f03ad24a691e9b2446b"
|
||||
dependencies = [
|
||||
"log",
|
||||
]
|
||||
|
|
@ -3844,6 +3845,15 @@ version = "1.1.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
|
||||
|
||||
[[package]]
|
||||
name = "rustc_version"
|
||||
version = "0.2.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
|
||||
dependencies = [
|
||||
"semver",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustix"
|
||||
version = "0.37.27"
|
||||
|
|
@ -3981,6 +3991,21 @@ version = "1.0.2"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e388332cd64eb80cd595a00941baf513caffae8dce9cfd0467fc9c66397dade6"
|
||||
|
||||
[[package]]
|
||||
name = "semver"
|
||||
version = "0.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
|
||||
dependencies = [
|
||||
"semver-parser",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "semver-parser"
|
||||
version = "0.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
|
||||
|
||||
[[package]]
|
||||
name = "serde"
|
||||
version = "1.0.192"
|
||||
|
|
@ -4634,6 +4659,18 @@ dependencies = [
|
|||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "undo_2"
|
||||
version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9355dd2f470d984344735b95ac12d8da371ac662f68bfecf7f05f3b4fd5416c3"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"derivative",
|
||||
"rustc_version",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "unic-langid"
|
||||
version = "0.9.1"
|
||||
|
|
|
|||
|
|
@ -23,10 +23,12 @@ pub enum Action {
|
|||
OpenProjectDialog,
|
||||
Paste,
|
||||
Quit,
|
||||
Redo,
|
||||
Save,
|
||||
SelectAll,
|
||||
ToggleSettingsPage,
|
||||
ToggleWordWrap,
|
||||
Undo,
|
||||
}
|
||||
|
||||
impl Action {
|
||||
|
|
@ -42,10 +44,12 @@ impl Action {
|
|||
Self::OpenProjectDialog => Message::OpenProjectDialog,
|
||||
Self::Paste => Message::Paste,
|
||||
Self::Quit => Message::Quit,
|
||||
Self::Redo => Message::Redo,
|
||||
Self::Save => Message::Save,
|
||||
Self::SelectAll => Message::SelectAll,
|
||||
Self::ToggleSettingsPage => Message::ToggleContextPage(ContextPage::Settings),
|
||||
Self::ToggleWordWrap => Message::ToggleWordWrap,
|
||||
Self::Undo => Message::Undo,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -107,10 +111,12 @@ impl KeyBind {
|
|||
bind!([Ctrl], O, OpenFileDialog);
|
||||
bind!([Ctrl, Shift], O, OpenProjectDialog);
|
||||
bind!([Ctrl], Q, Quit);
|
||||
bind!([Ctrl, Shift], Z, Redo);
|
||||
bind!([Ctrl], S, Save);
|
||||
bind!([Ctrl], A, SelectAll);
|
||||
bind!([Ctrl], Comma, ToggleSettingsPage);
|
||||
bind!([Alt], Z, ToggleWordWrap);
|
||||
bind!([Ctrl], Z, Undo);
|
||||
|
||||
keybinds
|
||||
}
|
||||
|
|
|
|||
16
src/main.rs
16
src/main.rs
|
|
@ -120,6 +120,7 @@ pub enum Message {
|
|||
Paste,
|
||||
PasteValue(String),
|
||||
Quit,
|
||||
Redo,
|
||||
Save,
|
||||
SelectAll,
|
||||
SyntaxTheme(usize, bool),
|
||||
|
|
@ -128,6 +129,7 @@ pub enum Message {
|
|||
Todo,
|
||||
ToggleContextPage(ContextPage),
|
||||
ToggleWordWrap,
|
||||
Undo,
|
||||
VimBindings(bool),
|
||||
}
|
||||
|
||||
|
|
@ -689,6 +691,13 @@ impl Application for App {
|
|||
//TODO: prompt for save?
|
||||
return window::close();
|
||||
}
|
||||
Message::Redo => match self.active_tab() {
|
||||
Some(tab) => {
|
||||
let mut editor = tab.editor.lock().unwrap();
|
||||
editor.redo();
|
||||
}
|
||||
None => {}
|
||||
},
|
||||
Message::Save => {
|
||||
let mut title_opt = None;
|
||||
|
||||
|
|
@ -785,6 +794,13 @@ impl Application for App {
|
|||
self.config.word_wrap = !self.config.word_wrap;
|
||||
return self.save_config();
|
||||
}
|
||||
Message::Undo => match self.active_tab() {
|
||||
Some(tab) => {
|
||||
let mut editor = tab.editor.lock().unwrap();
|
||||
editor.undo();
|
||||
}
|
||||
None => {}
|
||||
},
|
||||
Message::VimBindings(vim_bindings) => {
|
||||
self.config.vim_bindings = vim_bindings;
|
||||
return self.save_config();
|
||||
|
|
|
|||
|
|
@ -132,8 +132,8 @@ pub fn menu_bar<'a>(config: &Config) -> Element<'a, Message> {
|
|||
MenuTree::with_children(
|
||||
menu_root(fl!("edit")),
|
||||
vec![
|
||||
menu_key(fl!("undo"), "Ctrl + Z", Message::Todo),
|
||||
menu_key(fl!("redo"), "Ctrl + Shift + Z", Message::Todo),
|
||||
menu_item(fl!("undo"), Message::Undo),
|
||||
menu_item(fl!("redo"), Message::Redo),
|
||||
MenuTree::new(horizontal_rule(1)),
|
||||
menu_item(fl!("cut"), Message::Cut),
|
||||
menu_item(fl!("copy"), Message::Copy),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue