diff --git a/desafios/04/README.org b/desafios/04/README.org new file mode 100644 index 0000000..3f23607 --- /dev/null +++ b/desafios/04/README.org @@ -0,0 +1,138 @@ +#+title: Shell Script na Prática +#+author: Blau Araujo +#+email: blau@debxp.org + + +* Desafio 4: Novo arquivo + +** Objetivos + +- Manipulação de argumentos +- Separação de palavras em campos +- Vetores associativos +- Menu de seleção do Bash +- Criação de menus customizados +- Criação de menus com Fuzzy Finder +- Estrutura de seleção +- Execução de programas +- Leitura e escrita em arquivos +- Filtragem de texto + +** Enunciado + +Criar um programa que crie um novo arquivo de um dado modelo e o abra no +editor adequado. O programa será chamado de ~nf~ e a sintaxe de uso será: + +#+begin_example +nf NOVO_ARQUIVO[.EXT] +nf [OPÇÕES] +#+end_example + +O programa será chamado de ~nf~ (de /new file/) e receberá as seguintes opções: + +- ~--list~ ou ~-l~: Lista os modelos disponíveis e o editor associado. +- ~--help~ ou ~-h~: Exibe ajuda de uso. +- ~--version~ ou ~-v~: Exibe informações de versão e copyright. + +#+begin_quote +Na ausência do nome do novo arquivo, a ajuda deverá ser impressa +e o programa terminará com erro. +#+end_quote + +A associação de modelos e editores será feita com base na extensão do nome +do arquivo a ser criado, por exemplo: + +- ~.asm~: arquivo de um programa em Assembly (NASM) +- ~.bash~ ou sem extensão: arquivo de script em Bash +- ~.c~: arquivo de um programa em C +- ~.md~: arquivo-texto formatado em GitHub Markdown +- ~.org~: arquivo-texto formatado em Org Mode (Emacs) +- ~.s~: arquivo de um programa para o /GNU Assembler/ (GAS) +- ~.sh~: arquivo de script para o shell ~sh~ +- ~.txt~: arquivo-texto plano (/raw text/) + +Os arquivos de modelo deverão ser criados no diretório: =~/.config/nf/modelos= +e seus nomes devem ser iguais às extensões a que estão associados. + +Exemplo: + +#+begin_example +.config/ +└─ nf/ + ├─ modelos/ + │ ├─ asm + │ ├─ bash + │ ├─ c + │ ├─ md + │ ├─ org + │ ├─ s + │ ├─ sh + │ ├─ txt + │ └─ ... + └─ config +#+end_example + +O arquivo =~/.config/nf/config= deve conter a associação das extensões com +os respectivos editores: + +#+begin_example +DEFAULT='emacs -nw' + +editor[asm]=$DEFAULT +editor[bash]=$DEFAULT +editor[c]=geany +editor[md]=ghostwriter +editor[txt]=nano +#+end_example + +O editor definido em ~DEFAULT~ será usado para qualquer extensão sem editor +definido na configuração. + +** Evolução 1 + +Sem argumentos, o programa deve exibir um menu com os modelos disponíveis. + +Exemplo: + +#+begin_example +NOVO ARQUIVO + +[1] asm +[2] bash +[3] c +[4] md +[5] org +[6] s +[7] sh +[8] txt + +Modelo (tecle para sair): +#+end_example + +Em seguida, deve ser apresentado um /prompt/ para a digitação (obrigatória) +do nome do arquivo: + +#+begin_example +Nome do arquivo: +#+end_example + +Se o campo for deixado vazio, deve ser apresentada uma opção de tentar +novamente: + +#+begin_example +Nome do arquivo: + +O nome do arquivo é obrigatório! +Tecle para tentar novamente ou para cancelar: +#+end_example + +** Evolução 2 + +Implementar uma opção de menu para criar um novo modelo usando o editor +padrão para criar o arquivo de modelo e um prompt para a escolha do +editor. + +** Evolução 3 + +Utilizar a ferramenta ~fzf~ para exibir o menu. +