Terminal

動態重新格式化終端尺寸更改的手冊頁

  • October 11, 2020

我的一個常見工作流程是在終端中打開手冊頁,然後在另一個終端中進行測試。手冊頁被格式化為第一個終端的初始尺寸。當我現在調整我的視窗大小(或讓我的 WM 自動為我這樣做)時,預格式化頁面的右側有一個間隙,或者換行。此時我通常q(uit)和!!(再次執行),這失去了我在頁面中的位置。

我認為格式化過程是 CPU 密集型的,或者它可能源於古代固定終端大小。less尋呼機動態響應終端調整大小事件,因此理論上應該是可能的。

我嘗試仔細閱讀手冊頁、搜尋 Web、在 IRC 上詢問——所有這些——但什麼都想不出來。

  • 我可以從 man 實用程序內部或外部觸發重新格式化嗎?
  • 是否有可以動態調整頁面大小的 man 實用程序版本?
  • 有沒有辦法自定義格式化/顯示過程的某些部分以使其更新SIGWINCH

基本問題是格式化由一個程序完成,分頁由另一個程序完成。即使格式化程序要獲得視窗大小已更改的信號並重新格式化文本以適應新的視窗大小,它所能做的只是將新文本沿管道提供給尋呼機。尋呼機無法確定地知道新流中的哪個位置對應於它目前顯示的舊流中的位置。

您需要的是尋呼機能夠進行重新格式化。正如@Robin Green 所說,那是 HTML。

如果您想使用 HTML 但仍然在終端中工作,您可以告訴man(1)以 HTML 輸出並呼叫文本模式瀏覽器來顯示它。

man -Hlynx man

這將man(1)在 lynx 文本模式瀏覽器中顯示手冊頁。Lynx 不會直接響應視窗大小的變化,但是您可以按 ctrl-R 並且 lynx 將重新渲染頁面以適應新的視窗大小。

我知道還有另外兩種文本模式瀏覽器:links 和 elinks。您可以對這些和 lynx 進行試驗,並確定哪一個可以為您提供瀏覽手冊頁的最佳體驗。您可能希望僅為手冊頁使用自定義配置,並呼叫一個腳本,該腳本使用該特定配置呼叫瀏覽器。

您可以將您喜歡的 man 選項放入MANOPT環境變數中。

$ export MANOPT=-Hlynx
$ export MANOPT=-Hmanlynx # provide your own wrapper to execute
                         # lynx with a different configuration.

您需要安裝該groff軟體包man才能生成 HTML。

引用自:https://unix.stackexchange.com/questions/11389