【问题标题】:How to check if connected to remote server?如何检查是否连接到远程服务器?
【发布时间】:2015-04-23 13:47:40
【问题描述】:

我使用 tramp 连接到我公司的服务器。 如果我访问本地文件和远程文件,我想自定义我的功能以不同的方式工作。

是否有一个变量可以检查我正在访问的缓冲区是在远程服务器上还是在我的本地机器上?

类似:

if(TRAMP_CONNECTED)
 Do this
else
 Do that

【问题讨论】:

  • 我问了一个 phils 之前回答过的类似问题——他的回答以及我在下面的评论可能会解决您的问题:stackoverflow.com/a/24481891/2112489 在我的情况下,我还想区分我连接到哪个遥控器-- 因为我有几个。
  • 你是个了不起的人。
  • 法律列表,出于某种原因,这段代码:(and (file-remote-p dired-directory 'localhost) (equal (tramp-file-name-real-host (tramp-dissect-file-name dired-directory)) "remote-name")) 如果在文件内执行则返回错误。有没有办法改变它以检查缓冲区是文件还是目录?
  • 可能使用file-directory-p -- 文档字符串如下: (file-directory-p FILENAME) -- 如果 FILENAME 命名现有目录,则返回 t。指向目录的符号链接算作目录。请参阅file-symlink-p 以区分符号链接。 根据用法,您可能还对将buffer-file-name 作为变量或将(buffer-file-name) 作为函数感兴趣——两者通常在有文件时设置;但是,某些模式将非文件访问缓冲区设置为等于特定的buffer-file-name
  • 我需要纠正我之前评论中的一个小错误——buffer-file-name 有时是由非文件访问缓冲区的某些模式设置的。函数buffer-file-name 的文档字符串指出:返回正在访问的文件BUFFER 的名称,如果没有则返回nil -- 没有参数或nil 作为参数意味着使用当前缓冲区。 我还没有看到一个示例,其中 value 在变量或返回 value 的函数之间会有所不同。

标签: emacs elisp tramp


【解决方案1】:

最可靠的检查可能是default-directory。此变量始终设置为本地缓冲区。如果 (file-remote-p default-directory) 返回非 nil,则您的缓冲区处于 Tramp 控制之下。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    • 2014-07-11
    • 2022-01-12
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多