crates/editor/src/actions.rs 🔗
@@ -199,6 +199,7 @@ gpui::actions!(
CopyHighlightJson,
CopyPath,
CopyPermalinkToLine,
+ CopyFileLocation,
CopyRelativePath,
Cut,
CutToEndOfLine,
Scott Lembcke and Marshall Bowers created
Closes #14787.
I made a quick draft implementation of this feature request:
https://github.com/zed-industries/zed/issues/14787
I know how to use use gdb well, so lacking a built-in debugger is OK.
BUT... Speaking personally, setting breakpoints is 50% of what I want an
IDE to do for me when debugging. Having a feature where I can click,
copy, "b [paste]", is a huge step up from typing the whole thing in
manually. I figure this must be useful for other external tools, or even
just regular-human-communication too.
Open Questions:
* Does this belong in the right click menu? (I put it next to "Copy
Permalink" which is similar.)
* Probably not useful enough to get a default keymap?
* Relative vs absolute path?
* Does this need tests?
Release Notes:
- Added `editor: copy file location` command to copy the current file
location (FILE:LINE) to the clipboard
([#14787](https://github.com/zed-industries/zed/issues/14787)).
---------
Co-authored-by: Marshall Bowers <elliott.codes@gmail.com>
crates/editor/src/actions.rs | 1 +
crates/editor/src/editor.rs | 11 +++++++++++
crates/editor/src/element.rs | 1 +
3 files changed, 13 insertions(+)
@@ -199,6 +199,7 @@ gpui::actions!(
CopyHighlightJson,
CopyPath,
CopyPermalinkToLine,
+ CopyFileLocation,
CopyRelativePath,
Cut,
CutToEndOfLine,
@@ -10905,6 +10905,17 @@ impl Editor {
}
}
+ pub fn copy_file_location(&mut self, _: &CopyFileLocation, 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() {
+ let selection = self.selections.newest::<Point>(cx).start.row + 1;
+ cx.write_to_clipboard(ClipboardItem::new_string(format!("{path}:{selection}")));
+ }
+ }
+ }
+ }
+
pub fn open_permalink_to_line(&mut self, _: &OpenPermalinkToLine, cx: &mut ViewContext<Self>) {
let permalink = self.get_permalink_to_line(cx);
@@ -353,6 +353,7 @@ impl EditorElement {
register_action(view, cx, Editor::copy_highlight_json);
register_action(view, cx, Editor::copy_permalink_to_line);
register_action(view, cx, Editor::open_permalink_to_line);
+ register_action(view, cx, Editor::copy_file_location);
register_action(view, cx, Editor::toggle_git_blame);
register_action(view, cx, Editor::toggle_git_blame_inline);
register_action(view, cx, Editor::toggle_hunk_diff);