9

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

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

我在我的 Windows-PC 上使用 Emacs,因此不确定是否x-select-text可以工作,因为 AFAIK 它与 Linux 的 X-Server 有关?

4

3 回答 3

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))))
于 2013-09-15T16:06:03.033 回答
6

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

SPC f y

于 2017-02-21T07:45:21.430 回答
4

我的问题中提到的代码有效,这是我的 .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))))
于 2013-09-15T19:13:42.820 回答