如何让Emacs的'man'在Tramp上工作?

4
我有一个问题,关于在Emacs中使用M-x man的使用。我一直在使用Tramp工作,并且常常发现远程服务器上安装的程序与本地设置有很大的不同。我发现调用M-x man会在本地查找相关手册页。是否有一种方法可以指示它使用Tramp另一侧的环境?
我知道有一个Elisp变量tramp-remote-process-environment,我尝试将MANPATH添加到其中,但似乎不起作用(我怕是因为我将其形式写成了/usr/share/man而不是/scpc:user@host:/usr/share/man,但我想要通用解决方案适用于所有远程主机。有任何想法吗?

如果给出完整路径,“woman-find-file”可以处理远程man页面。我在这里的回答显示了一个hack,如果你使用eshell,可以让它工作;你可能会从中得到一些启示。 - Stig Brautaset
2个回答

2

来自man.el中的Man-start-calling宏:

(let (...
    (default-directory
      (if (and (file-directory-p default-directory)
               (not (find-file-name-handler default-directory
                                            'file-directory-p)))
          default-directory
        "/"))

也就是说,如果当前默认目录有一个特殊的文件名处理程序(例如Tramp),它将使用根目录作为启动man的目录,因此它将查看Emacs所运行的系统的man页面。
除了更改man.el之外,似乎没有办法禁用这个功能。请注意,这是一个宏,因此您需要重新加载该宏和所有使用该宏的函数。

2
谢谢@legoscia,虽然很有趣。我认为期望Emacs与远程man页面交互是很自然的。 - Wojciech Gac
Wojciech Gac:我也可以想象它会非常令人困惑(如果缓冲区名称包含主机名或 tramp 路径,则会稍微减少),但是将其作为可配置选项似乎是合理的,这样想要该行为的人就可以得到它。我建议使用 M-x report-emacs-bug - phils
1
以上代码现在位于“Man-getpage-in-background”,不再是宏,但注释掉该“default-directory”绑定并不能启用远程手册页。 - phils

0

从命令man的文档字符串中,人们会期望它能够读取远程页面:

也可以提供显式文件名。如果否则可能看起来像页面名称,请使用-l。

/my/file/name.1.gz
-l somefile.1

你可以编写一个调用者,读取环境并组合所需的参数。


是的,这可能就是最终结果了 :)。 - Wojciech Gac

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接