Gastón Ramos

"La mayoría de las gaviotas no se molesta en aprender sino las normas de vuelo más elementales: como ir y volver entre playa y comida. Para la mayoría de las gaviotas, no es volar lo que importa, sino comer. Para esta gaviota, sin embargo, no era comer lo que le importaba, sino volar. Más que nada en el mundo, Juan Salvador Gaviota amaba volar".

Category: emacs

Emacs, show trailing whitespace

Hace un tiempo que estaba buscando una forma de mostrar los trailing whitespaces en emacs y no encontraba una forma decente de hacerlo, hasta el momento estaba usando

 whitespace-mode

pero me mostraba muchas cosas que yo no quería, cómo los saltos de línea y los espacios en blanco, todos, no sólamente los trailing. La solución es esta, agregar esta línea al init.el:

;; show trailing whitespaces                                                                               
(show-ws-toggle-show-trailing-whitespace)

Además podemos configurar una combinación de teclas para eliminar los trailing whitespaces:

(global-set-key (kbd "C-c x") 'whitespace-cleanup)

Herramientas del día a día

Durante mi jornada de trabajo de programador, uso varias herramientas, algunas las uso desde hace mucho otras no tanto, por ejemplo, para abrir y editar archivos uso emacs, que todavía no lo sé manejar como quisiera, pero es altamente poderoso.
Otra cosa que uso es screen para multiplexar sesiones de bash en una misma terminal.
Además de estas dos cosas uso mucho git, y en particular estoy aprendiendo a usar Magit que es un modo de emacs para git.
Acá dejo unos links útiles más que nada para tenerlos para mí, todos en un sólo lugar.

Emacs card reference:

http://www.gnu.org/software/emacs/refcards/pdf/refcard.pdf

Screen:

http://aperiodic.net/screen/quick_reference

Magit:

http://magit.github.io/documentation.html

Guard:

https://github.com/guard/guard

Macros copadas de emacs para ruby

Hoy aprendí algo re copado, definir macros con Emacs, me pregunto por qué no aprendí esta herramienta increiblemente útil, antes!

Stallman y la Iglesia de Emacs

Es muy sencillo definir una macro, tenés que hacer esto:

C-x (

Luego tipear todo lo que necesitemos que haga la macro
y para terminar:

C-x )

Después podemos nombrar la macro con:

M-x name-last-kbd-macro

esto nos permite llamar nuestra macro directamente haciendo:

M-x el-nombre-de-tu-macro

Además podés guardar las macro para que sean persistentes entre
sesión y sesión y esto lo podés hacer por ej, abriendo tu archivo
.emacs y ejecutando:

M-x insert-kbd-macro

Acá les dejo una serie de macro útiles para ruby,
donde además le seteo una combinación de teclas que paso a detallar:

C-c d   -> inserta un debugger
C-c D   -> Borra todas las ocurrencias de debugger
C-c r m -> inserta un bloque map
C-c r e -> inserta un bloque each
C-c r q -> inserta un bloque para una app Cuba, sí cuba! :)

Copien esto dentro de su .emacs

;; Macros copadas para ruby
(fset 'ruby-insert-debugger
   "require 'debugger' ; debugger")

(global-set-key (kbd "C-c d") 'ruby-insert-debugger)

(fset 'ruby-remove-debugger
   [escape ?x ?r ?e ?p ?l tab ?s tab tab return ?r ?e ?q ?u ?i ?r ?e ?  ?\' ?d ?e ?u backspace ?b ?u ?g ?g ?e ?r ?\' ?  ?\; ?  ?d ?e ?u backspace ?b ?u ?g ?g ?e ?r return return])
(global-set-key (kbd "C-c D") 'ruby-remove-debugger)


(fset 'ruby-insert-map
   "map{|| }")
(global-set-key (kbd "C-c r m") 'ruby-insert-map)

(fset 'ruby-insert-each
   "each{|| }")
(global-set-key (kbd "C-c r e") 'ruby-insert-each)

(fset 'ruby-insert-class
   [?c ?l ?a ?s ?s return return ?e ?n ?d up up right right ? ])

(global-set-key (kbd "C-c r c") 'ruby-insert-class)

(fset 'ruby-insert-test
   [?t ?e ?s ?t ?  ?\' ?\' ?  ?d ?o ?  return return ?e ?n ?d up up right right right])
(global-set-key (kbd "C-c r t") 'ruby-insert-test)

(fset 'ruby-insert-cuba-app
   [?\C-c ?r ?c ?< ?  ?C ?u ?a backspace ?b ?a return return ?  
   ?  ?d ?e ?f ?i ?n ?e ?  ?d ?o return return ?  ?  
   ?e ?n ?d up up up up right])

(global-set-key (kbd "C-c r q") 'ruby-insert-test)

No sé si los dije, pero soy fanático de hacer todo con el teclado,
casi no uso el mouse.

Learn by doing with emacs

Continúo con el tutorial práctico de Emacs, hoy aprendí las teclas básicas para mover el cursos através del texto, les dejo un pequeño resúmen:

	C-f	Move forward a character
	C-b	Move backward a character

	M-f	Move forward a word
	M-b	Move backward a word

	C-n	Move to next line
	C-p	Move to previous line

	C-a	Move to beginning of line
	C-e	Move to end of line

	M-a	Move back to beginning of sentence
	M-e	Move forward to end of sentence


Ahora a practicar!

Learn by doing with emacs

Hoy empecé a hacer el tutorial de emacs (estoy usando emacs24) que viene “de fábrica”, Learn by doing.
Aprendí cosas básicas que no sabía (muy mal lo mío), por ejemplo, como moverme en la pantalla:

C-v moverme hacia adelante un pantalla
M-v moverme hacia atrás una pantalla

Y algo que me gustó mucho es esto, apretando

C-l

hacemos que la pantalla se redibuje y deje en el centro
el texto que tenemos dónde está el cursor, genial!

Otra cositas para moverme por el texto:

			  Previous line, C-p
				  :
				  :
   Backward, C-b .... Current cursor position .... Forward, C-f
				  :
				  :
			    Next line, C-n

Estas combinaciones de teclas no son caprichosas y uno de los objetivos que
tiene es que mantengamos las manos en la posición standard.
Para arrancar el tutorial presionar las teclas C-h t dentro del editor emacs.

Resaltar paréntesis en emacs

Emacs tip: Posicionando el cursor en un paréntesis resalta cual es el otro paréntesis que lo abre o lo cierra, para lograr esto necesitamos agregar esto al .emacs:

(show-paren-mode t)

También funciona con llaves y corchetes.

Saludos.

 

 

 

Emacs autocomplete con tab

Hace unos días vengo tocando mi configuración de emacs y sacando las cosas que ya usaba, la cuestión es que de alguna forma eliminé
algo que usaba mucho sin darme cuenta, se trata del autocomplete cuando apretás tab, que básicamete busca en los files abiertos para realizar el autocompletado, buscando un poco en la web econtré esto:

(global-set-key [(tab)] 'smart-tab)
(defun smart-tab ()
  "This smart tab is minibuffer compliant: it acts as usual in
    the minibuffer. Else, if mark is active, indents region. Else if
    point is at the end of a symbol, expands it. Else indents the
    current line."
  (interactive)
  (if (minibufferp)
      (unless (minibuffer-complete)
        (dabbrev-expand nil))
    (if mark-active
        (indent-region (region-beginning)
                       (region-end))
      (if (looking-at "\\_>")
          (dabbrev-expand nil)
        (indent-for-tab-command)))))

así que agregamos esa función a nuestro ~/.emacs y listo, podemos disfrutar del autocomplete.
La función la saqué de uno de los comentarios de este artículo:
http://emacsblog.org/2007/03/12/tab-completion-everywhere/

Emacs22 + emacs-rails

Acabo de actualizar a emacs22, junto con la última versión de emacs-rails. Emacs22 viene con varias novedades, entre ellas soporte completo para unicode, acá hay un muy buen artículo con las nuevas carácterísticas.

Para los debianistas:
 apt-get install emacs22

luego nos vajamos el emacs-rails

  wget -c http://files.rubyforge.mmmultiworks.com/emacs-rails/emacs-rails-0.5.99.5.tar.gz

o lo bajamos a mano desde acá http://rubyforge.org/frs/?group_id=1484&release_id=11880

Luego lo colocamos en el folder ~/.emacs.d/site-lisp/emacs-rails/ y listo (ante cualquier duda leer http://dima-exe.ru/rails-on-emacs , yo no tuve problemas por que ya tenía la vieja versión instalada).

Hace casi un año que estoy usando emacs y no deja de sorprenderme, me encanta eso que “podés hacer todo con las telcas”, además también se puede utilizar sin un entorno gráfico (y va a ser exactamente igual sólo que en modo texto), Pruébenlo!. Para finalizar les dejo un screenshot para que vean como quedó, la verdad muy bueno.

emacs22-screenshot