summaryrefslogtreecommitdiffstats
path: root/src/config
diff options
context:
space:
mode:
authorJiayi Zhao <jeff.no.zhao@gmail.com>2019-05-31 16:13:54 -0400
committerJiayi Zhao <jeff.no.zhao@gmail.com>2019-05-31 16:13:54 -0400
commit3cba2ba36e826985c160e58faf556a6b2d17fbcb (patch)
treec6d95dbc3021b027326def5aae90aeea747ee071 /src/config
parent6f1271f457d3201b269f99bc3c6571280f0f99e1 (diff)
add support for specifying certain keycodes for certain keyboard actions
Diffstat (limited to 'src/config')
-rw-r--r--src/config/config.rs4
-rw-r--r--src/config/keymap.rs137
-rw-r--r--src/config/mimetype.rs4
-rw-r--r--src/config/mod.rs6
-rw-r--r--src/config/preview.rs4
-rw-r--r--src/config/theme.rs4
6 files changed, 138 insertions, 21 deletions
diff --git a/src/config/config.rs b/src/config/config.rs
index 14b4d67..f093d79 100644
--- a/src/config/config.rs
+++ b/src/config/config.rs
@@ -1,6 +1,6 @@
use serde_derive::Deserialize;
-use super::{parse_config_file, ConfigStructure, Flattenable};
+use super::{parse_to_config_file, ConfigStructure, Flattenable};
use crate::sort;
use crate::CONFIG_FILE;
@@ -108,7 +108,7 @@ pub struct JoshutoConfig {
impl ConfigStructure for JoshutoConfig {
fn get_config() -> Self {
- parse_config_file::<JoshutoRawConfig, JoshutoConfig>(CONFIG_FILE)
+ parse_to_config_file::<JoshutoRawConfig, JoshutoConfig>(CONFIG_FILE)
.unwrap_or_else(JoshutoConfig::default)
}
}
diff --git a/src/config/keymap.rs b/src/config/keymap.rs
index 1befdfe..f5c8eb1 100644
--- a/src/config/keymap.rs
+++ b/src/config/keymap.rs
@@ -2,7 +2,7 @@ use serde_derive::Deserialize;
use std::collections::{hash_map::Entry, HashMap};
use std::process::exit;
-use super::{parse_config_file, ConfigStructure, Flattenable};
+use super::{parse_config_file, parse_to_config_file, ConfigStructure, Flattenable};
use crate::commands::{self, CommandKeybind, JoshutoCommand};
use crate::KEYMAP_FILE;
@@ -13,6 +13,121 @@ pub const ESCAPE: i32 = 0x1B;
/* #define KEY_ALT(x) KEY_F(60) + (x - 'A') */
+const fn default_up() -> i32 {
+ ncurses::KEY_UP
+}
+
+const fn default_down() -> i32 {
+ ncurses::KEY_DOWN
+}
+
+const fn default_left() -> i32 {
+ ncurses::KEY_LEFT
+}
+
+const fn default_right() -> i32 {
+ ncurses::KEY_RIGHT
+}
+
+const fn default_home() -> i32 {
+ ncurses::KEY_HOME
+}
+
+const fn default_end() -> i32 {
+ ncurses::KEY_END
+}
+
+const fn default_backspace() -> i32 {
+ BACKSPACE
+}
+
+const fn default_delete() -> i32 {
+ ncurses::KEY_DC
+}
+
+const fn default_enter() -> i32 {
+ ENTER
+}
+
+const fn default_escape() -> i32 {
+ ESCAPE
+}
+
+const fn default_tab() -> i32 {
+ TAB
+}
+
+#[derive(Debug, Deserialize)]
+struct JoshutoRawKeymapping {
+ #[serde(default)]
+ keymaps: JoshutoKeyMapping,
+ #[serde(skip)]
+ mapcommand: Vec<JoshutoMapCommand>,
+}
+
+#[derive(Debug, Deserialize)]
+pub struct JoshutoKeyMapping {
+ #[serde(default = "default_up")]
+ pub up: i32,
+ #[serde(default = "default_down")]
+ pub down: i32,
+ #[serde(default = "default_left")]
+ pub left: i32,
+ #[serde(default = "default_right")]
+ pub right: i32,
+ #[serde(default = "default_home")]
+ pub home: i32,
+ #[serde(default = "default_end")]
+ pub end: i32,
+/*
+ #[serde(default = "default_up")]
+ pub page_up: i32,
+ #[serde(default = "default_up")]
+ pub page_down: i32,
+*/
+ #[serde(default = "default_backspace")]
+ pub backspace: i32,
+ #[serde(default = "default_delete")]
+ pub delete: i32,
+ #[serde(default = "default_enter")]
+ pub enter: i32,
+ #[serde(default = "default_escape")]
+ pub escape: i32,
+ #[serde(default = "default_tab")]
+ pub tab: i32,
+}
+
+impl std::default::Default for JoshutoKeyMapping {
+ fn default() -> Self {
+ JoshutoKeyMapping {
+ up: default_up(),
+ down: default_down(),
+ left: default_left(),
+ right: default_right(),
+ home: default_home(),
+ end: default_end(),
+ backspace: default_backspace(),
+ delete: default_delete(),
+ enter: default_enter(),
+ escape: default_escape(),
+ tab: default_tab(),
+ }
+ }
+}
+
+impl Flattenable<JoshutoKeyMapping> for JoshutoRawKeymapping {
+ fn flatten(self) -> JoshutoKeyMapping {
+ self.keymaps
+ }
+}
+
+impl ConfigStructure for JoshutoKeyMapping {
+ fn get_config() -> Self {
+ parse_to_config_file::<JoshutoRawKeymapping, JoshutoKeyMapping>(KEYMAP_FILE)
+ .unwrap_or_else(JoshutoKeyMapping::default)
+ }
+}
+
#[derive(Debug, Deserialize)]
struct JoshutoMapCommand {
pub keys: Vec<i32>,
@@ -22,14 +137,16 @@ struct JoshutoMapCommand {
}
#[derive(Debug, Deserialize)]
-struct JoshutoRawKeymap {
+struct JoshutoRawCommandMapping {
+ #[serde(skip)]
+ keymaps: JoshutoKeyMapping,
#[serde(default)]
mapcommand: Vec<JoshutoMapCommand>,
}
-impl Flattenable<JoshutoKeymap> for JoshutoRawKeymap {
- fn flatten(self) -> JoshutoKeymap {
- let mut keymaps = JoshutoKeymap::new();
+impl Flattenable<JoshutoCommandMapping> for JoshutoRawCommandMapping {
+ fn flatten(self) -> JoshutoCommandMapping {
+ let mut keymaps = JoshutoCommandMapping::new();
self.mapcommand.iter().for_each(|m| {
let args: Vec<&str> = m.args.iter().map(|s| s.as_str()).collect();
match commands::from_args(m.command.as_str(), &args) {
@@ -41,16 +158,16 @@ impl Flattenable<JoshutoKeymap> for JoshutoRawKeymap {
}
}
-pub type JoshutoKeymap = HashMap<i32, CommandKeybind>;
+pub type JoshutoCommandMapping = HashMap<i32, CommandKeybind>;
-impl ConfigStructure for JoshutoKeymap {
+impl ConfigStructure for JoshutoCommandMapping {
fn get_config() -> Self {
- parse_config_file::<JoshutoRawKeymap, JoshutoKeymap>(KEYMAP_FILE)
- .unwrap_or_else(JoshutoKeymap::default)
+ parse_to_config_file::<JoshutoRawCommandMapping, JoshutoCommandMapping>(KEYMAP_FILE)
+ .unwrap_or_else(JoshutoCommandMapping::default)
}
}
-fn insert_keycommand(map: &mut JoshutoKeymap, keycommand: Box<JoshutoCommand>, keys: &[i32]) {
+fn insert_keycommand(map: &mut JoshutoCommandMapping, keycommand: Box<JoshutoCommand>, keys: &[i32]) {
match keys.len() {
0 => {}
1 => match map.entry(keys[0]) {
diff --git a/src/config/mimetype.rs b/src/config/mimetype.rs
index 7e45d8d..eff0540 100644
--- a/src/config/mimetype.rs
+++ b/src/config/mimetype.rs
@@ -2,7 +2,7 @@ use serde_derive::Deserialize;
use std::collections::HashMap;
use std::fmt;
-use super::{parse_config_file, ConfigStructure, Flattenable};
+use super::{parse_to_config_file, ConfigStructure, Flattenable};
use crate::MIMETYPE_FILE;
const fn default_false() -> bool {
@@ -92,7 +92,7 @@ impl JoshutoMimetype {
impl ConfigStructure for JoshutoMimetype {
fn get_config() -> Self {
- parse_config_file::<JoshutoRawMimetype, JoshutoMimetype>(MIMETYPE_FILE)
+ parse_to_config_file::<JoshutoRawMimetype, JoshutoMimetype>(MIMETYPE_FILE)
.unwrap_or_else(JoshutoMimetype::default)
}
}
diff --git a/src/config/mod.rs b/src/config/mod.rs
index 822af58..db15753 100644
--- a/src/config/mod.rs
+++ b/src/config/mod.rs
@@ -5,7 +5,7 @@ pub mod preview;
pub mod theme;
pub use self::config::JoshutoConfig;
-pub use self::keymap::JoshutoKeymap;
+pub use self::keymap::{JoshutoCommandMapping, JoshutoKeyMapping};
pub use self::mimetype::JoshutoMimetype;
pub use self::preview::{JoshutoPreview, JoshutoPreviewEntry};
pub use self::theme::{JoshutoColorTheme, JoshutoTheme};
@@ -40,7 +40,7 @@ where
}
// parses a config file into its appropriate format
-fn parse_config_file<T, S>(filename: &str) -> Option<S>
+fn parse_to_config_file<T, S>(filename: &str) -> Option<S>
where
T: DeserializeOwned + Flattenable<S>,
{
@@ -63,7 +63,7 @@ where
}
// parses a config file into its appropriate format
-fn parse_config<T>(filename: &str) -> Option<T>
+fn parse_config_file<T>(filename: &str) -> Option<T>
where
T: DeserializeOwned,
{
diff --git a/src/config/preview.rs b/src/config/preview.rs
index aad3613..e966e4e 100644
--- a/src/config/preview.rs
+++ b/src/config/preview.rs
@@ -1,7 +1,7 @@
use serde_derive::Deserialize;
use std::collections::HashMap;
-use super::{parse_config_file, ConfigStructure, Flattenable};
+use super::{parse_to_config_file, ConfigStructure, Flattenable};
use crate::PREVIEW_FILE;
#[derive(Debug, Deserialize)]
@@ -45,7 +45,7 @@ pub struct JoshutoPreview {
impl ConfigStructure for JoshutoPreview {
fn get_config() -> Self {
- parse_config_file::<JoshutoRawPreview, JoshutoPreview>(PREVIEW_FILE)
+ parse_to_config_file::<JoshutoRawPreview, JoshutoPreview>(PREVIEW_FILE)
.unwrap_or_else(JoshutoPreview::default)
}
}
diff --git a/src/config/theme.rs b/src/config/theme.rs
index ab88d6f..ef5e9ba 100644
--- a/src/config/theme.rs
+++ b/src/config/theme.rs
@@ -1,7 +1,7 @@
use serde_derive::Deserialize;
use std::collections::HashMap;
-use super::{parse_config, ConfigStructure};
+use super::{parse_config_file, ConfigStructure};
const fn default_zero() -> i16 {
0
@@ -82,7 +82,7 @@ pub struct JoshutoTheme {
impl ConfigStructure for JoshutoTheme {
fn get_config() -> Self {
- parse_config::<JoshutoTheme>(crate::THEME_FILE).unwrap_or_else(JoshutoTheme::default)
+ parse_config_file::<JoshutoTheme>(crate::THEME_FILE).unwrap_or_else(JoshutoTheme::default)
}
}