Selecionando encoding correto no ERC
A algum tempo venho tendo problemas de codificação de caracteres no ERC,
o cliente de irc que uso.
Uso o ERC tanto para conectar em servidores IRC, geralmente o freenode,
como para conectar ao MSN e Google talk, usando o bitlbee para converter
os protocolos destes dois últimos para o do IRC.
O problema está que o MSN e o Google talk usam ISO-8859-1 como encoding,
enquanto que o pessoal no freenode usa UTF-8. Eu conhecia a variável
erc-server-coding-system, que na minha configuração estava setada
para “‘(utf-8 . undecided)”, ou seja, eu enviava texto usando UTF-8 e
usava o encoding especial do emacs undecided como o encoding de entrada.
O problema dessa solução é obvio, funciona para o freenode mas não funciona para o MSN. O que eu não sabia é que a variável erc-server-coding-system também pode ser uma função! Como o servidor do bitlbee é o localhost a configuração é trivial. erc-server-announced-name é uma variável dinâmica contendo o nome do servidor IRC sendo usado no momento.
'(lambda (target)
(if (and erc-server-announced-name
(string-match "localhost" erc-server-announced-name))
'(iso-8859-1 . undecided)
'(utf-8 . undecided))))
Essa função apenas checa se erc-server-announced-name bate com a string localhost, ou seja, se é o servidor do bitlbee, caso for seta o encoding para iso-8859-1, caso contrário usa utf8.