Um registo para gerir a dispersão
No domingo passado acordei de madrugada sobresaltado. Enquanto o sono teimava em não voltar, ocorreu-me que seria útil manter um registo diário de tarefas, decisões e conclusões da míriade de actividades a que me dedico. Principalmente porque sou frequentemente obrigado a saltitar entre elas, o que leva a muito tempo perdido em retomar o fio à meada. Existe uma miriade de aplicações que se propõem a ajudar neste tipo de registos. O problema deste tipo de registos é que são geralmente pouco eficientes. Acaba por se perder mais tempo e gerar mais distração, derrotando o propósito inicial. Resolvi levantar-me e por em prática uma solução simples, usando simplesmente um ficheiro .txt
. Cada linha poderia ser uma entrada com data e hora, possivelmente a actividade em causa e a informação que se quer registar sobre a actividade. Se os valores estiverem separados por virgulas, facilmente se converte o ficheiro .txt
num ficheiro .csv
(Coma separated values) mudando a extensão e acrescentando um cabeçalho.
Como não vale a pena reinventar a roda fui perguntar ao senhor Google que soluções existem. O Lifehacker tem algumas sugestões sobre como conseguir isto quer no Windows quer no Mac. Eu uso os dois sistemas operativos diariamente por isso a solução tem que funcionar de forma similar em ambos os lados. Neste artigo vou detalhar a solução que implementei no Mac que usa apenas as ferramentas que vêm com o macOS.
O primeiro passo é escrever um script que faça o que eu quero: (1) Usando um atalho do teclado, (2) chamar uma caixa de texto onde introduzo a informação que quero registar, (3) adicionar a data e hora em que o fiz, (4) indicar a actividade a que diz respeito a entrada. É possivel conseguir tudo sem escrever uma linha de código usando o Automator, mas a solução não é muito elegante porque não consigo que as entradas tenham a ordem que gostaria, nem acrescentar os pontos e virgulas entre os valores. O código abaixo executa os passos 2 a 4.
function run() { var app = Application.currentApplication() app.includeStandardAdditions = true function prompt(text, defaultAnswer) { var options = { defaultAnswer: defaultAnswer || '' } try { return app.displayDialog(text, options).textReturned } catch (e) { return null } } var texto = prompt("O que queres registar?", "") var actividade = app.chooseFromList(['Actividade1', 'Actividade2', 'Actividade3'], {withPrompt: 'Esta tarefa foi realizada para que actividade?'}); var data = app.currentDate().toString() var entrada = data + ";" + actividade + ";" + texto + "\n\n" path = Path('/Users/XXXX/XXXX/registo.txt') function writeTextToFile(text, path, overwriteExistingContent) { try { // Open the file for writing var openedFile = app.openForAccess(path, { writePermission: true }) // Clear the file if content should be overwritten if (overwriteExistingContent) { app.setEof(openedFile, { to: 0 }) } // Write the new content to the file app.write(text, { to: openedFile, startingAt: app.getEof(openedFile) }) // Close the file app.closeAccess(openedFile) // Return a boolean indicating that writing was successful return true } catch(error) { try { // Close the file app.closeAccess(file) } catch(error) { // Report the error is closing failed console.log(`Couldn't close file: ${error}`) } // Return a boolean indicating that writing was successful return false } } writeTextToFile(entrada, path, false) }
O que faz o código?
function run() {...}
É a função dentro da qual pomos todo o código da nossa aplicação. As duas linhas seguintes criam uma variavel para a nossa aplicação e incluem uma biblioteca de funções que nos vão permitir ler e escrever ficheiros entre outras coisas. De seguida declaramos a função que vai chamar a nossa caixa de texto function prompt(text, defaultAnswer)
. Esta é uma função genérica (e modular) que poderia estar numa biblioteca (um ficheiro à parte), assim como a outra função que declaramos mais abaixo function writeTextToFile(text, path, overwriteExistingContent)
.
Na linha seguinte criamos e prenchemos a variável text
chamando a primeira função. De seguida, usamos uma função que nos permite criar uma janela com uma lista de opções – as nossas actividades. Perguntamos ao sistema a data e as horas e organizamos as variáveis todas no formato seguinte: Data; Actividade; Texto. Por fim, damos o caminho para o ficheiro onde vamos registar tudo isto path = Path('/Users/XXXX/XXXX/registo.txt')
e chamamos a função que faz isto por nós assim writeTextToFile(entry, path, false)
.
Passos Finais
O código acima pode ser colado no Editor de Scripts e corrido. Mas isto não é o que queremos. Para transformar isto numa aplicação que é corrida por um atalho do teclado faltam alguns passos:
- Abrir o Automator
- Criar uma nova Ação Rápida
- Garantir que o processo recebe “nada” como input.
- Incluir o processo “Executar Javascript” e escrever o teu código ou usar o meu código (Não esquecer de alterar os caminhos para algo que faça sentido).
- Gravar.
- Ir a Preferências do Sistema > Teclado > Atalhos e selecionar Serviços no campo esquerdo. Procurar o serviço que gravaste no passo anterior e atribuir um atalho de teclado clicando sobre
(nenhum)
e de seguida no atalho de teclado. - Ir a Preferências do Sistema > Segurança e Privacidade > Monitorização de entrada e adicionar o Automator à lista de aplicações às quais é permitido monitorizar o teclado.
Feito! Agora basta carregar no atalho de teclado escolhido no ponto 6 para que o nosso script se execute.