将完整文件路径复制到Copy-Paste-Clipboard

Pet*_*ann 7 emacs clipboard

我正在寻找一种方法将我正在处理的文件的当前完整文件名保存到我的复制粘贴缓冲区中,以便能够切换到另一个程序并粘贴例如'C:\ some\path\file.txt'.

我尝试过以下方法但实际上几乎没有做任何事情:

(defun clip-file ()
  "Put the current file name on the clipboard"
  (interactive)
  (let ((filename (if (equal major-mode 'dired-mode)
                      (file-name-directory default-directory)
                    (buffer-file-name))))
    (when filename
      (x-select-text filename))))
Run Code Online (Sandbox Code Playgroud)

该函数x-select-text源自interprogram-cut-functionCopy-shortcut的帮助文件中M-w作为包含函数的变量,该函数被调用以保存外部程序的kill-ring,因此可以将文本从Emacs复制粘贴到例如Firefox .

我在我的Windows-PC上使用Emacs,因此不确定,如果x-select-text可行的话,因为AFAIK它与Linux的X-Server有关吗?

law*_*ist 6

(defun copy-buffer-file-name-as-kill (choice)
  "Copy the buffer-file-name to the kill-ring"
  (interactive "cCopy Buffer Name (F) Full, (D) Directory, (N) Name")
  (let ((new-kill-string)
        (name (if (eq major-mode 'dired-mode)
                  (dired-get-filename)
                (or (buffer-file-name) ""))))
    (cond ((eq choice ?f)
           (setq new-kill-string name))
          ((eq choice ?d)
           (setq new-kill-string (file-name-directory name)))
          ((eq choice ?n)
           (setq new-kill-string (file-name-nondirectory name)))
          (t (message "Quit")))
    (when new-kill-string
      (message "%s copied" new-kill-string)
      (kill-new new-kill-string))))
Run Code Online (Sandbox Code Playgroud)


Ser*_*eim 6

我在搜索如何使用 Spacemacs 将文件路径复制到剪贴板时偶然发现了这个问题。因此,为了完整起见并帮助其他可能在搜索中找到此问题的人,请注意 Spacemacs 已将此功能绑定到:

SPC f y


Pet*_*ann 5

我的问题中提到的代码有效,这是我的 .emacs 文件配置问题,因为我没有正确重新启动 Emacs。

因此使用:

(defun clip-file ()
  "Put the current file name on the clipboard"
  (interactive)
  (let ((filename (if (equal major-mode 'dired-mode)
                      (file-name-directory default-directory)
                    (buffer-file-name))))
    (when filename
      (x-select-text filename))))
Run Code Online (Sandbox Code Playgroud)