【问题标题】:Does tramp offer any API for interrogating information from the buffer-file-nametramp 是否提供任何 API 来查询缓冲区文件名中的信息
【发布时间】:2023-04-02 19:05:01
【问题描述】:

我目前正在使用 tramp 进行远程机器上的大量工作。但是,在构建 make 命令行时项目逻辑会变得混乱,因为它会尝试 cd 到某些 /ssh:blah.... 路径。

tramp 是否提供任何 API 函数来测试缓冲区或缓冲区文件名是否实际上由 tramp 管理并因此在远程计算机上?它能否提供有关连接类型的其他信息(例如 ssh 用户/主机详细信息)?

【问题讨论】:

    标签: emacs tramp


    【解决方案1】:

    关于检查文件名是否由 tramp 管理的第一个问题,请参阅函数 tramp-tramp-file-p,如果文件名是 tramp 文件,它将返回 t。

    【讨论】:

    • tramp-tramp-file-p 确实 not 为 Tramp 文件返回t,它实际上返回0,恰好是使用的string-match 返回的索引检查 Tramp 文件名语法。我倾向于说这是一个错误,无论是在tramp-tramp-file-p 的文档字符串中还是在其实现中。我建议使用file-remote-p 来测试文件是否是远程的,因为它更通用(它应该能够处理除 Tramp 之外的其他远程访问处理程序)。
    【解决方案2】:

    变量tramp-file-name-regexp 用于匹配类似Tramp 的文件名。 (编辑:请参阅下面的 erikriverson 的答案以获得更方便的匹配方法。)

    这被添加到file-name-handler-alist(确定所有文件名的处理程序),并与tramp-file-name-handler 相关联,因此您也可以测试find-file-name-handler 函数的返回值以查看它是否匹配。这似乎是一种更稳健的方法(尽管在实践中可能没有区别)。

    (eq (find-file-name-handler filename nil) 'tramp-file-name-handler)

    (tramp-dissect-file-name filename) 然后将返回各个连接组件(另请参阅tramp-file-name-structure 变量)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-29
      • 1970-01-01
      • 1970-01-01
      • 2013-10-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多