ターミナルの寸法変更に関するマニュアルページの動的な再フォーマット


14

私の一般的なワークフローの1つは、ターミナルでマニュアルページを開き、次に別のターミナルで物事をテストすることです。マニュアルページは、最初の端末の初期寸法にフォーマットされています。ウィンドウのサイズを変更する(またはWMに自動的にサイズを変更させる)と、フォーマット済みのページの右側にギャップがあるか、行が折り返されます。この時点で、私は通常q(uit)および!!(再度実行)し、ページ内での私の位置を失います。

フォーマットプロセスはかなりCPUを集中的に使用するものであると考えられますが、それは古代の固定端末サイズに起因するものかもしれません。lessそれは理論的には可能なはずですので、ページャは動的に、ターミナルリサイズイベントに反応します。

私はmanページを熟読し、Webを検索し、IRCに尋ねました-たくさんのことを-しかし、何も思い付くことができませんでした。

  • manユーティリティの内部または外部から再フォーマットをトリガーできますか?

  • ページを動的にサイズ変更するmanユーティリティのバージョンはありますか?

  • フォーマット/表示プロセスの一部をカスタマイズして更新する方法はありSIGWINCHますか?


man実際にlessページャーとして使用します。ヘルプ画面を表示hするには、manページにアクセスしてくださいless。マニュアルページのサイズが動的に変更されない理由が
わかり

3
問題manは、出力を用語の幅にレンダリングすることです。必要なのは、ドキュメントのどこにいるかをブックマークし、再実行して(パイプ処理されているので実際にはわからない)、ブックマークに戻ることができるページャーです。または、ポケットベルを組み込んだ新しいmanコマンド。
-nix

回答:


11

基本的な問題は、フォーマットが1つのプログラムによって行われ、ページングが別のプログラムによって行われることです。フォーマッタがウィンドウサイズが変更されたという信号を受け取り、新しいウィンドウサイズに合わせてテキストを再フォーマットした場合でも、できることは、新しいテキストをパイプラインからページャーに送ることだけです。ページャーが新しいストリームのどの位置が現在表示していた古いストリームの位置に対応するかを確実に知る方法はありません。

必要なのは、ポケットベルが再フォーマットを実行できるようにすることです。@Robin Greenが言ったように、それはHTMLです。

HTMLを使用したいが端末で動作する場合はman(1)、HTMLで出力するように指示し、テキストモードのブラウザーを呼び出して表示できます。

man -Hlynx man

これman(1)により、lynxテキストモードブラウザーにマンページが表示されます。Lynxはウィンドウサイズの変更に直接応答しませんが、ctrl-Rを押すと、lynxは新しいウィンドウサイズのページを再レンダリングします。

私が知っている他の2つのテキストモードブラウザーがあります:リンクとelinks。それらとlynxを試して、manページの閲覧に最適なエクスペリエンスを提供するものを決定できます。manページだけにカスタム構成を使用し、その特定の構成でブラウザーを呼び出すスクリプトを呼び出すことができます。

お好みのmanオプションをMANOPT環境変数に入れることができます。

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

HTMLを生成するには、groffパッケージをインストールする必要がありmanます。


-Hmanへの引数の制限は、Webサーバーを使用せず、単に小さなファイルを使用することです。これにより、誤って設定されたファイアウォールに関する問題は回避されますが、他のマニュアルページへのハイパーリンクの生成は許可されません(少なくとも一部のサードパーティのman-> htmlスクリプトがサポートします)。
ロビングリーン

1
@Robin Green:問題は、サイズ変更可能なターミナルウィンドウでmanページをサポートすることです。そのコンテキストでは、ウェブサーバーを使用しないことは制限ではありません。また、ハイパーリンクがないことは制限事項ではありません。なぜなら、表示されるmanページにはハイパーリンクがないからlessです。
-camh

それは本当です、確かに有効な答えです。
ロビングリーン

4

manserverなどの適切なスクリプトを使用して、Webページ(もちろんlynxのようなテキストベースのWebブラウザでもかまいません)でそれらのマニュアルページをHTMLに変換します。

これがおそらく、誰もこの問題を解決していない理由です。なぜなら、この問題はman-> htmlスクリプトの開発とは無関係になったからです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.