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

时间:2013-09-15 13:29:28

标签: emacs clipboard

我正在寻找一种方法将我正在处理的文件的当前完整文件名保存到我的复制粘贴缓冲区中,以便能够切换到另一个程序并粘贴例如'C:\一些\路径\ 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))))

函数x-select-text来自interprogram-cut-function,它在Copy-shortcut M-w的帮助文件中被提及为包含函数的变量,被调用以保存kill-环外部程序,所以文本可以从Emacs复制粘贴到例如Firefox浏览器。

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

3 个答案:

答案 0 :(得分:4)

(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))))

答案 1 :(得分:3)

我的问题中提到的代码有效,我的.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))))

答案 2 :(得分:1)

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

FloatingActionButton