如何获取绝对文件名的非目录部分?

gra*_*l8d 0 emacs filenames

我想问一下如何从Lisp的交互式命令中获取文件名。

顺便说一句,这是从另一个stackoverflow线程获取的。

将剪贴板上的图像粘贴到Emacs Org模式文件中而不保存

(defun markdown-insert-clipboard-image (&optional file)
  (interactive "G")
  (shell-command (concat "pngpaste " file))
  (insert (concat "![" file "](" file ")")))
Run Code Online (Sandbox Code Playgroud)

我的问题是文件正在使用绝对路径,而不仅仅是文件名,这导致文件在推送到服务器时出现错误。

我得到的不只是yahoocom.png

/Users/test/test/test/test/yahoocom.png

我只想得到

yahoocom.png

无论如何,我可以修改代码,使其仅使用文件名。

sds*_*sds 5

我认为你正在寻找的是file-name-nondirectory

返回文件名 FILENAME 没有其目录。例如,在 Unix 语法文件名中,这是最后一个斜杠之后的所有内容,或者如果不包含斜杠则是整个名称。

请注意,你可能希望将基本名称传递到shell-command(使用原始的绝对路径或file-relative-name

附注。我建议您在表单中替换"G"with "fImage file name: "interactive因为如果file不存在,您的功能将失败。


Ste*_*fan 5

尽管sds的答案确实给出了您直接要求的内容,但我认为您真正要寻找的是具有文件的相对名称(如果文件在当前工作目录中,则该名称将相同)。如果是这样,请尝试file-relative-name

将FILENAME转换为相对于DIRECTORY的相对值(默认值:)default-directory
当使用默认目录作为默认目录时,此函数返回一个与FILENAME等效的相对文件名。
如果FILENAME是相对文件名,它将被解释为存在于中 default-directory
如果FILENAME和DIRECTORY位于不同的计算机上或DOS / Windows计算机上的不同驱动器上,它将以扩展形式返回FILENAME。