Como eu uso o emacs para lançar os registros, nada mais natural que fosse dentro do emacs que fosse feita essa organização.
Os meus registros tem o seguinte formato:
AAAA-MM-DD -X.XX tag1, tag2| @MM.DD Descrição do gasto
Imaginei várias soluções, desde a mais simples: ordenar as linhas alfabéticamente, até outras mais complexas, onde preencheria hash tables com a data do gasto para poder organizar o conjunto de linhas.
Como cada registro é uma única linha, eu já tinha uma idéia de como seriam os registros.
O problema para a solução mais simples é que, como eu coloco a data de lançamento para a data de vencimento do meu cartão ordenar as entradas pelo primeiro campo (AAAA-MM-DD) não iria adiantar nada, pois as entradas teriam a mesma data
Para a abordagem de colocar todas as entradas em hash tables há o problema de que posso ter várias entradas no mesmo dia, independente de usar o campo AAAA-MM-DD ou @MM.DD e sendo assim eu perderia entradas
A solução acabou sendo a mais simples (ou segunda mais simples), copiar a data de compra @MM.DD para o início da linha, onde meu registro temporário ficaria assim:
@MM.DD AAAA-MM-DD -X.XX tag1, tag2| @MM.DD Descrição do gasto
E depois mandar ordenar as linhas com (sort-lines nil (point-min) (point-max)).
Pronto, os registros já estavam ordenados, porém agora eu não tinha mais o formato do moneylog, mas estava fácil voltar ao formato original.
Bastava recortar a primeira parte do texto com (kill-rectangle minr maxr) e voi-lá, estaria de volta no formato certo.