aboutsummaryrefslogtreecommitdiff
path: root/src/config.rs
diff options
context:
space:
mode:
authorXiaoyu Yin <yin530@gmail.com>2017-01-14 17:53:48 -0800
committerJoe Wilm <jwilm@users.noreply.github.com>2017-02-07 21:04:18 -0800
commit92e1cec0880313d962d80bf16eca60cebb509eab (patch)
tree165d470ca13ab89dcf8b399b7491f3766b446ab2 /src/config.rs
parent59295e44312b3936132965636e5fac92118e5c27 (diff)
downloadalacritty-92e1cec0880313d962d80bf16eca60cebb509eab.tar.gz
alacritty-92e1cec0880313d962d80bf16eca60cebb509eab.zip
Semantic Selection
Fix tests and add line select Refactor BidirectionalIter to remove if blocks Allow for cells tagged with WRAPLINE to continue expanding the selection Reorganize config into structs Add test coverage that callbacks are called Cleanup mouse config - Uses Duration type for ClickHandler::threshold - Removes `action` property from ClickHandler--this can be added in a backwards compatible way later on - Renames ClickState::DblClick to DoubleClick fixup! Cleanup mouse config
Diffstat (limited to 'src/config.rs')
-rw-r--r--src/config.rs79
1 files changed, 75 insertions, 4 deletions
diff --git a/src/config.rs b/src/config.rs
index 362fe645..c610f419 100644
--- a/src/config.rs
+++ b/src/config.rs
@@ -3,21 +3,22 @@
//! Alacritty reads from a config file at startup to determine various runtime
//! parameters including font family and style, font size, etc. In the future,
//! the config file will also hold user and platform specific keybindings.
+use std::borrow::Cow;
use std::env;
use std::fmt;
+use std::fs::File;
use std::fs;
use std::io::{self, Read, Write};
+use std::ops::{Index, IndexMut};
use std::path::{Path, PathBuf};
use std::str::FromStr;
use std::sync::mpsc;
-use std::ops::{Index, IndexMut};
-use std::fs::File;
-use std::borrow::Cow;
+use std::time::Duration;
use ::Rgb;
use font::Size;
use serde_yaml;
-use serde::{self, de};
+use serde::{self, de, Deserialize};
use serde::de::Error as SerdeError;
use serde::de::{Visitor, MapVisitor, Unexpected};
use notify::{Watcher as WatcherApi, RecommendedWatcher as FileWatcher, op};
@@ -32,6 +33,52 @@ fn true_bool() -> bool {
true
}
+#[derive(Clone, Debug, Deserialize)]
+pub struct Selection {
+ pub semantic_escape_chars: String,
+}
+
+impl Default for Selection {
+ fn default() -> Selection {
+ Selection {
+ semantic_escape_chars: String::new()
+ }
+ }
+}
+
+#[derive(Clone, Debug, Deserialize)]
+pub struct ClickHandler {
+ #[serde(deserialize_with="deserialize_duration_ms")]
+ pub threshold: Duration,
+}
+
+fn deserialize_duration_ms<D>(deserializer: D) -> ::std::result::Result<Duration, D::Error>
+ where D: de::Deserializer
+{
+ let threshold_ms = u64::deserialize(deserializer)?;
+ Ok(Duration::from_millis(threshold_ms))
+}
+
+
+#[derive(Clone, Debug, Deserialize)]
+pub struct Mouse {
+ pub double_click: ClickHandler,
+ pub triple_click: ClickHandler,
+}
+
+impl Default for Mouse {
+ fn default() -> Mouse {
+ Mouse {
+ double_click: ClickHandler {
+ threshold: Duration::from_millis(300),
+ },
+ triple_click: ClickHandler {
+ threshold: Duration::from_millis(300),
+ }
+ }
+ }
+}
+
/// List of indexed colors
///
/// The first 16 entries are the standard ansi named colors. Items 16..232 are
@@ -248,6 +295,12 @@ pub struct Config {
#[serde(default="default_mouse_bindings")]
mouse_bindings: Vec<MouseBinding>,
+ #[serde(default="default_selection")]
+ selection: Selection,
+
+ #[serde(default="default_mouse")]
+ mouse: Mouse,
+
/// Path to a shell program to run on startup
#[serde(default)]
shell: Option<Shell<'static>>,
@@ -266,6 +319,10 @@ fn default_config() -> Config {
.expect("default config is valid")
}
+fn default_selection() -> Selection {
+ default_config().selection
+}
+
fn default_key_bindings() -> Vec<KeyBinding> {
default_config().key_bindings
}
@@ -274,6 +331,10 @@ fn default_mouse_bindings() -> Vec<MouseBinding> {
default_config().mouse_bindings
}
+fn default_mouse() -> Mouse {
+ default_config().mouse
+}
+
impl Default for Config {
fn default() -> Config {
Config {
@@ -286,6 +347,8 @@ impl Default for Config {
colors: Default::default(),
key_bindings: Vec::new(),
mouse_bindings: Vec::new(),
+ selection: Default::default(),
+ mouse: Default::default(),
shell: None,
config_path: None,
}
@@ -964,6 +1027,14 @@ impl Config {
&self.mouse_bindings[..]
}
+ pub fn mouse(&self) -> &Mouse {
+ &self.mouse
+ }
+
+ pub fn selection(&self) -> &Selection {
+ &self.selection
+ }
+
#[inline]
pub fn draw_bold_text_with_bright_colors(&self) -> bool {
self.draw_bold_text_with_bright_colors