smenu是一个选择过滤器,就像sed
是一个编辑过滤器一样。
该工具从标准输入或文件中读取单词,并在滚动窗口中以不同的布局将它们呈现到终端屏幕上。使用键盘和/或鼠标可以轻松移动光标,从而可以选择一个或多个单词。
请注意,在菜单执行开始和结束时,屏幕不会被清除。光标所在位置显示选择窗口,终端之前的内容既不被修改,也不丢失。
我已尽力使其尽可能易于使用。它应该适用于terminfo
数据库中管理的所有终端。
支持UTF-8
编码。此支持包括双角字符和扩展字素簇。然而,后者仍处于实验阶段,如果使用适当的终端(例如 WezTerm 或 iTerm),效果会更好。
UTF-8
字形的编码也必须采用规范形式,因为我们不会努力将它们采用这种形式。
请参阅附带的手册页以了解有关此小程序的更多信息。
该 wiki 包含屏幕截图和动画,详细介绍了smenu的一些概念和功能。
一些 Linux 发行版已经将smenu作为软件包提供,如果没有,则可以在任何具有功能性terminfo
开发平台的系统上构建smenu 。这包括我所知道的所有 Unix 和类 Unix 系统。
请使用提供的build.sh
脚本来构建可执行文件。该脚本使用并接受与 GNU configure
脚本相同的参数,输入build.sh --help
即可查看它们。
构建过程完成后,只需使用适当的权限进行简单的make install
即可完成。
我已启用此存储库上的讨论。
我知道在决定报告问题、提出问题或提出功能请求时应该在哪里进行沟通时可能会出现一些困惑,因此本节旨在帮助我们在这一点上保持一致。
如果出现以下情况,请提出问题:
如果出现以下情况,请展开讨论:
该程序应该可以在大多数 Unix 上运行,但如果您使用的是 Linux,请尝试在 shell 提示符下键入以下行(此处: "$ "
):
$ R=$(grep Vm /proc/$$/status | smenu -n20 -W $':tn' -q -c -b -g -s /VmH) $回声$R
现在应该在程序等待命令时显示类似这样的内容:(数字是我的,你的会有所不同)
VmPeak| 23840 kB 虚拟机大小| 23836 kB VmLck | 0 kB VmHWM | 2936 kB VmRSS | 2936 kB 虚拟机数据| 1316 kB VmStk | 136 kB VmExe | 28 kB VmLib | 3956 kB VmPTE | 64 kB VmSwap 0 kB
光标应位于"VmHWM "
下方。
将光标移动到" 136 kB"
并使用
结束程序后,shell 变量 R 应包含: " 136 kB"
。
如果您的 Unix 上有超过 10 个 UID 低于 100 的帐户,以下命令与 Unix 品牌无关,应该会为您提供一个滚动窗口:
$ R=$(awk -F: '$3 < 100 {打印 $1,$3,$4,$NF}' /etc/passwd | s菜单-n10-c) $回声$R
在我的( LANG
和LC_ALL
设置为POSIX
)上显示:
在 25 25 /bin/bash 系统 0 3 /usr/bin/ksh + bin 1 1 /bin/bash | bin 1 1 守护进程 2 2 /bin/bash | ftp 40 49 /bin/bash | ftp 40 49 游戏 12 100 /bin/bash | lp 4 7 /bin/bash | 邮件 8 12 /bin/false | 命名为 44 44 /bin/false | ntp 74 108 /bin/假 v
请注意滚动条的存在。
只需在.bashrc
中添加以下内容
停产=$'n' 绑定 -x '"Cr": READLINE_LINE=$(fc -lr 1 | sed "s/[1-9][0-9]*..//" | smenu -Q -l -ac:7/4,b -W"$EOL") READLINE_POINT=${#READLINE_LINE}'
启动或重新启动bash并按CTRL-R
(按CTRL-C
或q
退出),享受吧!
您还可以添加参数-d来指示smenu在选择条目后清理选择窗口。
这些版本使用名为ctxopt的新选项系统,该系统可能包含错误。请报告它们,以便在下一版本的smenu或ctxopt (https://github.com/p-gen/ctxopt) 中修复它们。
由于这个新的选项管理系统,在某些情况下可能还需要重新排列命令行参数。很抱歉这可能需要额外的工作。
不考虑用从右到左的语言(例如波斯语或希伯来语)书写的行的右对齐。
附带的测试系统还比较年轻,请大家谅解。
重要的是测试系统有一些依赖性,请在继续之前阅读test/README.rst
。
注意通过在tests
目录中运行./tests.sh
来运行所有测试将需要一些时间(目前大约 21 分钟)。
注意,在某些系统(例如 *BSD)上,某些测试可能会失败。这可以通过 posix/libc/... 实现的差异来解释。当使用某些特定的正则表达式或不常见的UTF-8
字节序列时,尤其会发生这种情况。
如果测试因未知原因失败,请将其目录名称和相应的.bad
文件发送给我。
如果您遇到了没有测试涵盖的错误,那么您可以在现有或新目录中的tests
目录中创建新测试:阅读tests/README.rst
文件,使用现有测试作为模型,创建.in
文件和.tst
文件并将它们以及生成的文件发送给我。
欢迎贡献,但首先在问题中或与维护者讨论您的建议。
我要感谢那些花时间为他们喜欢的操作系统或发行版打包smenu 的人。您可以在这里找到他们的名字:https://repology.org/project/smenu/information