基于curses的程序用于从列表中选择项目

基于curses的程序用于从列表中选择项目

Linux中是否有任何程序可以通过curses(例如列表框)来表示(通过管道或类似的东西)此类命令的结果,例如ls,cat,grep,ps等?因此,通过这样的程序,我想从列表中选择(通过箭头键或 hjkl)某些特定项目而不是复制粘贴它?

我需要类似的东西dialog。它允许使用自定义小部件创建自定义窗口,但我只需要所有这些小部件中的列表框,并且我希望能够自定义它。例如,我希望能够(在配置文件或参数内)在按 Enter 时更改其行为(例如,此类列表可能包含我可以通过按 Enter 播放的媒体文件列表)。另外,我希望能够更改此类列表框的外观,以便它可能包含不同的列,我也希望可搜索列表框和彩色。

答案1

dialog我同意您可能需要从这里开始的评论。为了向您展示如何使用它,这里有一个示例脚本

#!/bin/bash

#make some temporary files
command_output=$(mktemp)
menu_config=$(mktemp)
menu_output=$(mktemp)

#make sure the temporary files are removed even in case of interruption
trap "rm $command_output;
      rm $menu_output;
      rm $menu_config;" SIGHUP SIGINT SIGTERM

#replace ls with what you want
ls >$command_output

#build a dialog configuration file
cat $command_output |
  awk '{print NR " \"" $0 "\""}' |
  tr "\n" " " >$menu_config

#launch the dialog, get the output in the menu_output file
dialog --no-cancel --title "Put you title here" \
       --menu "Choose the correct entry" 0 0 0 \
       --file $menu_config 2>$menu_output

#revcover the output value
menu_item=$(<$menu_output)

#recover the associated line in the output of the command
entry=$(cat $command_output | sed -n "${menu_item}p" $config_file)

#replace echo with whatever you want to process the chosen entry
echo $entry

#clean the temporary files
[ -f $command_output ] && rm $command_output
[ -f $menu_output ] && rm $menu_output
[ -f $menu_config ] && rm $menu_config

另外,从你的问题来看,你似乎也更喜欢控制台文件管理器。其中存在很多,例如护林员或者午夜指挥官。如果这些配置不足以满足您的需求,它们的源代码可能在您自己的工具设计中有用。

相关内容