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

问题描述 投票:0回答:2

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

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

Paste an image on clipboard to Emacs Org mode file without saving it

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

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

仅代替yahoocom.png,我得到

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

我只想得到

yahoocom.png

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

emacs filenames
2个回答
4
投票

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

返回文件名FILENAME的目录。例如,在Unix语法文件名中,这就是最后一个斜杠之后的一切,或全名(如果不包含斜杠)。

请注意,您可能做not要将基本名称传递给file-name-nondirectory(使用原始绝对路径或shell-command

PS。我建议您以file-relative-name格式将file-relative-name替换为"G",因为如果"fImage file name: "不存在,功能将会失败。


5
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.