bash/05/README.org

104 lines
3.2 KiB
Org Mode

#+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').