mirror of
https://github.com/zed-industries/zed.git
synced 2025-01-29 05:33:49 +00:00
Merge pull request #2363 from zed-industries/add-copy-path-commands
Update copy path commands
This commit is contained in:
commit
c58601ab8d
3 changed files with 50 additions and 9 deletions
|
@ -477,6 +477,7 @@
|
||||||
"cmd-c": "project_panel::Copy",
|
"cmd-c": "project_panel::Copy",
|
||||||
"cmd-v": "project_panel::Paste",
|
"cmd-v": "project_panel::Paste",
|
||||||
"cmd-alt-c": "project_panel::CopyPath",
|
"cmd-alt-c": "project_panel::CopyPath",
|
||||||
|
"alt-cmd-shift-c": "project_panel::CopyRelativePath",
|
||||||
"f2": "project_panel::Rename",
|
"f2": "project_panel::Rename",
|
||||||
"backspace": "project_panel::Delete",
|
"backspace": "project_panel::Delete",
|
||||||
"alt-cmd-r": "project_panel::RevealInFinder"
|
"alt-cmd-r": "project_panel::RevealInFinder"
|
||||||
|
|
|
@ -261,6 +261,8 @@ actions!(
|
||||||
Format,
|
Format,
|
||||||
ToggleSoftWrap,
|
ToggleSoftWrap,
|
||||||
RevealInFinder,
|
RevealInFinder,
|
||||||
|
CopyPath,
|
||||||
|
CopyRelativePath,
|
||||||
CopyHighlightJson
|
CopyHighlightJson
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
@ -381,6 +383,8 @@ pub fn init(cx: &mut AppContext) {
|
||||||
cx.add_action(Editor::jump);
|
cx.add_action(Editor::jump);
|
||||||
cx.add_action(Editor::toggle_soft_wrap);
|
cx.add_action(Editor::toggle_soft_wrap);
|
||||||
cx.add_action(Editor::reveal_in_finder);
|
cx.add_action(Editor::reveal_in_finder);
|
||||||
|
cx.add_action(Editor::copy_path);
|
||||||
|
cx.add_action(Editor::copy_relative_path);
|
||||||
cx.add_action(Editor::copy_highlight_json);
|
cx.add_action(Editor::copy_highlight_json);
|
||||||
cx.add_async_action(Editor::format);
|
cx.add_async_action(Editor::format);
|
||||||
cx.add_action(Editor::restart_language_server);
|
cx.add_action(Editor::restart_language_server);
|
||||||
|
@ -6252,6 +6256,26 @@ impl Editor {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn copy_path(&mut self, _: &CopyPath, cx: &mut ViewContext<Self>) {
|
||||||
|
if let Some(buffer) = self.buffer().read(cx).as_singleton() {
|
||||||
|
if let Some(file) = buffer.read(cx).file().and_then(|f| f.as_local()) {
|
||||||
|
if let Some(path) = file.abs_path(cx).to_str() {
|
||||||
|
cx.write_to_clipboard(ClipboardItem::new(path.to_string()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn copy_relative_path(&mut self, _: &CopyRelativePath, cx: &mut ViewContext<Self>) {
|
||||||
|
if let Some(buffer) = self.buffer().read(cx).as_singleton() {
|
||||||
|
if let Some(file) = buffer.read(cx).file().and_then(|f| f.as_local()) {
|
||||||
|
if let Some(path) = file.path().to_str() {
|
||||||
|
cx.write_to_clipboard(ClipboardItem::new(path.to_string()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn highlight_rows(&mut self, rows: Option<Range<u32>>) {
|
pub fn highlight_rows(&mut self, rows: Option<Range<u32>>) {
|
||||||
self.highlighted_rows = rows;
|
self.highlighted_rows = rows;
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,7 @@ use std::{
|
||||||
collections::{hash_map, HashMap},
|
collections::{hash_map, HashMap},
|
||||||
ffi::OsStr,
|
ffi::OsStr,
|
||||||
ops::Range,
|
ops::Range,
|
||||||
path::{Path, PathBuf},
|
path::Path,
|
||||||
sync::Arc,
|
sync::Arc,
|
||||||
};
|
};
|
||||||
use theme::ProjectPanelEntry;
|
use theme::ProjectPanelEntry;
|
||||||
|
@ -119,6 +119,7 @@ actions!(
|
||||||
NewFile,
|
NewFile,
|
||||||
Copy,
|
Copy,
|
||||||
CopyPath,
|
CopyPath,
|
||||||
|
CopyRelativePath,
|
||||||
RevealInFinder,
|
RevealInFinder,
|
||||||
Cut,
|
Cut,
|
||||||
Paste,
|
Paste,
|
||||||
|
@ -146,10 +147,11 @@ pub fn init(cx: &mut AppContext) {
|
||||||
cx.add_async_action(ProjectPanel::delete);
|
cx.add_async_action(ProjectPanel::delete);
|
||||||
cx.add_async_action(ProjectPanel::confirm);
|
cx.add_async_action(ProjectPanel::confirm);
|
||||||
cx.add_action(ProjectPanel::cancel);
|
cx.add_action(ProjectPanel::cancel);
|
||||||
|
cx.add_action(ProjectPanel::cut);
|
||||||
cx.add_action(ProjectPanel::copy);
|
cx.add_action(ProjectPanel::copy);
|
||||||
cx.add_action(ProjectPanel::copy_path);
|
cx.add_action(ProjectPanel::copy_path);
|
||||||
|
cx.add_action(ProjectPanel::copy_relative_path);
|
||||||
cx.add_action(ProjectPanel::reveal_in_finder);
|
cx.add_action(ProjectPanel::reveal_in_finder);
|
||||||
cx.add_action(ProjectPanel::cut);
|
|
||||||
cx.add_action(
|
cx.add_action(
|
||||||
|this: &mut ProjectPanel, action: &Paste, cx: &mut ViewContext<ProjectPanel>| {
|
|this: &mut ProjectPanel, action: &Paste, cx: &mut ViewContext<ProjectPanel>| {
|
||||||
this.paste(action, cx);
|
this.paste(action, cx);
|
||||||
|
@ -307,11 +309,16 @@ impl ProjectPanel {
|
||||||
}
|
}
|
||||||
menu_entries.push(ContextMenuItem::item("New File", NewFile));
|
menu_entries.push(ContextMenuItem::item("New File", NewFile));
|
||||||
menu_entries.push(ContextMenuItem::item("New Folder", NewDirectory));
|
menu_entries.push(ContextMenuItem::item("New Folder", NewDirectory));
|
||||||
menu_entries.push(ContextMenuItem::item("Reveal in Finder", RevealInFinder));
|
|
||||||
menu_entries.push(ContextMenuItem::Separator);
|
menu_entries.push(ContextMenuItem::Separator);
|
||||||
menu_entries.push(ContextMenuItem::item("Copy", Copy));
|
|
||||||
menu_entries.push(ContextMenuItem::item("Copy Path", CopyPath));
|
|
||||||
menu_entries.push(ContextMenuItem::item("Cut", Cut));
|
menu_entries.push(ContextMenuItem::item("Cut", Cut));
|
||||||
|
menu_entries.push(ContextMenuItem::item("Copy", Copy));
|
||||||
|
menu_entries.push(ContextMenuItem::Separator);
|
||||||
|
menu_entries.push(ContextMenuItem::item("Copy Path", CopyPath));
|
||||||
|
menu_entries.push(ContextMenuItem::item(
|
||||||
|
"Copy Relative Path",
|
||||||
|
CopyRelativePath,
|
||||||
|
));
|
||||||
|
menu_entries.push(ContextMenuItem::item("Reveal in Finder", RevealInFinder));
|
||||||
if let Some(clipboard_entry) = self.clipboard_entry {
|
if let Some(clipboard_entry) = self.clipboard_entry {
|
||||||
if clipboard_entry.worktree_id() == worktree.id() {
|
if clipboard_entry.worktree_id() == worktree.id() {
|
||||||
menu_entries.push(ContextMenuItem::item("Paste", Paste));
|
menu_entries.push(ContextMenuItem::item("Paste", Paste));
|
||||||
|
@ -785,10 +792,19 @@ impl ProjectPanel {
|
||||||
|
|
||||||
fn copy_path(&mut self, _: &CopyPath, cx: &mut ViewContext<Self>) {
|
fn copy_path(&mut self, _: &CopyPath, cx: &mut ViewContext<Self>) {
|
||||||
if let Some((worktree, entry)) = self.selected_entry(cx) {
|
if let Some((worktree, entry)) = self.selected_entry(cx) {
|
||||||
let mut path = PathBuf::new();
|
cx.write_to_clipboard(ClipboardItem::new(
|
||||||
path.push(worktree.root_name());
|
worktree
|
||||||
path.push(&entry.path);
|
.abs_path()
|
||||||
cx.write_to_clipboard(ClipboardItem::new(path.to_string_lossy().to_string()));
|
.join(&entry.path)
|
||||||
|
.to_string_lossy()
|
||||||
|
.to_string(),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn copy_relative_path(&mut self, _: &CopyRelativePath, cx: &mut ViewContext<Self>) {
|
||||||
|
if let Some((_, entry)) = self.selected_entry(cx) {
|
||||||
|
cx.write_to_clipboard(ClipboardItem::new(entry.path.to_string_lossy().to_string()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue