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]
3 comments »
Copy link for RSS feed for comments on this post or for TrackBack URI
Leave a comment
Line and paragraph breaks automatic, e-mail address never displayed, HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>
Olha aí o bicho, voltando às origens!
Vai postar com mais frequência agora, velho?
Comment by Karlisson — 8 July, 2007 @ 9:31 pm
Claro, estou terminando alguns códigos ELisp aqui, acho que essa semana vem outro Post.
Mas creio que antes de botar outro Post com código ELisp vou descrever o EMMS, estou brincando com ele agora.
Comment by rwanderley — 8 July, 2007 @ 9:43 pm
Oi alemão. Prazer Stella.
Desculpa invadir seu blog, sou amiga dos meninos da digi(trabalho lá) e tenho um mac…..=(
Estou com sérios problemas com ele, a bateria não carrega, já fiz tudo que o suporte manda, porém nada acontece.
Bom, o negoço é o seguinte, provavelmente vou ter q levar na assistência, gostaria de saber oq é necessário, você precisou levar nota fiscal? pq definitivamente eu não tenho nota fiscal XD…mas ainda está na garatia de 1 ano.Se possivel e não for encomodo responda pelo meu email.
Brigada pela atenção ^^.
Comment by Stella — 30 September, 2007 @ 8:37 am