【发布时间】:2013-09-15 13:29:27
【问题描述】:
我正在寻找一种方法来将我正在处理的文件的当前完整文件名保存到我的复制粘贴缓冲区中,以便能够切换到另一个程序并粘贴例如'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 复制粘贴到例如火狐。
我在我的 Windows-PC 上使用 Emacs,因此我不确定 x-select-text 是否可以工作,因为 AFAIK 它与 Linux 的 X-Server 有关?
【问题讨论】:
-
您的代码对我来说看起来不错。
x-*仍然用于非 X-Window 的东西。他们不时通过创建一个没有x-的更通用名称的函数来清理内容。但在这种情况下,x-select-text是唯一的。 -
但这显然对我不起作用。适合你吗?
-
是的,它对我来说似乎工作正常,任何 Emacs 版本 (20-24)。例如,如果我在 Emacs 中使用它,然后在其他一些 Windows 应用程序中使用
C-v。但是default-directory应该被扩展,使用(expand-file-name default-directory)或者更好的(file-name-directory default-directory)(或者(directory-file-name (file-name-directory default-directory)),如果你不想要最后的/)。如果不展开目录,例如可以得到~/foobar/。 -
如果您已经处于 dired 模式,则不需要它。
w将复制文件名,c-u w将复制相对文件名,c-u 0 w将复制绝对文件名。 -
好的,现在可以了 :) 我的 .emacs 文件有问题