programa baseado em maldições para item de seleção da lista

3

Existe no linux qualquer programa que possa representar (via pipe ou algo parecido) resultados de comandos como, por exemplo, ls, cat, grep, ps etc, por meio de curses (por exemplo, como listbox)? Então, por meio de tal programa eu gostaria de selecionar (por meio de setas ou hjkl) algum item específico da lista em vez de copiá-lo e colá-lo?

Eu preciso de algo como dialog . Ele permite criar janelas personalizadas com widgets personalizados, mas eu preciso de todos os widgets apenas listbox, e gostaria de ter a possibilidade de personalizá-lo. Por exemplo eu gostaria de poder (dentro de arquivo de configuração ou parâmetros) mudar seu comportamento quando pressionar enter (por exemplo, tal lista pode conter lista de arquivos de mídia que eu posso jogar pressionando enter). Também gostaria de poder alterar a aparência de tal caixa de listagem para que ele possa conter colunas diferentes, também gostaria de listbox pesquisável e colorido.

    
por Andrey Tykhonov 01.04.2013 / 20:31

1 resposta

2

Concordo com o comentário de que dialog está provavelmente onde você precisa começar. Para mostrar como você poderia usá-lo, aqui está um script de exemplo

#!/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

Além disso, da sua pergunta, parece que você também pode preferir um gerenciador de arquivos do console. Existem muitos deles, como ranger ou comandante da meia-noite . Se eles não forem configuráveis o suficiente para suas necessidades, o código-fonte deles provavelmente será útil no design de sua própria ferramenta.

    
por 02.04.2013 / 14:06