mirror of
https://github.com/gitui-org/gitui
synced 2026-05-23 08:58:21 +00:00
Revert "Refactor key_list and remove key_list_file (#1511)"
This reverts commit 0fb1856d18.
This commit is contained in:
parent
8f29cb2e81
commit
01f6580125
5 changed files with 209 additions and 75 deletions
53
Cargo.lock
generated
53
Cargo.lock
generated
|
|
@ -785,7 +785,6 @@ dependencies = [
|
|||
"scopetime",
|
||||
"serde",
|
||||
"simplelog",
|
||||
"struct-patch",
|
||||
"syntect",
|
||||
"tempfile",
|
||||
"textwrap",
|
||||
|
|
@ -1393,30 +1392,6 @@ dependencies = [
|
|||
"yansi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro-error"
|
||||
version = "1.0.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
|
||||
dependencies = [
|
||||
"proc-macro-error-attr",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"version_check",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro-error-attr"
|
||||
version = "1.0.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"version_check",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro-hack"
|
||||
version = "0.5.20+deprecated"
|
||||
|
|
@ -1729,34 +1704,6 @@ version = "0.10.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
|
||||
|
||||
[[package]]
|
||||
name = "struct-patch"
|
||||
version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0a40c3718360af439b4119c3110bac97336af63b6da95069fca7f5c93fa41d10"
|
||||
dependencies = [
|
||||
"struct-patch-derive",
|
||||
"struct-patch-trait",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "struct-patch-derive"
|
||||
version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f586d0641263362666059ec7dc0c037f1a9f9da1b87f660e64a74ea4c88ab583"
|
||||
dependencies = [
|
||||
"proc-macro-error",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "struct-patch-trait"
|
||||
version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "eaeaa9346335d361de71460a808a85436bb39dbaa69b82c8be2ad9d3f21ea24a"
|
||||
|
||||
[[package]]
|
||||
name = "symbolic-common"
|
||||
version = "10.2.1"
|
||||
|
|
|
|||
|
|
@ -47,7 +47,6 @@ scopeguard = "1.1"
|
|||
scopetime = { path = "./scopetime", version = "0.1" }
|
||||
serde = "1.0"
|
||||
simplelog = { version = "0.12", default-features = false }
|
||||
struct-patch = "0.2.0"
|
||||
syntect = { version = "5.0", default-features = false, features = ["parsing", "default-syntaxes", "default-themes", "html"] }
|
||||
textwrap = "0.16"
|
||||
tui = { version = "0.19", default-features = false, features = ['crossterm', 'serde'] }
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
use crossterm::event::{KeyCode, KeyEvent, KeyModifiers};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::{fs::File, path::PathBuf};
|
||||
use struct_patch::traits::Patch as PatchTrait;
|
||||
use struct_patch::Patch;
|
||||
use std::path::PathBuf;
|
||||
|
||||
use super::key_list_file::KeysListFile;
|
||||
|
||||
#[derive(Debug, PartialOrd, Clone, Copy, Serialize, Deserialize)]
|
||||
pub struct GituiKeyEvent {
|
||||
|
|
@ -34,8 +34,7 @@ impl From<&GituiKeyEvent> for KeyEvent {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Patch)]
|
||||
#[patch_derive(Deserialize)]
|
||||
#[derive(Clone)]
|
||||
pub struct KeysList {
|
||||
pub tab_status: GituiKeyEvent,
|
||||
pub tab_log: GituiKeyEvent,
|
||||
|
|
@ -203,13 +202,14 @@ impl Default for KeysList {
|
|||
|
||||
impl KeysList {
|
||||
pub fn init(file: PathBuf) -> Self {
|
||||
let mut keys_list = Self::default();
|
||||
if let Ok(f) = File::open(file) {
|
||||
if let Ok(patch) = ron::de::from_reader(f) {
|
||||
keys_list.apply(patch);
|
||||
}
|
||||
if file.exists() {
|
||||
let file = KeysListFile::read_file(file)
|
||||
.map_err(|e| log::error!("key binding error: {e}",))
|
||||
.unwrap_or_default();
|
||||
file.get_list()
|
||||
} else {
|
||||
Self::default()
|
||||
}
|
||||
keys_list
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -220,16 +220,6 @@ mod tests {
|
|||
use std::io::Write;
|
||||
use tempfile::NamedTempFile;
|
||||
|
||||
#[test]
|
||||
fn test_apply_vim_style_example() {
|
||||
let mut keys_list = KeysList::default();
|
||||
let f = File::open("vim_style_key_config.ron")
|
||||
.expect("vim style config should exist");
|
||||
let patch = ron::de::from_reader(f)
|
||||
.expect("vim style config format incorrect");
|
||||
keys_list.apply(patch);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_smoke() {
|
||||
let mut file = NamedTempFile::new().unwrap();
|
||||
|
|
|
|||
197
src/keys/key_list_file.rs
Normal file
197
src/keys/key_list_file.rs
Normal file
|
|
@ -0,0 +1,197 @@
|
|||
use anyhow::Result;
|
||||
use ron::{self};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::{fs::File, io::Read, path::PathBuf};
|
||||
|
||||
use super::key_list::{GituiKeyEvent, KeysList};
|
||||
|
||||
#[derive(Serialize, Deserialize, Default)]
|
||||
pub struct KeysListFile {
|
||||
pub tab_status: Option<GituiKeyEvent>,
|
||||
pub tab_log: Option<GituiKeyEvent>,
|
||||
pub tab_files: Option<GituiKeyEvent>,
|
||||
pub tab_stashing: Option<GituiKeyEvent>,
|
||||
pub tab_stashes: Option<GituiKeyEvent>,
|
||||
pub tab_toggle: Option<GituiKeyEvent>,
|
||||
pub tab_toggle_reverse: Option<GituiKeyEvent>,
|
||||
pub toggle_workarea: Option<GituiKeyEvent>,
|
||||
pub exit: Option<GituiKeyEvent>,
|
||||
pub quit: Option<GituiKeyEvent>,
|
||||
pub exit_popup: Option<GituiKeyEvent>,
|
||||
pub open_commit: Option<GituiKeyEvent>,
|
||||
pub open_commit_editor: Option<GituiKeyEvent>,
|
||||
pub open_help: Option<GituiKeyEvent>,
|
||||
pub open_options: Option<GituiKeyEvent>,
|
||||
pub move_left: Option<GituiKeyEvent>,
|
||||
pub move_right: Option<GituiKeyEvent>,
|
||||
pub tree_collapse_recursive: Option<GituiKeyEvent>,
|
||||
pub tree_expand_recursive: Option<GituiKeyEvent>,
|
||||
pub home: Option<GituiKeyEvent>,
|
||||
pub end: Option<GituiKeyEvent>,
|
||||
pub move_up: Option<GituiKeyEvent>,
|
||||
pub move_down: Option<GituiKeyEvent>,
|
||||
pub popup_up: Option<GituiKeyEvent>,
|
||||
pub popup_down: Option<GituiKeyEvent>,
|
||||
pub page_down: Option<GituiKeyEvent>,
|
||||
pub page_up: Option<GituiKeyEvent>,
|
||||
pub shift_up: Option<GituiKeyEvent>,
|
||||
pub shift_down: Option<GituiKeyEvent>,
|
||||
pub enter: Option<GituiKeyEvent>,
|
||||
pub blame: Option<GituiKeyEvent>,
|
||||
pub edit_file: Option<GituiKeyEvent>,
|
||||
pub file_history: Option<GituiKeyEvent>,
|
||||
pub status_stage_all: Option<GituiKeyEvent>,
|
||||
pub status_reset_item: Option<GituiKeyEvent>,
|
||||
pub status_ignore_file: Option<GituiKeyEvent>,
|
||||
pub diff_stage_lines: Option<GituiKeyEvent>,
|
||||
pub diff_reset_lines: Option<GituiKeyEvent>,
|
||||
pub stashing_save: Option<GituiKeyEvent>,
|
||||
pub stashing_toggle_untracked: Option<GituiKeyEvent>,
|
||||
pub stashing_toggle_index: Option<GituiKeyEvent>,
|
||||
pub stash_apply: Option<GituiKeyEvent>,
|
||||
pub stash_open: Option<GituiKeyEvent>,
|
||||
pub stash_drop: Option<GituiKeyEvent>,
|
||||
pub cmd_bar_toggle: Option<GituiKeyEvent>,
|
||||
pub log_tag_commit: Option<GituiKeyEvent>,
|
||||
pub log_mark_commit: Option<GituiKeyEvent>,
|
||||
pub log_checkout_commit: Option<GituiKeyEvent>,
|
||||
pub log_reset_commit: Option<GituiKeyEvent>,
|
||||
pub log_reword_commit: Option<GituiKeyEvent>,
|
||||
pub commit_amend: Option<GituiKeyEvent>,
|
||||
pub toggle_verify: Option<GituiKeyEvent>,
|
||||
pub copy: Option<GituiKeyEvent>,
|
||||
pub create_branch: Option<GituiKeyEvent>,
|
||||
pub rename_branch: Option<GituiKeyEvent>,
|
||||
pub select_branch: Option<GituiKeyEvent>,
|
||||
pub delete_branch: Option<GituiKeyEvent>,
|
||||
pub merge_branch: Option<GituiKeyEvent>,
|
||||
pub rebase_branch: Option<GituiKeyEvent>,
|
||||
pub compare_commits: Option<GituiKeyEvent>,
|
||||
pub tags: Option<GituiKeyEvent>,
|
||||
pub delete_tag: Option<GituiKeyEvent>,
|
||||
pub select_tag: Option<GituiKeyEvent>,
|
||||
pub push: Option<GituiKeyEvent>,
|
||||
pub open_file_tree: Option<GituiKeyEvent>,
|
||||
pub file_find: Option<GituiKeyEvent>,
|
||||
pub force_push: Option<GituiKeyEvent>,
|
||||
pub fetch: Option<GituiKeyEvent>,
|
||||
pub pull: Option<GituiKeyEvent>,
|
||||
pub abort_merge: Option<GituiKeyEvent>,
|
||||
pub undo_commit: Option<GituiKeyEvent>,
|
||||
pub stage_unstage_item: Option<GituiKeyEvent>,
|
||||
pub tag_annotate: Option<GituiKeyEvent>,
|
||||
pub view_submodules: Option<GituiKeyEvent>,
|
||||
pub view_submodule_parent: Option<GituiKeyEvent>,
|
||||
pub update_dubmodule: Option<GituiKeyEvent>,
|
||||
pub commit_history_next: Option<GituiKeyEvent>,
|
||||
}
|
||||
|
||||
impl KeysListFile {
|
||||
pub fn read_file(config_file: PathBuf) -> Result<Self> {
|
||||
let mut f = File::open(config_file)?;
|
||||
let mut buffer = Vec::new();
|
||||
f.read_to_end(&mut buffer)?;
|
||||
Ok(ron::de::from_bytes(&buffer)?)
|
||||
}
|
||||
|
||||
#[rustfmt::skip]
|
||||
pub fn get_list(self) -> KeysList {
|
||||
let default = KeysList::default();
|
||||
|
||||
KeysList {
|
||||
tab_status: self.tab_status.unwrap_or(default.tab_status),
|
||||
tab_log: self.tab_log.unwrap_or(default.tab_log),
|
||||
tab_files: self.tab_files.unwrap_or(default.tab_files),
|
||||
tab_stashing: self.tab_stashing.unwrap_or(default.tab_stashing),
|
||||
tab_stashes: self.tab_stashes.unwrap_or(default.tab_stashes),
|
||||
tab_toggle: self.tab_toggle.unwrap_or(default.tab_toggle),
|
||||
tab_toggle_reverse: self.tab_toggle_reverse.unwrap_or(default.tab_toggle_reverse),
|
||||
toggle_workarea: self.toggle_workarea.unwrap_or(default.toggle_workarea),
|
||||
exit: self.exit.unwrap_or(default.exit),
|
||||
quit: self.quit.unwrap_or(default.quit),
|
||||
exit_popup: self.exit_popup.unwrap_or(default.exit_popup),
|
||||
open_commit: self.open_commit.unwrap_or(default.open_commit),
|
||||
open_commit_editor: self.open_commit_editor.unwrap_or(default.open_commit_editor),
|
||||
open_help: self.open_help.unwrap_or(default.open_help),
|
||||
open_options: self.open_options.unwrap_or(default.open_options),
|
||||
move_left: self.move_left.unwrap_or(default.move_left),
|
||||
move_right: self.move_right.unwrap_or(default.move_right),
|
||||
tree_collapse_recursive: self.tree_collapse_recursive.unwrap_or(default.tree_collapse_recursive),
|
||||
tree_expand_recursive: self.tree_expand_recursive.unwrap_or(default.tree_expand_recursive),
|
||||
home: self.home.unwrap_or(default.home),
|
||||
end: self.end.unwrap_or(default.end),
|
||||
move_up: self.move_up.unwrap_or(default.move_up),
|
||||
move_down: self.move_down.unwrap_or(default.move_down),
|
||||
popup_up: self.popup_up.unwrap_or(default.popup_up),
|
||||
popup_down: self.popup_down.unwrap_or(default.popup_down),
|
||||
page_down: self.page_down.unwrap_or(default.page_down),
|
||||
page_up: self.page_up.unwrap_or(default.page_up),
|
||||
shift_up: self.shift_up.unwrap_or(default.shift_up),
|
||||
shift_down: self.shift_down.unwrap_or(default.shift_down),
|
||||
enter: self.enter.unwrap_or(default.enter),
|
||||
blame: self.blame.unwrap_or(default.blame),
|
||||
edit_file: self.edit_file.unwrap_or(default.edit_file),
|
||||
file_history: self.file_history.unwrap_or(default.file_history),
|
||||
status_stage_all: self.status_stage_all.unwrap_or(default.status_stage_all),
|
||||
status_reset_item: self.status_reset_item.unwrap_or(default.status_reset_item),
|
||||
status_ignore_file: self.status_ignore_file.unwrap_or(default.status_ignore_file),
|
||||
diff_stage_lines: self.diff_stage_lines.unwrap_or(default.diff_stage_lines),
|
||||
diff_reset_lines: self.diff_reset_lines.unwrap_or(default.diff_reset_lines),
|
||||
stashing_save: self.stashing_save.unwrap_or(default.stashing_save),
|
||||
stashing_toggle_untracked: self.stashing_toggle_untracked.unwrap_or(default.stashing_toggle_untracked),
|
||||
stashing_toggle_index: self.stashing_toggle_index.unwrap_or(default.stashing_toggle_index),
|
||||
stash_apply: self.stash_apply.unwrap_or(default.stash_apply),
|
||||
stash_open: self.stash_open.unwrap_or(default.stash_open),
|
||||
stash_drop: self.stash_drop.unwrap_or(default.stash_drop),
|
||||
cmd_bar_toggle: self.cmd_bar_toggle.unwrap_or(default.cmd_bar_toggle),
|
||||
log_tag_commit: self.log_tag_commit.unwrap_or(default.log_tag_commit),
|
||||
log_mark_commit: self.log_mark_commit.unwrap_or(default.log_mark_commit),
|
||||
log_checkout_commit: self.log_checkout_commit.unwrap_or(default.log_checkout_commit),
|
||||
log_reset_comit: self.log_reset_commit.unwrap_or(default.log_reset_comit),
|
||||
log_reword_comit: self.log_reword_commit.unwrap_or(default.log_reword_comit),
|
||||
commit_amend: self.commit_amend.unwrap_or(default.commit_amend),
|
||||
toggle_verify: self.toggle_verify.unwrap_or(default.toggle_verify),
|
||||
copy: self.copy.unwrap_or(default.copy),
|
||||
create_branch: self.create_branch.unwrap_or(default.create_branch),
|
||||
rename_branch: self.rename_branch.unwrap_or(default.rename_branch),
|
||||
select_branch: self.select_branch.unwrap_or(default.select_branch),
|
||||
delete_branch: self.delete_branch.unwrap_or(default.delete_branch),
|
||||
merge_branch: self.merge_branch.unwrap_or(default.merge_branch),
|
||||
rebase_branch: self.rebase_branch.unwrap_or(default.rebase_branch),
|
||||
compare_commits: self.compare_commits.unwrap_or(default.compare_commits),
|
||||
tags: self.tags.unwrap_or(default.tags),
|
||||
delete_tag: self.delete_tag.unwrap_or(default.delete_tag),
|
||||
select_tag: self.select_tag.unwrap_or(default.select_tag),
|
||||
push: self.push.unwrap_or(default.push),
|
||||
open_file_tree: self.open_file_tree.unwrap_or(default.open_file_tree),
|
||||
file_find: self.file_find.unwrap_or(default.file_find),
|
||||
force_push: self.force_push.unwrap_or(default.force_push),
|
||||
fetch: self.fetch.unwrap_or(default.fetch),
|
||||
pull: self.pull.unwrap_or(default.pull),
|
||||
abort_merge: self.abort_merge.unwrap_or(default.abort_merge),
|
||||
undo_commit: self.undo_commit.unwrap_or(default.undo_commit),
|
||||
stage_unstage_item: self.stage_unstage_item.unwrap_or(default.stage_unstage_item),
|
||||
tag_annotate: self.tag_annotate.unwrap_or(default.tag_annotate),
|
||||
view_submodules: self.view_submodules.unwrap_or(default.view_submodules),
|
||||
view_submodule_parent: self.view_submodule_parent.unwrap_or(default.view_submodule_parent),
|
||||
update_submodule: self.update_dubmodule.unwrap_or(default.update_submodule),
|
||||
commit_history_next: self.commit_history_next.unwrap_or(default.commit_history_next),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_load_vim_style_example() {
|
||||
assert_eq!(
|
||||
KeysListFile::read_file(
|
||||
"vim_style_key_config.ron".into()
|
||||
)
|
||||
.is_ok(),
|
||||
true
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
mod key_config;
|
||||
mod key_list;
|
||||
mod key_list_file;
|
||||
mod symbols;
|
||||
|
||||
pub use key_config::{KeyConfig, SharedKeyConfig};
|
||||
|
|
|
|||
Loading…
Reference in a new issue