diff options
author | Xiaoyu Yin <yin530@gmail.com> | 2017-01-14 17:53:48 -0800 |
---|---|---|
committer | Joe Wilm <jwilm@users.noreply.github.com> | 2017-02-07 21:04:18 -0800 |
commit | 92e1cec0880313d962d80bf16eca60cebb509eab (patch) | |
tree | 165d470ca13ab89dcf8b399b7491f3766b446ab2 /src/config.rs | |
parent | 59295e44312b3936132965636e5fac92118e5c27 (diff) | |
download | alacritty-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.rs | 79 |
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 |