Bad Daemons

Introducción a Helm

Helm es un paquete cuya descripción tiene cojones. Yo no soy capaz de traducirlo literalmente. Lo más cercano que puedo decir es que helm es un framework de completado y reducción de selección. Ole. Otra descripción que parece medio humana: Helm es un frontend para otras funciones que modifica su uso e incluso une varias. Técnicamente, los paquetes de helm pueden ser usados por otros frameworks cómo avy o ido, siempre que o unos o otros se adapten.

Cómo es complicado explicar mejor qué es, pondré algún gif en este articulo para que sea más fácil de entender.

Instalación y configuración

Empecemos por el principio. Para instalarlo, M-x package-install RET helm RET. La configuración que yo uso es la siguiente:

Helm

Copiado del git de helm. Esta es una configuración bastante mínima. Más información por aquí. Ahora mismo no está activo en mi configuración.

(require 'helm)
(require 'helm-config)

(global-set-key (kbd "C-c h") 'helm-command-prefix)
(global-unset-key (kbd "C-x c"))

(define-key helm-map (kbd "<tab>") 'helm-execute-persistent-action)
(define-key helm-map (kbd "C-i") 'helm-execute-persistent-action)
(define-key helm-map (kbd "C-z")  'helm-select-action)

(global-set-key (kbd "M-y") 'helm-show-kill-ring)
(global-set-key (kbd "C-x b") 'helm-mini)
(global-set-key (kbd "C-x C-f") 'helm-find-files)
(global-set-key (kbd "M-x") 'helm-M-x)

(helm-mode 1)

(require 'helm-descbinds)
(helm-descbinds-mode)
Buscar más eficazmente en Helm

Más información en este articulo. Desactivado actualmente.

(global-ace-isearch-mode +1)
(custom-set-variables
 '(ace-isearch-input-length 7)
 '(ace-isearch-jump-delay 0.25)
 '(ace-isearch-function 'avy-goto-char)
 '(ace-isearch-use-jump 'printing-char))

Cómo coño se usa

Y podréis pensar: "Pos muy bien, instalado y configurado. Ahora lo jodido, cómo se usa?". A lo que yo respondo que del mismo modo que usabáis emacs antes. Al menos en lo que a combinaciones de teclas (y uso básico) se refiere. Desgranaré partes de la configuración anterior y mostraré cómo se ve en la práctica, que al final es lo importante. Básicamente comentaré los keybindings, que cómo algún alma audaz habrá visto, son combinaciones que ya se usan de antes.

A continuación saldrań un buen número de gifs para mostrar lo comentado anteriormente. El formato vendrá a ser Combinación de teclas | Función ejecutada. Debajo de todo eso, una explicación de por que la función que sustituye a la que viene por defecto mola más. Espero que sea útil. Una última cosa, os fijaréis en que la primera y la segunda imagen se parecen mucho y difieren bastante de lo que tenéis. Esto es debido a que en ambas imágenes está ya instalado helm. La diferencia es que en las primeras se usa un simple wrapper que apenas añade funcionalidad y en las segundas se usa las propias. De ahí a que haya que rebindear las funciones tal cómo sale en la configuración.

m-x-pordefecto.gif

Figura 1: M-x

helm-m-x.gif

Figura 2: M-x | helm-M-x

Por que mola más?: No tienes por que saber cómo se llama exactamente la función que quieres ejecutar. En el ejemplo, se escribe M-x list packag y se puede ver todo lo que tenga que ver con la instalación de paquetes. Además, si la función tiene alguna combinación de teclas para ejecutarla la muestra al lado. Acepta expresiones regulares.

yank-pordefecto.gif

Figura 3: M-y | toggle-kill-ring

helm-show-kill-ring.gif

Figura 4: M-y | helm-show-kill-ring

Por que mola más?: Por defecto, M-y no hace nada más que rotar las marcas del kill-ring. En cambio, con esta función de helm, no sólo rotará sinó que nos mostrará las opciones que hay. Acepta expresiones regulares para buscar.

helm-mode-switch-buffer.gif

Figura 5: C-x b | helm-mode-switch-to-buffer

helm-mini.gif

Figura 6: C-x b | helm-mini

Por que mola más?: No sólo muestra los buffers que hay abiertos, sinó que también muestra los buffers que han sido abiertos recientemente (tirando de recentf) y crear buffers nuevos.

find-files.gif

Figura 7: C-x C-f | Find-Files

Por que mola más?: Varios motivos cuya cabida escapan al articulo de hoy, saldrán más adelante. Pero un ejemplo es que integra la función ffap, cuyo nombre tan sugestivo significa Find File At Point, que viene a ser abrir un archivo al situarse en una ruta escrita en el buffer, cómo se ve en el ejemplo. Sólo sale una imagen que es la de Find-Files, ya que es muy similar a la función que trae por defecto emacs, excepto las mencionadas funciones extra.

Y con esto ya se ha visto lo básico. Ahora a usarlo.

Fuente principal

La sección pertinente en mi configuración.