on 2158366 help sign in
helix/helix-view/src/register_selection.rs
48 lines 1.1 kB history raw
1/// Register selection and configuration
2///
3/// This is a kind a of specialized `Option<char>` for register selection.
4/// Point is to keep whether the register selection has been explicitely
5/// set or not while being convenient by knowing the default register name.
6#[derive(Debug)]
7pub struct RegisterSelection {
8 selected: char,
9 default_name: char,
12impl RegisterSelection {
13 pub fn new(default_name: char) -> Self {
14 Self {
15 selected: default_name,
16 default_name,
17 }
18 }
20 pub fn select(&mut self, name: char) {
21 self.selected = name;
22 }
24 pub fn take(&mut self) -> Self {
25 Self {
26 selected: std::mem::replace(&mut self.selected, self.default_name),
27 default_name: self.default_name,
28 }
29 }
31 pub fn is_default(&self) -> bool {
32 self.selected == self.default_name
33 }
35 pub fn name(&self) -> char {
36 self.selected
37 }
40impl Default for RegisterSelection {
41 fn default() -> Self {
42 let default_name = '"';
43 Self {
44 selected: default_name,
45 default_name,
46 }
47 }