diff --git a/desafios/05/README.org b/desafios/05/README.org new file mode 100644 index 0000000..408589b --- /dev/null +++ b/desafios/05/README.org @@ -0,0 +1,104 @@ +#+title: Shell Script na Prática +#+author: Blau Araujo +#+email: blau@debxp.org + + +* 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: + +#+begin_example +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. +#+end_example + +** 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: + +#+begin_example +DEFAULT_EDITOR=nano # Editor padrão. +MENU=default # O padrão é 'select' ou 'fzf' (se instalado). + +# Configurações do menu com 'fzf': +fzf_options=( +... +) +#+end_example + +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'). + diff --git a/desafios/README.org b/desafios/README.org index 973dbd5..23d16fe 100644 --- a/desafios/README.org +++ b/desafios/README.org @@ -10,7 +10,7 @@ - [[./02/README.org][2. Qual é a sua graça?]] - [[./03/README.org][3. Jogo da adivinhação]] - [[./04/README.org][4. Novo arquivo]] -- [[#][5. Menu de configurações]] +- [[#][5. Menu de favoritos]] - [[#][6. Tarefas]] - [[#][7. Slides no terminal]] - [[#][8. Busca e leitura de manuais]]