on master help sign in
Refactor blackhole register (#4504)
commit3b7760dfb0cdb547ff8c94f7685554f59d16bf0a authorath3 <45574139+ath3@users.noreply.github.com> dateTue 15 Nov 2022, 15:14 (4 years ago) parent652497b
3 files changed+29−37
helix-core/src/register.rs+17−19 helix-term/src/commands.rs+4−6 helix-term/src/ui/prompt.rs+8−12
helix-core/src/register.rs+17−19
@@ -15,11 +15,7 @@ impl Register {
1515 }
1616
1717 pub fn new_with_values(name: char, values: Vec<String>) -> Self {
18− if name == '_' {
19− Self::new(name)
20− } else {
21− Self { name, values }
22− }
18+ Self { name, values }
2319 }
2420
2521 pub const fn name(&self) -> char {
@@ -31,15 +27,11 @@ impl Register {
3127 }
3228
3329 pub fn write(&mut self, values: Vec<String>) {
34− if self.name != '_' {
35− self.values = values;
36− }
30+ self.values = values;
3731 }
3832
3933 pub fn push(&mut self, value: String) {
40− if self.name != '_' {
41− self.values.push(value);
42− }
34+ self.values.push(value);
4335 }
4436}
4537
@@ -54,19 +46,25 @@ impl Registers {
5446 self.inner.get(&name)
5547 }
5648
57− pub fn get_mut(&mut self, name: char) -> &mut Register {
58− self.inner
59− .entry(name)
60− .or_insert_with(|| Register::new(name))
49+ pub fn read(&self, name: char) -> Option<&[String]> {
50+ self.get(name).map(|reg| reg.read())
6151 }
6252
6353 pub fn write(&mut self, name: char, values: Vec<String>) {
64− self.inner
65− .insert(name, Register::new_with_values(name, values));
54+ if name != '_' {
55+ self.inner
56+ .insert(name, Register::new_with_values(name, values));
57+ }
6658 }
6759
68− pub fn read(&self, name: char) -> Option<&[String]> {
69− self.get(name).map(|reg| reg.read())
60+ pub fn push(&mut self, name: char, value: String) {
61+ if name != '_' {
62+ if let Some(r) = self.inner.get_mut(&name) {
63+ r.push(value);
64+ } else {
65+ self.write(name, vec![value]);
66+ }
67+ }
7068 }
7169
7270 pub fn first(&self, name: char) -> Option<&String> {
helix-term/src/commands.rs+4−6
@@ -1805,7 +1805,7 @@ fn search_selection(cx: &mut Context) {
18051805 .join("|");
18061806
18071807 let msg = format!("register '{}' set to '{}'", '/', &regex);
1808− cx.editor.registers.get_mut('/').push(regex);
1808+ cx.editor.registers.push('/', regex);
18091809 cx.editor.set_status(msg);
18101810}
18111811
@@ -2121,16 +2121,14 @@ enum Operation {
21212121fn delete_selection_impl(cx: &mut Context, op: Operation) {
21222122 let (view, doc) = current!(cx.editor);
21232123
2124− let text = doc.text().slice(..);
21252124 let selection = doc.selection(view.id);
21262125
21272126 if cx.register != Some('_') {
21282127 // first yank the selection
2128+ let text = doc.text().slice(..);
21292129 let values: Vec<String> = selection.fragments(text).map(Cow::into_owned).collect();
21302130 let reg_name = cx.register.unwrap_or('"');
2131− let registers = &mut cx.editor.registers;
2132− let reg = registers.get_mut(reg_name);
2133− reg.write(values);
2131+ cx.editor.registers.write(reg_name, values);
21342132 };
21352133
21362134 // then delete
@@ -5005,7 +5003,7 @@ fn record_macro(cx: &mut Context) {
50055003 }
50065004 })
50075005 .collect::<String>();
5008− cx.editor.registers.get_mut(reg).write(vec![s]);
5006+ cx.editor.registers.write(reg, vec![s]);
50095007 cx.editor
50105008 .set_status(format!("Recorded to register [{}]", reg));
50115009 } else {
helix-term/src/ui/prompt.rs+8−12
@@ -294,23 +294,22 @@ impl Prompt {
294294 direction: CompletionDirection,
295295 ) {
296296 (self.callback_fn)(cx, &self.line, PromptEvent::Abort);
297− let register = cx.editor.registers.get_mut(register).read();
298−
299− if register.is_empty() {
300− return;
301− }
297+ let values = match cx.editor.registers.read(register) {
298+ Some(values) if !values.is_empty() => values,
299+ _ => return,
300+ };
302301
303− let end = register.len().saturating_sub(1);
302+ let end = values.len().saturating_sub(1);
304303
305304 let index = match direction {
306305 CompletionDirection::Forward => self.history_pos.map_or(0, |i| i + 1),
307306 CompletionDirection::Backward => {
308− self.history_pos.unwrap_or(register.len()).saturating_sub(1)
307+ self.history_pos.unwrap_or(values.len()).saturating_sub(1)
309308 }
310309 }
311310 .min(end);
312311
313− self.line = register[index].clone();
312+ self.line = values[index].clone();
314313
315314 self.history_pos = Some(index);
316315
@@ -548,10 +547,7 @@ impl Component for Prompt {
548547 if last_item != self.line {
549548 // store in history
550549 if let Some(register) = self.history_register {
551− cx.editor
552− .registers
553− .get_mut(register)
554− .push(self.line.clone());
550+ cx.editor.registers.push(register, self.line.clone());
555551 };
556552 }
557553