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!

Sobre Fábio Emilio Costa
Linux, Free Software, EMACS, Rugby, Indycar, Doctor Who, Harry Potter... Yep, this is me!

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s