折叠终端寻呼机

折叠终端寻呼机

概念:终端寻呼机,例如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 进入大纲模式。然后cat附加零个或多个指定文件。最后,编辑器允许通过您喜欢的模式查看输入文本,然后trap EXIT清理临时文件。

零文件意味着从标准输入读取。

通常git log | pager不会得到很好的支持,因为管道可能会干扰连接到键盘的标准输入。 (这种情况下的诊断是:“emacs:标准输入不是 tty”。)我们期望 stdout 将连接到终端,即pager位于管道的末尾。鉴于此,0<&1可以通过将 stdin 连接到 stdout 连接到的同一终端 pty 来从这种情况中恢复,从而允许成功的编辑会话。

相关内容