desafio 5

This commit is contained in:
Blau Araujo 2025-08-17 10:17:15 -03:00
parent 0f83217d5e
commit 2ef98ba3d0
2 changed files with 105 additions and 1 deletions

104
desafios/05/README.org Normal file
View file

@ -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').

View file

@ -10,7 +10,7 @@
- [[./02/README.org][2. Qual é a sua graça?]] - [[./02/README.org][2. Qual é a sua graça?]]
- [[./03/README.org][3. Jogo da adivinhação]] - [[./03/README.org][3. Jogo da adivinhação]]
- [[./04/README.org][4. Novo arquivo]] - [[./04/README.org][4. Novo arquivo]]
- [[#][5. Menu de configurações]] - [[#][5. Menu de favoritos]]
- [[#][6. Tarefas]] - [[#][6. Tarefas]]
- [[#][7. Slides no terminal]] - [[#][7. Slides no terminal]]
- [[#][8. Busca e leitura de manuais]] - [[#][8. Busca e leitura de manuais]]