104 lines
3.2 KiB
Org Mode
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').
|
|
|