【问题标题】:How to get nondirectory part of absolute file name?如何获取绝对文件名的非目录部分?
【发布时间】:2019-11-21 16:05:53
【问题描述】:

我想问一下如何从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


    【解决方案1】:

    我想你要找的是file-name-nondirectory:

    返回文件名 FILENAME 没有它的目录。 例如,在 Unix 语法文件名中, 这是最后一个斜线之后的所有内容, 如果不包含斜线,则为全名。

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

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

    【讨论】:

    • 这完美解决了它。谢谢。我已经用原始堆栈交换帖子中的“F”替换了。我只是尝试了不同的参数。谢谢,
    【解决方案2】:

    虽然 sds 的答案确实给出了您直接要求的内容,但我认为您真正要寻找的可能是文件的相对名称(如果文件位于当前工作目录中,则相同) .如果是这样,请尝试file-relative-name

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-10
      • 2012-04-06
      • 1970-01-01
      相关资源
      最近更新 更多