De volta ao GNU Emacs

Filed under:Administração Linux — posted by rwanderley on 6 July, 2007 @ 10:24 pm

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 »

  1. Olha aí o bicho, voltando às origens! :D
    Vai postar com mais frequência agora, velho?

    Comment by Karlisson — 8 July, 2007 @ 9:31 pm

  2. 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

  3. 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

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>

(required)

(required)




image: detail of installation by Bronwyn Lace