mirror of https://github.com/helix-editor/helix
Merge 1ffa4789ad
into 205e7ece70
commit
cbc2f9f785
|
@ -43,7 +43,8 @@ Some registers have special behavior when read from and written to.
|
||||||
| `_` | No values are returned | All values are discarded |
|
| `_` | No values are returned | All values are discarded |
|
||||||
| `#` | Selection indices (first selection is `1`, second is `2`, etc.) | This register is not writable |
|
| `#` | Selection indices (first selection is `1`, second is `2`, etc.) | This register is not writable |
|
||||||
| `.` | Contents of the current selections | This register is not writable |
|
| `.` | Contents of the current selections | This register is not writable |
|
||||||
| `%` | Name of the current file | This register is not writable |
|
| `%` | Name of the current file, relative to Helix's current working directory | This register is not writable |
|
||||||
|
| `=` | Absolute path to the current file | This register is not writable |
|
||||||
| `+` | Reads from the system clipboard | Joins and yanks to the system clipboard |
|
| `+` | Reads from the system clipboard | Joins and yanks to the system clipboard |
|
||||||
| `*` | Reads from the primary clipboard | Joins and yanks to the primary clipboard |
|
| `*` | Reads from the primary clipboard | Joins and yanks to the primary clipboard |
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,8 @@ use crate::{
|
||||||
/// * Black hole (`_`): all values read and written are discarded
|
/// * Black hole (`_`): all values read and written are discarded
|
||||||
/// * Selection indices (`#`): index number of each selection starting at 1
|
/// * Selection indices (`#`): index number of each selection starting at 1
|
||||||
/// * Selection contents (`.`)
|
/// * Selection contents (`.`)
|
||||||
/// * Document path (`%`): filename of the current buffer
|
/// * Relative document path (`%`): filename of the current buffer, relative to Helix's current working directory
|
||||||
|
/// * Absolute document path (`=`): absolute path of the current buffer
|
||||||
/// * System clipboard (`*`)
|
/// * System clipboard (`*`)
|
||||||
/// * Primary clipboard (`+`)
|
/// * Primary clipboard (`+`)
|
||||||
pub struct Registers {
|
pub struct Registers {
|
||||||
|
@ -57,8 +58,16 @@ impl Registers {
|
||||||
let text = doc.text().slice(..);
|
let text = doc.text().slice(..);
|
||||||
Some(RegisterValues::new(doc.selection(view.id).fragments(text)))
|
Some(RegisterValues::new(doc.selection(view.id).fragments(text)))
|
||||||
}
|
}
|
||||||
'%' => {
|
'%' | '=' => {
|
||||||
let path = doc!(editor).display_name();
|
let doc = doc!(editor);
|
||||||
|
let path = match name {
|
||||||
|
'%' => doc.display_name(),
|
||||||
|
'=' => doc.path().map_or_else(
|
||||||
|
|| crate::document::SCRATCH_BUFFER_NAME.into(),
|
||||||
|
|path| path.to_string_lossy(),
|
||||||
|
),
|
||||||
|
_ => unreachable!(),
|
||||||
|
};
|
||||||
Some(RegisterValues::new(iter::once(path)))
|
Some(RegisterValues::new(iter::once(path)))
|
||||||
}
|
}
|
||||||
'*' | '+' => Some(read_from_clipboard(
|
'*' | '+' => Some(read_from_clipboard(
|
||||||
|
@ -80,7 +89,9 @@ impl Registers {
|
||||||
pub fn write(&mut self, name: char, mut values: Vec<String>) -> Result<()> {
|
pub fn write(&mut self, name: char, mut values: Vec<String>) -> Result<()> {
|
||||||
match name {
|
match name {
|
||||||
'_' => Ok(()),
|
'_' => Ok(()),
|
||||||
'#' | '.' | '%' => Err(anyhow::anyhow!("Register {name} does not support writing")),
|
'#' | '.' | '%' | '=' => {
|
||||||
|
Err(anyhow::anyhow!("Register {name} does not support writing"))
|
||||||
|
}
|
||||||
'*' | '+' => {
|
'*' | '+' => {
|
||||||
self.clipboard_provider.load().set_contents(
|
self.clipboard_provider.load().set_contents(
|
||||||
&values.join(NATIVE_LINE_ENDING.as_str()),
|
&values.join(NATIVE_LINE_ENDING.as_str()),
|
||||||
|
@ -105,7 +116,9 @@ impl Registers {
|
||||||
pub fn push(&mut self, name: char, mut value: String) -> Result<()> {
|
pub fn push(&mut self, name: char, mut value: String) -> Result<()> {
|
||||||
match name {
|
match name {
|
||||||
'_' => Ok(()),
|
'_' => Ok(()),
|
||||||
'#' | '.' | '%' => Err(anyhow::anyhow!("Register {name} does not support pushing")),
|
'#' | '.' | '%' | '=' => {
|
||||||
|
Err(anyhow::anyhow!("Register {name} does not support pushing"))
|
||||||
|
}
|
||||||
'*' | '+' => {
|
'*' | '+' => {
|
||||||
let clipboard_type = match name {
|
let clipboard_type = match name {
|
||||||
'+' => ClipboardType::Clipboard,
|
'+' => ClipboardType::Clipboard,
|
||||||
|
@ -166,7 +179,8 @@ impl Registers {
|
||||||
('_', "<empty>"),
|
('_', "<empty>"),
|
||||||
('#', "<selection indices>"),
|
('#', "<selection indices>"),
|
||||||
('.', "<selection contents>"),
|
('.', "<selection contents>"),
|
||||||
('%', "<document path>"),
|
('%', "<relative document path>"),
|
||||||
|
('=', "<absolute document path>"),
|
||||||
('+', "<system clipboard>"),
|
('+', "<system clipboard>"),
|
||||||
('*', "<primary clipboard>"),
|
('*', "<primary clipboard>"),
|
||||||
]
|
]
|
||||||
|
@ -193,7 +207,7 @@ impl Registers {
|
||||||
|
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
'_' | '#' | '.' | '%' => false,
|
'_' | '#' | '.' | '%' | '=' => false,
|
||||||
_ => self.inner.remove(&name).is_some(),
|
_ => self.inner.remove(&name).is_some(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue