在终端尺寸更改时动态重新格式化手册页


14

我的一个常见工作流程是在终端中打开手册页,然后在另一个终端中进行测试。手册页被格式化为第一个终端的初始尺寸。现在,当我调整窗口大小(或让我的WM自动为我执行此操作)时,在预格式化页面的右边有一个空白,或者是换行。此时,我通常会q(uit)和!!(再次运行),这会丢失我在页面中的位置。

我认为格式化过程会占用大量CPU,或者它可能源于古老的固定终端大小。该less寻呼机动态反应终端的resize事件,所以应该在理论上是可能的。

我试图细读手册页,搜索网络,在IRC上进行询问-全部-但无济于事。

  • 我可以在man工具内部或外部触发重新格式化吗?

  • man实用程序是否有可以动态调整页面大小的版本?

  • 是否可以自定义格式/显示过程的某些部分以使其更新SIGWINCH


man实际上less用作寻呼机;您可以点击h手册页以获取less帮助屏幕。我不确定为什么它不能动态调整手册页的大小
Michael Mrozek

3
问题似乎在于man使输出变为术语的宽度。您需要的是一个可以将您在文档中的位置添加为书签的分页器,重新执行man(因为它已经通过管道传递到了它,所以实际上不知道),然后返回该书签。或者,合并了寻呼机的新的man命令。
nix

Answers:


11

基本问题是格式化是由一个程序完成的,而分页是由另一程序完成的。即使格式化程序收到了窗口大小已更改并重新格式化为新窗口大小的文本的信号,它所能做的就是将新文本沿管道输送到寻呼机。寻呼机无法肯定地知道新流中的哪个位置对应于当前正在显示的旧流中的位置。

您需要的是寻呼机能够进行重新格式化。正如@Robin Green所说的,这就是HTML。

如果要使用HTML但仍可以在终端中使用,则可以告诉man(1)以HTML输出,并调用文本模式浏览器进行显示。

man -Hlynx man

这将man(1)在lynx文本模式浏览器中显示手册页。Lynx不会直接响应窗口大小的更改,但是您可以按ctrl-R,然后lynx将为新的窗口大小重新呈现页面。

我知道其他两种文本模式浏览器:链接和elinks。您可以尝试使用这些工具和lynx,并确定哪种方法可以为您提供最佳的浏览手册页体验。您可能只想为手册页使用自定义配置,然后调用一个脚本,该脚本以该特定配置调用浏览器。

您可以将所需的man选项放入MANOPT环境变量中。

$ export MANOPT=-Hlynx
$ export MANOPT=-Hmanlynx # manlynx invokes lynx with a different configuration.

您将需要安装该groff软件包man才能生成HTML。


-H参数对man 的限制是它不使用Web服务器,而只是使用一个小文件。尽管这可以避免防火墙配置错误的任何问题,但它不允许生成到其他手册页的超链接(至少某些第三方man-> html脚本支持)。
罗宾·格林

1
@Robin Green:问题是关于在可调整大小的终端窗口中支持手册页。在这种情况下,不使用网络服务器不是一个限制。并且没有超链接也不是一个限制,因为显示的手册页less没有超链接。
camh 2011年

是的,这肯定是一个有效的答案。
罗宾·格林

4

使用合适的脚本(例如manserver)将手册页实时转换为html ,并在网络浏览器(当然可以是基于文本的网络浏览器,如lynx)中查看它们。

大概这就是为什么没人能解决这个问题的原因-因为该问题与man-> html脚本的开发无关。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.