De volta ao GNU Emacs
Atualização: Para quem quiser um modo multimidia completo para o Emacs aconselho ver o EMMS, estou usando ele no momento, é muito bom!
—
Já faz algum tempinho (quase seis meses) que não atualizo este blog, muita coisa mudou de lá para cá. Voltei a usar exclusivamente GNU/Linux, tanto no trabalho como em casa, meu editor de textos (se é que pode chamar o Emacs de editor de textos :D) voltou a ser o GNU Emacs ao invés do TextMate; e é justamente sobre o Emacs que este Post trata.
Desde o início de 2001 venho usando Emacs no dia a dia, sempre como usuário, apenas decorando comandos e fazendo cut-and-paste de código elisp que achava na web e colando no meu .emacs; nem ao menos me esforçava para entender como o código funcionava. A uma semana atrás resolvi começar a ler o livro GNU Emacs Extensions, nele vi a seguinte frase:
Give a man a new Emacs command and he can hack for a night
Teach a man to make new Emacs commands and he can hack for a lifetime
Na minha atual experiência de uma semana estou vendo que esta frase é verdadeira, ainda sou um bebê com relacão a ELisp, mas quanto mais eu entendo mais vejo que esta é a linguagem perfeita para se brincar. Hoje irei mostrar um pequeno trexo de código ELisp que coloquei no meu .emacs para poder ficar manipulando o XMMS sem ter que sair do Emacs. Desta forma quando estou na sala ouvindo Pink Floyd e meu chefe entra eu não preciso mais parar o que estou editando, tentar achar o mouse, localizar a janela do XMMS e apertar o botão de pause, basta digitar a sequência C-x p t (escolhi o prefixo C-x p porque o p me lembra de player) para executar o comando xmms -t de dentro do Emacs e pausar o xmms pra mim. Pronto! Pausei o XMMS sem ter que mudar de contexto.
O código é extremamente simples e tem como função principal a xmms-exec que recebe um parâmetro como argumento e executa o XMMS passando tal parâmetro, segue o código:
[code lang=”lisp”]
(defun xmms-exec (arg)
“Executes XMMS with arg as argument.”
(call-process “/usr/bin/xmms”
nil ; infile
nil ; buffer
nil ; display
arg))
[/code]
O que este código faz é iniciar o xmms (/usr/bin/xmms) passando arg, o único parâmetro da funcão, como argumento. Depois de executado o processo é finalizado e pronto.
Agora basta criar uma função para cada ação que queiramos que o XMMS execute e criar atalhos para tal função, segue o exemplo da função para dar play/pause:
[code lang=”lisp”](defun xmms-toggle-pause ()
“Toggles play/pause in XMMS.”
(interactive)
(xmms-exec “-t”))
(global-set-key “\C-xpt” ‘xmms-toggle-pause)
[/code]
Pronto! Só isso, agora você já pode apertar C-x p t enquanto seu XMMS estiver tocando alguma música e ele irá pausar, aperte C-x p t de novo para continuar a música do ponto onde parou. Este exemplo é bem simples, posteriormente pretendo colocar algo mais complexo e corrigir a identacão do código (estou apanhando para botar o plugin CodeSnipset para funcionar com LISP).
Segue o código completo:
[code lang=”lisp”]
;; XMMS
(defun xmms-exec (arg)
“Executes XMMS with arg as argument.”
(call-process “/usr/bin/xmms”
nil ; infile
nil ; buffer
nil ; display
arg))
(defun xmms-toggle-pause ()
“Toggles play/pause in XMMS.”
(interactive)
(xmms-exec “-t”))
(defun xmms-rewind ()
“Rewind in XMMS.”
(interactive)
(xmms-exec “-r”))
(defun xmms-forward ()
“Forward in XMMS.”
(interactive)
(xmms-exec “-f”))
(defun xmms-play ()
“Play in XMMS.”
(interactive)
(xmms-exec “-p”))
(defun xmms-stop ()
“Stop in XMMS.”
(interactive)
(xmms-exec “-s”))
;; Global keyboard shortcuts
(global-set-key “\C-xpt” ‘xmms-toggle-pause)
(global-set-key “\C-xpr” ‘xmms-rewind)
(global-set-key “\C-xpf” ‘xmms-forward)
(global-set-key “\C-xpp” ‘xmms-play)
(global-set-key “\C-xps” ‘xmms-stop)
[/code]