mirror of https://github.com/helix-editor/helix
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.1 KiB
Rust
49 lines
1.1 KiB
Rust
/// Register selection and configuration
|
|
///
|
|
/// This is a kind a of specialized `Option<char>` for register selection.
|
|
/// Point is to keep whether the register selection has been explicitely
|
|
/// set or not while being convenient by knowing the default register name.
|
|
#[derive(Debug)]
|
|
pub struct RegisterSelection {
|
|
selected: char,
|
|
default_name: char,
|
|
}
|
|
|
|
impl RegisterSelection {
|
|
pub fn new(default_name: char) -> Self {
|
|
Self {
|
|
selected: default_name,
|
|
default_name,
|
|
}
|
|
}
|
|
|
|
pub fn select(&mut self, name: char) {
|
|
self.selected = name;
|
|
}
|
|
|
|
pub fn take(&mut self) -> Self {
|
|
Self {
|
|
selected: std::mem::replace(&mut self.selected, self.default_name),
|
|
default_name: self.default_name,
|
|
}
|
|
}
|
|
|
|
pub fn is_default(&self) -> bool {
|
|
self.selected == self.default_name
|
|
}
|
|
|
|
pub fn name(&self) -> char {
|
|
self.selected
|
|
}
|
|
}
|
|
|
|
impl Default for RegisterSelection {
|
|
fn default() -> Self {
|
|
let default_name = '"';
|
|
Self {
|
|
selected: default_name,
|
|
default_name,
|
|
}
|
|
}
|
|
}
|