Add command to copy current file name (#22174)

ANKDDEV created

Closes #21967

Add actions `CopyFileName` and `CopyFileNameWithoutExtension` to be used in the command palette.

Release Notes:

- Added commands `editor: copy file name` and `editor: copy file name without extensions`.

Change summary

crates/editor/src/actions.rs |  2 ++
crates/editor/src/editor.rs  | 25 +++++++++++++++++++++++++
crates/editor/src/element.rs |  2 ++
3 files changed, 29 insertions(+)

Detailed changes

crates/editor/src/actions.rs 🔗

@@ -265,6 +265,8 @@ gpui::actions!(
         Copy,
         CopyFileLocation,
         CopyHighlightJson,
+        CopyFileName,
+        CopyFileNameWithoutExtension,
         CopyPath,
         CopyPermalinkToLine,
         CopyRelativePath,

crates/editor/src/editor.rs 🔗

@@ -13116,6 +13116,31 @@ impl Editor {
         }
     }
 
+    pub fn copy_file_name_without_extension(
+        &mut self,
+        _: &CopyFileNameWithoutExtension,
+        _: &mut Window,
+        cx: &mut Context<Self>,
+    ) {
+        if let Some(file) = self.target_file(cx) {
+            if let Some(file_stem) = file.path().file_stem() {
+                if let Some(name) = file_stem.to_str() {
+                    cx.write_to_clipboard(ClipboardItem::new_string(name.to_string()));
+                }
+            }
+        }
+    }
+
+    pub fn copy_file_name(&mut self, _: &CopyFileName, _: &mut Window, cx: &mut Context<Self>) {
+        if let Some(file) = self.target_file(cx) {
+            if let Some(file_name) = file.path().file_name() {
+                if let Some(name) = file_name.to_str() {
+                    cx.write_to_clipboard(ClipboardItem::new_string(name.to_string()));
+                }
+            }
+        }
+    }
+
     pub fn toggle_git_blame(
         &mut self,
         _: &ToggleGitBlame,

crates/editor/src/element.rs 🔗

@@ -408,6 +408,8 @@ impl EditorElement {
         register_action(editor, window, Editor::reveal_in_finder);
         register_action(editor, window, Editor::copy_path);
         register_action(editor, window, Editor::copy_relative_path);
+        register_action(editor, window, Editor::copy_file_name);
+        register_action(editor, window, Editor::copy_file_name_without_extension);
         register_action(editor, window, Editor::copy_highlight_json);
         register_action(editor, window, Editor::copy_permalink_to_line);
         register_action(editor, window, Editor::open_permalink_to_line);