twittering-mode: usando Twitter no EMACS

Faz tempo que não posto aqui… E tem alguns motivos isso:

O primeiro foi o início de mais um projeto pessoal, o Aulas de C, que visa ensinar a base de C para os interessados em tal linguagem de programação. A idéia é aprender-se o que é mais interessante primeiro, e deixar tecnicidades e detalhes mais exóticos para depois, conforme forem sendo necessários. Não é um curso mesmo, mas sim uma forma de se aprender fazendo.
Mas o mais importante é bem mais simples: falta de algo útil para escrever.
Bem, isso acabou agora.
Recentemente, perdi o suporte ao Echofon na minha antiga estação de trabalho Linux… Os clientes modernos nenhum pegava e os que pegavam eram antigos e/ou sobrecarregavam meu sistema…
O que fazer?“, pensei
Como eu uso EMACS para várias atividades no meu dia-a-dia profissional, me ocorreu pesquisar por meios para usar o mesmo como um cliente de Twitter. E acabei encontrando o twittering-mode, um modo que permite ao EMACS navegar no Twitter de forma extremamente rápida e eficiente, com ícones, RT e a possibilidade de abrir-se timelines de outros usuários e ver-se hashtags.
A idéia aqui é explicar o básico sobre como utilizar o twittering-mode e algumas dicas de uso que me ocorreram no uso diário.

Instalando

Você vai precisar pegar o pacote do twittering-mode. Nesse caso, existe tanto a opção de baixar um tarball em http://twmode.sf.net quanto a que considero mais recomendável. Para isso, você precisará do git instalado na sua máquina. Faça um clone do repositório do github.com do twittering-mode na sua máquina com o comando:

git clone git://github.com/hayamiz/twittering-mode.git

Isso permitirá que você tenha os recursos mais atuais e correções de bugs, como a possibilidade de usar o migre.me como encurtador de URLs e uma correção no caso do uso de um arquivo de avatares que obrigava você a limitar o número de avatares a serem armazenados.
Seja como for, vamos começar a instalação. Antes, porém, você precisará do EasyPG para o EMACS. No EMACS a partir da versão 23 o EasyPG é parte do mesmo. Para trás do 23, é necessário baixar ele no link mostrado anteriormente. Além disso, você precisará instalar no seu ambiente os pacotes wget, curl, openssl e/ou gnutls, além do ImageMagick para os avatares e do GnuPG, que será usado para que não precisemos fazer autenticação OAuth toda santa vez. Sugiro que, por via das dúvidas, instale todos eles. Uma coisa a se mencionar, antes de seguirmos adiante, é que o twittering-mode só é compatível com EMACS 21.3 ou melhor, e ainda assim suas funcionalidades totais só estão disponíveis em ambientes a partir do EMACS 22. Adianto que não existe nenhuma perda perceptível de performance ou funcionalidades reais em ambientes de EMACS 21.3 até 22. Uso ele em um EMACS 21.4 e funciona de maneira muito boa, apenas com algumas “facilidades” ausentes, mas sem maiores problemas.
OK, vejamos a instalação:
Descompacte o tarball do twittering-mode em algum lugar no seu load-path (o caminho onde o EMACS busca suas extensões). Caso não saiba qual o caminho, descompacte-o em qualquer caminho que nós iremos explicar como adicionar o mesmo no load-path. Vamos assumir como exemplo o caminho ~/twittering-mode. Se seu EMACS for anterior ao 23, também baixe o pacote EasyPG e o descompacte em algum lugar (consideraremos como exemplo ~/epg).
Bem, antes de começarmos a usar o Twitter no EMACS, vamos fazer algumas configurações. Abra o EMACS e carregue seu arquivo de configuração .emacs (~/.emacs). Antes de começarmos, vamos adicionar no início do .emacs as seguintes linhas:

(add-to-list 'load-path "~/twittering-mode")

Essa linha avisa ao EMACS a procurar novos modos no caminho adicionado. No caso, estamos adicionando o pacote básico do twittering-mode ao load-path do EMACS, de modo que ele possa ser usado. Além disso, nas versões antigas do EMACS (anteriores à 23), precisamos adicionar o EasyPG:

(add-to-list 'load-path "~/epg")

Então adicionamos o comando que irá carregar no EMACS o módulo do twittering-mode:

(require 'twittering-mode)

Com isso, já fizemos uma configuraçao rápida. Salve o .emacs, feche o EMACS e abra-o novamente.

Navegação básica

Use o atalho M-x (Meta-x) para ir ao minibuffer e abra o modo com o comando twittering-mode. Uma série de cargas serão feitas e aparecerá uma mensagem pedindo o OAuth Authorization PIN. Uma janela de navegador será aberta pelo EMACS pedindo que você autorize o twittering-mode (twmode) no seu usuário do Twitter. Confirme a autorização e copie no EMACS o número que irá aparecer após a confirmação. Esse número é o PIN que você precisa. Aguarde alguns instantes que o EMACS irá carregar, com a ajuda dos utilitários instalados anteriormente, sua Timeline em um buffer chamado :home.
Cada Timeline aberta, seja sua, seja de um usuário ou hashtag, fica em um buffer do EMACS separado. Embora o twittering-mode disponibilize atalhos específicos para navegar entre as TL, particularmente prefiro usar os atalhos do próprio EMACS, que continuam funcionando normalmente.
Você move-se normalmente pelo buffer (que é read-only) usando os comandos de movimentação padrão do EMACS ou as setas  e PgUp e PgDn se você tiver o modo pc-select. Alguns atalhos bem úteis (lembrando que os atalhos são case-sensitive):

  • j – Desce para o tweet anterior (em termos de tempo). Se chegar no final da Timeline carregada, irá carregar tweets mais antigos. Normalmente são carregados de 20 a 20 twits, mas esse valor pode ser configurado através de uma variável do EMACS. Veremos customizações mais adiante;
  • k – Avança para o próximo tweet (em termos de tempo);
  • n – volta para o tweet anterior postado pelo mesmo usuário do tweet onde você está;
  • p – avança para o próximo tweet postado pelo mesmo usuário do tweet onde você está;
  • H – vai para o topo da Timeline;
  • G – vai para o final da Timeline;
  • g – carrega novos tweets à Timeline. O twittering-mode tem auto-update para a Timeline, mas esse pode ser desligado se necessário, e então usa-se esse atalho para carregar-se novos tweets. Esse atalho pode ser usado com o auto-update ativo;
  • r – mostra replies ao tweet onde você está;
  • C-c C-e – limpa o buffer da Timeline em questão;
  • q – fecha a Timeline;
  • v – sobre uma hashtag ou o nome de usuário, abre em um novo buffer a Timeline da hashtag ou usuário (Nota: em alguns casos, os acentos em uma hashtag poderão aparecer como caracteres randômicos… Isso se deve a um problema na tratativa das hashtags e não há previsão para correção)
  • V – permite você abrir uma Timeline de qualquer usuário que você quiser, bastando digitar o nick do usuário (lembrando que ele não abrirá TLs protegidas, exceto se você seguir o usuário). Além disso, existem alguns nomes especiais que ele usa para TLs relacionadas ao usuário:
  1. :home – sua timeline;
  2. :replies – respostas a seus tweets (incluindo RTs “editados”);
  3. :direct_messages – mensagens diretas que você recebeu;
  4. :favorites – tweets que você marcou como favoritos;
  • u – Postar um twit – Abrirá uma janela de edição onde você poderá escrever o seu tweet normalmente. Para enviar o tweet, use o atalho C-c C-c. Caso deseje cancelar o twit, use o atalho C-c C-k. [F4] irá encurtar qualquer URL que esteja no tweet;
  • [Enter] – Permite editar um reply ao tweet apontado pelo cursor. Em cima de um link, abre-o no navegador padrão do sistema. Sobre um nome de usuário, abre seu profile no Twitter. Sobre uma hashtag, abre uma pesquisa sobre ela no Twitter;
  • C-c [Enter] – Permite dar um RT “antigo” (como Reply) do tweet apontado pelo cursor;
  • C-u C-c [Enter] – Permite enviar um RT “novo” (da API do Twitter) do tweet apontado pelo cursor;
  • d – Permite enviar uma mensagem direta a um usuário. É considerado por padrão que o DM irá para o usuário que postou o tweet onde o cursor está, mas você pode digitar o nick de qualquer usuário;
  • a – Ativa/Desativa a auto-atualização da TLs atual (padrão ativo);
  • i – Ativa/Desativa a exibição de avatares da TLs atual (padrão ativo);
  • s – Ativa/Desativa rolamento da TL atual (padrão desativado);
  • C-c C-t – Permite definir uma hashtag padrão para seus posts – útil na cobertura de um evento;
Esses comandos oferecem uma navegação básica que deve ser o suficiente para o uso cotidiano. Para maiores informações, consulte a entrada do twittering-mode no EMACSWiki.org.

Customizando

Como tudo no EMACS, o twittering-mode é muito customizável. Infelizmente ele não é customizável pelo customize-mode, portanto as customizações normalmente são feitas pelo .emacs ou fazendo eval de setq no *scratch*. Vamos falar então da customização via .emacs.
Abaixo estou copiando o trecho do meu .emacs para definir algumas variáveis padrão, além de usar alguns hooks do twittering-mode para mudar alguns atalhos e para fazer com que o twittering-mode exiba notificações de novos tweets:

;; Configurações do twmode (twmode.sf.net)
(setq twittering-use-master-password t) ;; voce precisara do EasyPG para EMACS (no 23 vem junto)
(setq twittering-timer-interval 300     ; 3 minutos para atualizar as TLs
      twittering-tinyurl-service ‘migre.me
      twittering-url-show-status nil
      twittering-icon-mode t
      twittering-initial-timeline-spec-string ‘(“:home” “:favorites” “:replies”)
      twittering-number-of-tweets-on-retrieval 60
      twittering-scroll-mode t
      twittering-use-icon-storage t
      twittering-icon-storage-limit nil
      )

 (add-hook ‘twittering-mode-hook
           (lambda ()
             (mapc (lambda (pair)
                     (let ((key (car pair))
                           (func (cdr pair)))
                       (define-key twittering-mode-map
                         (read-kbd-macro key) func)))
                   ‘((“F” . twittering-friends-timeline)
                     (“R” . twittering-replies-timeline)
                     (“U” . twittering-home-timeline)
                     (“f” . twittering-favorite)))))

(add-hook ‘twittering-new-tweets-hook (lambda ()
   (let ((n twittering-new-tweets-count))
     (start-process “twittering-notify” nil “notify-send”
                    “-i” “/usr/share/pixmaps/gnome-emacs.png”
                    “Novas mensagens”
                    (format “Tem %d nova%s mensage%s no Twitter!”
                            n (if (> n 1) “s” “”) (if (> n 1) “ns” “m”))))))

A variável twittering-use-master-password t, é muito útil, e ela que exige o EasyPG. Normalmente, o twittering-mode irá lhe obrigar a obter um novo PIN a cada vez que você tentar entrar nele, o que vai chegar um momento e tornar-se muito chato. Ao ativar essa variável twittering-use-master-password, você irá criar uma senha mestra de acesso ao twittering-mode e o mesmo irá guardar o PIN em um arquivo .twittering-mode.gpg, que ele abrirá e lerá ao começar a usar o twittering-mode.
As demais variáveis são:

  • twittering-timer-interval – Define o intervalo de atualização em segundos (padrão 90 segundos – 1,5 minutos);
  • twittering-tinyurl-service – Define qual será o serviço de encurtador de URLs a ser utilizado entre alguns que o twittering-mode consegue usar: ‘tinyurl, ‘bit.ly, ‘goo.gl, ‘is.gd, ‘toly, ‘j.mp e ‘migre.me (esse último apenas na versão do github na época em que esse post foi escrito). Se você desejar utilizar especificamente bit.ly e j.mp precisará definir também duas variáveis (twittering-bitly-login e twittering-bitly-api-key) com informações sobre seu usuário e chave de API do bit.ly. ou do. j.mp Padrão ‘tinyurl;
  • twittering-url-show-status – Mostra o tráfego utilizado depois de uma atualização de TL. Padrão nil;
  • twittering-icon-mode – Ativa o modo de visualização de avatares. Padrão nil;
  • twittering-initial-timeline-spec-string – Uma lista de TLs a serem abertas no momento da inicialização do twittering-mode. O padrão é abrir apenas a TL do usuário (“:home“);
  • twittering-number-of-tweets-on-retrieval – Número de twits a serem obtidos por vez… Padrão 20, com limite máximo de 200.
  • twittering-scroll-mode – define se a TL vai rolar de modo a manter o tweet que está sendo lido como o atual ou se vai fazer com que o EMACS desça os twits não lidos. O padrão é nil, que indica o 2° comportamento. Para ativar o primeiro, basta definir essa variável com qualquer valor não-nil usando setq.
  • twittering-use-icon-storage – Permite que o twittering-mode faça um cache dos avatares que ele consegur carregar, o que aumenta o desempenho, mas consome memória. Padrão nil. Deve ser definido para qualquer outro valor para ser ativado. Por padrão, o cache de avatares fica gravado em .twittering-mode-icons.gz, que é gravado ao sair-se do EMACS e aberto no momento em que chamamos o twittering-mode. É possível mudar-se o nome desse arquivo modificando-se a variável twittering-icon-storage-file;
  • twittering-icon-storage-limit – Se você utilizar o cache de avatares, você pode estipular ou não um valor padrão de avatares a serem usados modificando essa variável. O padrão é 500. Se não desejar limitar o número de avatares salvos no cache, defina essa variável como nil;

Após definirmos todas as variáveis que queremos, também realizamos algumas modificações em dois hooks. Um para fazermos uma modificação de atalhos (no caso, defini f para abrir a TL de favoritos) e a outra para fazer com que notificações sejam exibidas no momento em que houver o recebimento de novos twits. Essas dicas foram coletadas na entrada do twittering-mode no EMACSWiki.org.
Essa é apenas uma introdução ao twittering-mode, e na Internet existe muita coisa sobre ele. Espero que tenha sido útil. Se quiser me adicionar no Tweeter, meu usuário é @hufflepuffbr.

[Update 15:17 2011-08-18] A pedidos, um snapshot do twittering-mode em uso!