折りたたみ端末ポケットベル

折りたたみ端末ポケットベル

less概念:たとえば、入力ファイルを対話的に「縮小」および「拡張」するターミナルポケットベル(例:emacsアウトラインモード)。折りたたむと、再帰ディレクトリリストにディレクトリ名のみを表示できます。拡張すると、内容全体を見ることができます。

別の例を見てください

git log | pager

ユーザーは、各投稿のタイトルと詳細ビューをインタラクティブに切り替えることができます。

pager xxx.c

関数は縮小/拡張できるため、ユーザーは関数定義のみビューと関数本文ビューを切り替えることができます。

明らかにポケットベルは、扱っているコンテンツの種類を話す必要があります(またはそれ自体が推論する必要があります)。

そのようなプログラムは存在しますか?

答え1

これを「pager」という実行ファイルに入れてください。

#! /usr/bin/env bash

TEMP=/tmp/file-$$.txt
trap "rm -f $TEMP" EXIT HUP INT TERM

echo '-*- outline -*-' > $TEMP
cat "$@" >> $TEMP
emacs $TEMP 0<&1

一時テキストファイルの最初の行は、emacsをアウトラインモードに切り替えます。その後、cat0個以上の指定されたファイルが追加されます。最後に、エディタを使用すると、必要なモードで入力テキストを表示し、trap EXIT一時ファイルをクリーンアップできます。

0ファイルは標準入力から読み取ることを意味します。

git log | pagerパイプがキーボードに接続されている標準入力を妨げる可能性があるため、通常はうまくサポートされていません。 (この場合、診断は「emacs:標準入力はttyではありません」です)pager。したがって、0<&1stdoutが接続されているのと同じ端末ptyにstdinを接続して、編集が成功したセッションを許可することで、この状況を回復できます。

関連情報