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]]
|
[[package]]
|
||||||
name = "cosmic-text"
|
name = "cosmic-text"
|
||||||
version = "0.10.0"
|
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 = [
|
dependencies = [
|
||||||
"fontdb 0.15.0",
|
"fontdb 0.15.0",
|
||||||
"libm",
|
"libm",
|
||||||
|
|
@ -891,6 +891,7 @@ dependencies = [
|
||||||
"swash",
|
"swash",
|
||||||
"syntect",
|
"syntect",
|
||||||
"sys-locale",
|
"sys-locale",
|
||||||
|
"undo_2",
|
||||||
"unicode-bidi",
|
"unicode-bidi",
|
||||||
"unicode-linebreak",
|
"unicode-linebreak",
|
||||||
"unicode-script",
|
"unicode-script",
|
||||||
|
|
@ -2764,7 +2765,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "modit"
|
name = "modit"
|
||||||
version = "0.1.0"
|
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 = [
|
dependencies = [
|
||||||
"log",
|
"log",
|
||||||
]
|
]
|
||||||
|
|
@ -3844,6 +3845,15 @@ version = "1.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
|
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]]
|
[[package]]
|
||||||
name = "rustix"
|
name = "rustix"
|
||||||
version = "0.37.27"
|
version = "0.37.27"
|
||||||
|
|
@ -3981,6 +3991,21 @@ version = "1.0.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e388332cd64eb80cd595a00941baf513caffae8dce9cfd0467fc9c66397dade6"
|
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]]
|
[[package]]
|
||||||
name = "serde"
|
name = "serde"
|
||||||
version = "1.0.192"
|
version = "1.0.192"
|
||||||
|
|
@ -4634,6 +4659,18 @@ dependencies = [
|
||||||
"winapi",
|
"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]]
|
[[package]]
|
||||||
name = "unic-langid"
|
name = "unic-langid"
|
||||||
version = "0.9.1"
|
version = "0.9.1"
|
||||||
|
|
|
||||||
|
|
@ -23,10 +23,12 @@ pub enum Action {
|
||||||
OpenProjectDialog,
|
OpenProjectDialog,
|
||||||
Paste,
|
Paste,
|
||||||
Quit,
|
Quit,
|
||||||
|
Redo,
|
||||||
Save,
|
Save,
|
||||||
SelectAll,
|
SelectAll,
|
||||||
ToggleSettingsPage,
|
ToggleSettingsPage,
|
||||||
ToggleWordWrap,
|
ToggleWordWrap,
|
||||||
|
Undo,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Action {
|
impl Action {
|
||||||
|
|
@ -42,10 +44,12 @@ impl Action {
|
||||||
Self::OpenProjectDialog => Message::OpenProjectDialog,
|
Self::OpenProjectDialog => Message::OpenProjectDialog,
|
||||||
Self::Paste => Message::Paste,
|
Self::Paste => Message::Paste,
|
||||||
Self::Quit => Message::Quit,
|
Self::Quit => Message::Quit,
|
||||||
|
Self::Redo => Message::Redo,
|
||||||
Self::Save => Message::Save,
|
Self::Save => Message::Save,
|
||||||
Self::SelectAll => Message::SelectAll,
|
Self::SelectAll => Message::SelectAll,
|
||||||
Self::ToggleSettingsPage => Message::ToggleContextPage(ContextPage::Settings),
|
Self::ToggleSettingsPage => Message::ToggleContextPage(ContextPage::Settings),
|
||||||
Self::ToggleWordWrap => Message::ToggleWordWrap,
|
Self::ToggleWordWrap => Message::ToggleWordWrap,
|
||||||
|
Self::Undo => Message::Undo,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -107,10 +111,12 @@ impl KeyBind {
|
||||||
bind!([Ctrl], O, OpenFileDialog);
|
bind!([Ctrl], O, OpenFileDialog);
|
||||||
bind!([Ctrl, Shift], O, OpenProjectDialog);
|
bind!([Ctrl, Shift], O, OpenProjectDialog);
|
||||||
bind!([Ctrl], Q, Quit);
|
bind!([Ctrl], Q, Quit);
|
||||||
|
bind!([Ctrl, Shift], Z, Redo);
|
||||||
bind!([Ctrl], S, Save);
|
bind!([Ctrl], S, Save);
|
||||||
bind!([Ctrl], A, SelectAll);
|
bind!([Ctrl], A, SelectAll);
|
||||||
bind!([Ctrl], Comma, ToggleSettingsPage);
|
bind!([Ctrl], Comma, ToggleSettingsPage);
|
||||||
bind!([Alt], Z, ToggleWordWrap);
|
bind!([Alt], Z, ToggleWordWrap);
|
||||||
|
bind!([Ctrl], Z, Undo);
|
||||||
|
|
||||||
keybinds
|
keybinds
|
||||||
}
|
}
|
||||||
|
|
|
||||||
16
src/main.rs
16
src/main.rs
|
|
@ -120,6 +120,7 @@ pub enum Message {
|
||||||
Paste,
|
Paste,
|
||||||
PasteValue(String),
|
PasteValue(String),
|
||||||
Quit,
|
Quit,
|
||||||
|
Redo,
|
||||||
Save,
|
Save,
|
||||||
SelectAll,
|
SelectAll,
|
||||||
SyntaxTheme(usize, bool),
|
SyntaxTheme(usize, bool),
|
||||||
|
|
@ -128,6 +129,7 @@ pub enum Message {
|
||||||
Todo,
|
Todo,
|
||||||
ToggleContextPage(ContextPage),
|
ToggleContextPage(ContextPage),
|
||||||
ToggleWordWrap,
|
ToggleWordWrap,
|
||||||
|
Undo,
|
||||||
VimBindings(bool),
|
VimBindings(bool),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -689,6 +691,13 @@ impl Application for App {
|
||||||
//TODO: prompt for save?
|
//TODO: prompt for save?
|
||||||
return window::close();
|
return window::close();
|
||||||
}
|
}
|
||||||
|
Message::Redo => match self.active_tab() {
|
||||||
|
Some(tab) => {
|
||||||
|
let mut editor = tab.editor.lock().unwrap();
|
||||||
|
editor.redo();
|
||||||
|
}
|
||||||
|
None => {}
|
||||||
|
},
|
||||||
Message::Save => {
|
Message::Save => {
|
||||||
let mut title_opt = None;
|
let mut title_opt = None;
|
||||||
|
|
||||||
|
|
@ -785,6 +794,13 @@ impl Application for App {
|
||||||
self.config.word_wrap = !self.config.word_wrap;
|
self.config.word_wrap = !self.config.word_wrap;
|
||||||
return self.save_config();
|
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) => {
|
Message::VimBindings(vim_bindings) => {
|
||||||
self.config.vim_bindings = vim_bindings;
|
self.config.vim_bindings = vim_bindings;
|
||||||
return self.save_config();
|
return self.save_config();
|
||||||
|
|
|
||||||
|
|
@ -132,8 +132,8 @@ pub fn menu_bar<'a>(config: &Config) -> Element<'a, Message> {
|
||||||
MenuTree::with_children(
|
MenuTree::with_children(
|
||||||
menu_root(fl!("edit")),
|
menu_root(fl!("edit")),
|
||||||
vec![
|
vec![
|
||||||
menu_key(fl!("undo"), "Ctrl + Z", Message::Todo),
|
menu_item(fl!("undo"), Message::Undo),
|
||||||
menu_key(fl!("redo"), "Ctrl + Shift + Z", Message::Todo),
|
menu_item(fl!("redo"), Message::Redo),
|
||||||
MenuTree::new(horizontal_rule(1)),
|
MenuTree::new(horizontal_rule(1)),
|
||||||
menu_item(fl!("cut"), Message::Cut),
|
menu_item(fl!("cut"), Message::Cut),
|
||||||
menu_item(fl!("copy"), Message::Copy),
|
menu_item(fl!("copy"), Message::Copy),
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue