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.
English
Português