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:

  1. Abrir o Automator
  2. Criar uma nova Ação Rápida
  3. Garantir que o processo recebe “nada” como input.
  4. 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).
  5. Gravar.
  6. 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.
  7. 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.


Leave a Reply

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

six − 4 =


@