mirror of
https://github.com/helix-editor/helix.git
synced 2024-11-22 09:26:19 +04:00
Compare commits
3 Commits
ab68da62c2
...
16ebe190c2
Author | SHA1 | Date | |
---|---|---|---|
|
16ebe190c2 | ||
|
0141aece5f | ||
|
27aea00f28 |
@ -44,6 +44,7 @@ ### Special registers
|
||||
| `#` | 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 |
|
||||
| `%` | Name of the current file | This register is not writable |
|
||||
| `/` | Folder which contains the current file | This register is not writable |
|
||||
| `+` | Reads from the system clipboard | Joins and yanks to the system clipboard |
|
||||
| `*` | Reads from the primary clipboard | Joins and yanks to the primary clipboard |
|
||||
|
||||
|
@ -63,6 +63,18 @@ pub fn read<'a>(&'a self, name: char, editor: &'a Editor) -> Option<RegisterValu
|
||||
let path = doc!(editor).display_name();
|
||||
Some(RegisterValues::new(iter::once(path)))
|
||||
}
|
||||
'/' => {
|
||||
let relative_path = match doc!(editor).path() {
|
||||
Some(path) => path,
|
||||
None => return Some(RegisterValues::new(iter::empty())),
|
||||
};
|
||||
let parent = match relative_path.parent() {
|
||||
Some(path) => path,
|
||||
None => return Some(RegisterValues::new(iter::empty())),
|
||||
};
|
||||
let parent = parent.display().to_string();
|
||||
Some(RegisterValues::new(iter::once(parent.into())))
|
||||
}
|
||||
'*' | '+' => Some(read_from_clipboard(
|
||||
self.clipboard_provider.as_ref(),
|
||||
self.inner.get(&name),
|
||||
@ -82,7 +94,9 @@ pub fn read<'a>(&'a self, name: char, editor: &'a Editor) -> Option<RegisterValu
|
||||
pub fn write(&mut self, name: char, mut values: Vec<String>) -> Result<()> {
|
||||
match name {
|
||||
'_' => Ok(()),
|
||||
'#' | '.' | '%' => Err(anyhow::anyhow!("Register {name} does not support writing")),
|
||||
'#' | '.' | '%' | '/' => {
|
||||
Err(anyhow::anyhow!("Register {name} does not support writing"))
|
||||
}
|
||||
'*' | '+' => {
|
||||
self.clipboard_provider.set_contents(
|
||||
values.join(NATIVE_LINE_ENDING.as_str()),
|
||||
@ -107,7 +121,9 @@ pub fn write(&mut self, name: char, mut values: Vec<String>) -> Result<()> {
|
||||
pub fn push(&mut self, name: char, mut value: String) -> Result<()> {
|
||||
match name {
|
||||
'_' => Ok(()),
|
||||
'#' | '.' | '%' => Err(anyhow::anyhow!("Register {name} does not support pushing")),
|
||||
'#' | '.' | '%' | '/' => {
|
||||
Err(anyhow::anyhow!("Register {name} does not support pushing"))
|
||||
}
|
||||
'*' | '+' => {
|
||||
let clipboard_type = match name {
|
||||
'+' => ClipboardType::Clipboard,
|
||||
@ -164,6 +180,7 @@ pub fn iter_preview(&self) -> impl Iterator<Item = (char, &str)> {
|
||||
('#', "<selection indices>"),
|
||||
('.', "<selection contents>"),
|
||||
('%', "<document path>"),
|
||||
('/', "<parent of document path>"),
|
||||
('+', "<system clipboard>"),
|
||||
('*', "<primary clipboard>"),
|
||||
]
|
||||
|
Loading…
Reference in New Issue
Block a user