我正在寻找一种方法,将我正在工作的文件的完整文件名保存到剪贴板中,以便能够切换到另一个程序并粘贴,例如'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
是否可用,因为据我所知它与 Linux 的 X-Server 有关?
x-*
仍然用于非X-Window的东西。他们不时地通过创建一个更通用名称的函数来清理事物,而不带有x-
。但在这种情况下,x-select-text
就是那个函数。 - DrewC-v
。但是,应该扩展default-directory
,使用(expand-file-name default-directory)
或更好的是(file-name-directory default-directory)
(如果不想要最终的“/”,则可以使用(directory-file-name (file-name-directory default-directory))
)。如果不扩展目录,你可能会得到~/foobar/
,例如。 - Dreww
将复制文件名,c-u w
将复制相对文件名,c-u 0 w
将复制绝对文件名。 - user797257