Diego Rubin

Fullstack Developer

Entre em contato

Gnomato

Descrição

Gnomato

O Gnomato é um aplicativo criado para servir como um timer para a técnica de gestão de tempo chamado Pomodoro.

Foi construído visando o ambiente GNU/Linux, por isso foi escrito utilizando como base a biblioteca gráfica GTK.

O projeto está hospedado no github no seguinte endereço: https://github.com/diegorubin/gnomato.

Instalação

O arquivo com o código, pronto para ser compilado, pode ser baixado em:

https://github.com/diegorubin/gnomato/releases/download/1.0.1/gnomato-1.0.1.tar.gz

Para poder compilar o código é necessário ter instalado as seguintes bibliotecas:

  • Boost
  • Gtkmm 3.0
  • Libnotify
  • Python 2.7
  • Sqlite3

Para instalar essas bibliotecas no Ubuntu/Debian utilize o seguinte comando:

sudo apt-get install libboost-dev libboost-date-time-dev python-dev libsqlite3-dev libnotify-dev libgtkmm-3.0-dev

Para compilar o código, utilize os seguintes comandos:

tar -zxvf gnomato-1.0.1.tar.gz
cd gnomato-1.0.1
./configure
make
sudo make install

Funcionalidades

Além dos recursos que um timer para Pomodoro deveria ter: controle do tempo de trabalho e de pausas.

Os tempos de trabalho e pausa inicialmente possuem o valor definido na técnica Pomodoro, porém podem ser alterados na configurações do Gnomato.

Notificação de inatividade

De tempos em tempos o Gnomato verifica se há alguma tarefa sendo realizada, se não houver ele notifica o usuário através do libnotify. Esse intervalo também pode ser configurado nas preferencias.

Gnomato Notify

Lista de Tarefas

O Gnomato permite a criação de listas de tarefas, facilitando assim a concentração nas tarefas.

O campo da lista na criação de tarefas é livre, mas há um autocomplete para tentar amenizar a ocorrências de criação de listas erradas por causa de digitação.

Hooks

É possível executar ações após alguns eventos do Gnomato, para isso é necessário implementar a Gnomato classe em Python localizada em ~/.gnomato/scripts/gnomato.py. Dentro dessa classes é possível implementar qualquer interação com outros sistemas. Abaixo encontra-se o modelo da classe que deve ser implementada:

class Gnomato:

    def __init__(self):
        pass

    def on_break(self, list_name, task):
        return 'ok'

    def on_change_task(self, list_name, task):
        return 'ok'

    def on_pause(self, list_name, task):
        return 'ok'

    def on_remove(self, list_name,task):
        return 'ok'

    def on_start(self, list_name,task):
        return 'ok'

    def on_work(self, list_name, task):
        return 'ok'
###Serviços DBUS O Gnomato disponibiliza uma série de serviços DBus para facilitar a integração do timer com outras aplicações e ambientes gráficos. Abaixo estão listados todos os serviços disponíveis com uma pequena descrição de cada um.
<interface name='com.diegorubin.Gnomato'>
    <method name='GetRemainer'>
       <arg type='s' name='iso8601' direction='out'/>
    </method>
    <method name='GetCurrentTask'>
       <arg type='s' name='iso8601' direction='out'/>
    </method>
    <method name='GetCycle'>
       <arg type='s' name='iso8601' direction='out'/>
     </method>
    <method name='ShowWindow'>
       <arg type='s' name='iso8601' direction='out'/>
    </method>
    <method name='CreateTask'>
      <arg type='s' name='iso8601' direction='in'/>
      <arg type='s' name='iso8601' direction='in'/>
      <arg type='s' name='iso8601' direction='out'/>
    </method>
</interface>

GetRemainer

Recupera o atual valor do timer.

GetCurrentTask

Recupera a descrição da task selecionada.

GetCycle

Exibe os possíveis estados do ciclo Pomodoro com destaque para o atual.

ShowWindow

Exibe a janela principal do Gnomato.

CreateTask

Serviço para criação de novas tarefas.

Plugin para o Cinamon

Desenvolvi um plugin para o Cinnamon, ambiente gráfico que uso atualmente, para exibr a tarefa que estou trabalhando no momento. A imagem abaixo mostra como o plugin exibe a tarefa. O código do plugin está hospedado em https://github.com/diegorubin/gnomato-cinnamon-applet.

Gnomato Cinnamon

Hook para Git

O script abaixo é um hook de prepare-commit-msg do git que coloca a tarefa corrente na mensagem do commit.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Coloca a tarefa atual na mensagem de commit.

import sys
import dbus
import re

def get_current_task():
    bus = dbus.SessionBus()

    remote_object = bus.get_object("com.diegorubin.Gnomato", "/com/diegorubin/Gnomato")
    current_task = remote_object.GetCurrentTask(dbus_interface = "com.diegorubin.Gnomato")
    return current_task

def prepend_to_file(marker):
    with open(sys.argv[1], 'r') as message_file:
        lines = message_file.readlines()
        lines[0] = marker + lines[0]
    with open(sys.argv[1], 'w') as message_file:
        message_file.write(''.join(lines))

if __name__ == '__main__':
    prepend_to_file(get_current_task())