.. | ||
README.org |
Shell Script na Prática
Desafio 5: Menu de favoritos
Objetivos
- Manipulação de arquivos (inclusão, edição e exclusão de linhas)
- Casamento de padrões de texto
- Separação de linhas em campos
Enunciado
Criar um programa que gerencie uma lista de arquivos frequentemente editados no terminal, como arquivos de configurações, anotações ou scripts.
O programa será chamado de bm
(de bookmark) e deve implementar as seguintes
instruções de uso:
Bookmark (bm) - Gerenciador de arquivos favoritos USO: bm [OPÇÕES] [PADRÃO] Quando executado sem argumentos, exibe o menu para seleção do arquivo que deverá ser aberto no editor de texto. Sem OPÇÕES, abre no editor de texto o arquivo cujo nome casar com PADRÃO. Se houver mais de um casamento, o menu de seleção será exibido listando apenas os casamentos encontrados. OPÇÕES: -a CAMINHO[:DESCRIÇÃO] Inclui o arquivo em CAMINHO com uma DESCRIÇÃO opcional. -l [PADRÃO] Lista os arquivos que casam com o PADRÃO. Se não for informado um PADRÃO, todos os arquivos serão listados. -e [PADRÃO] Edita a entrada que casa com o PADRÃO. Caso não seja informado um PADRÃO, ou se houver mais de um casamento, o menu de seleção será exibido. -r [PADRÃO] Remove a entrada que casa com PADRÃO. Caso não seja informado um PADRÃO, ou se houver mais de um casamento, o menu de seleção será exibido. -h, --help Exibe esta ajuda. -v, --version Exibe informações de versão e licença.
Sobre o menu de seleção
Este desafio não tem evoluções. Em vez disso, o programa deve ser capaz de utilizar os seguintes menus:
Se invocado no terminal
- Menu
select
(padrão) - Menu com
fzf
(padrão, se instalado)
Se invocado no ambiente gráfico
No ambiente gráfico (por exemplo, invocado por um lançador), só será dada a opção de selecionar uma entrada para abertura no editor. Selecionada a entrada, o terminal será aberto com o arquivo carregado no editor padrão.
Neste caso, o menu poderá ser:
- Abre um terminal e exibe o menu (padrão)
- Menu
dmenu
(se instalado) - Menu
rofi
(se instalado)
Para uso no ambiente gráfico com rofi
ou dmenu
(ou qualquer outro, como um
diálogo do YAD, por exemplo), será necessário definir uma configuração no
arquivo ~/.config/bm/config
.
Opções de configuração
O arquivo de configuração (~/.config/bm/config
) deve conter as seguintes
definições:
DEFAULT_EDITOR=nano # Editor padrão. MENU=default # O padrão é 'select' ou 'fzf' (se instalado). # Configurações do menu com 'fzf': fzf_options=( ... )
Para utilizar outros menus, além dos nomes de seus executáveis em MENU
,
deve ser criado um vetor com as sus opções de linha de comando (como
feito para o 'fzf').