quinta-feira, 21 de outubro de 2021

To-Do List - lista de tarefas em shell script

adicione a linha abaixo no .bashrc

# To-Do List 

export TODO="${HOME}/Documentos/todo.txt"
 

tla() { [ $# -eq 0 ] && cat $TODO || echo "$(echo $* | md5sum | cut -c 1-5) →  $*" >> $TODO ;}
 

tlr() { [ $# -z ] 2>/dev/null && read -n1 -p "press ENTER to delete all tasks or CTRL+C to cancel" ; sed -i "/^$*/d" $TODO ;}

salve o arquivo e rode o comando 

$ source .bashrc

para adicionar uma tarefa 

$ tla 'texto'

para remover

$ tlr 'id'

 para remover todas as tarefas

$ tlr

outra opção com numeração das linhas utilizando o nl 

# To-Do List
export TODO="${HOME}/Documentos/todo.txt"

tla(){
if [ $# -eq 0 ]; then
echo "$(sed -i 's/^ *[0-9]\+.//g' $TODO ; nl -s " " $TODO )" > $TODO ; sed -i 's/^[ \t]*//' $TODO
cat $TODO
else
sed -i '/^[[:space:]]*$/d' $TODO ; echo "→  $*" >> $TODO ; echo "$(sed -i 's/^ *[0-9]\+.//g' $TODO ; nl -s " " $TODO )" > $TODO ; sed -i 's/^[ \t]*//' $TODO
fi
}

tlr() { [ $# -eq 0 ] 2>/dev/null && read -n1 -p "press ENTER to delete all tasks or CTRL+C to cancel" ; sed -i "/^$*/d" $TODO ;}

alternativa

caso não queira utilizar o md5sum ou nl para gerar o id utilize

tla() { [ $# -eq 0 ] && cat $TODO || echo "$(echo $* | cat /dev/urandom | tr -dc '0-9a-zA-Z' | fold -w 5 | head -n 1) →  $*" >> $TODO ;}

OBS: caso queira enviar a lista de afazeres para um e-mail fiz essa alternativa

adicione as linhas abaixo no .bashrc

export TODO_BACKUP="${HOME}/Documentos/todo_backup.txt"

tlb() { read -sp "Enter your Google App password : " password ; echo 'From: "username" <email@gmail.com>' >> "${TODO_BACKUP}" ; echo 'To: "user" <email@receiver.com>' >> "${TODO_BACKUP}" ; echo 'Subject: To-Do List' >> "${TODO_BACKUP}" ; echo >> "${TODO_BACKUP}" ; cat "${TODO}" >> "${TODO_BACKUP}" ; echo "" >> "${TODO_BACKUP}" ; curl --ssl-reqd --url 'smtps://smtp.gmail.com:465' --user 'username@gmail.com:'"${password}"'' --mail-from 'username@gmail.com' --mail-rcpt 'email@receiver.com' --upload-file ''"${TODO_BACKUP}"'' ; rm -r "${TODO_BACKUP}" ; unset password ;}

após configurar a função tlb com seu email de envio e recebimento, execute o comando

$ source .bashrc

OBS: lembrando que não é necessário configurar o password, justamente por isso coloquei o read para pegar ele e o unset para resetar a variável  

lembrando que é necessario autorizar o google a utilizar o curl 

site 1: https://www.google.com/settings/security/lesssecureapps

site 2: https://accounts.google.com/DisplayUnlockCaptcha

após configurar, para enviar a lista para email é simples

$ tlb 


OBS 2: 

o comando tlr deleta os arquivos se o usuario apertar qualquer tecla, para resolver isso use o tlr abaixo

tlr(){                                                                                                                         read -p "Yes to delete all tasks No to cancel: " answer                                                                        
case ${answer:0:1} in                                                                                                          
    y|Y )                                                                                                                      
        sed -i "/^$*/d" $TODO                                                                                                  
    ;;                                                                                                                         
    * )                                                                                                                        
        echo                                                                                                                   
    ;;                                                                                                                         
esac                                                                                                                           
}

Nenhum comentário:

Postar um comentário