lisp, software libre

Stumpwm: lisp en el gestor de ventanas

Stumpwm es un gestor de ventanas atilado escrito en common lisp. Esto le hace ser considerablemente más rápido que utilizar gnome, unity o kde. Si lo que sueles hacer la mayor parte de tu tiempo es usar un editor de textos, un navegador y alguna otra aplicación se hace realmente productivo.

Pero empecemos por la instalación en debian/ubuntu basta con:

apt-get install stumpwm

Pero después es necesario crear el fichero /usr/share/xsessions/stumpwm.desktop con el siguiente contenido:

[Desktop Entry]
Encoding=UTF-8
Name=StumpWM
Comment=Tiling Window Manager
Exec=/usr/bin/stumpwm
Icon=
Type=Application

Una vez hecho esto deberíamos poder elegir stumpwm, por ejemplo, en el gdm. Al arrancar stumpwm vemos una pequeña ventana que nos invita a ejecutar C-t ? para conocer los atajos.

Los importantes para empezar son:

  • C-t c: abrir una consola
  • C-t e: abrir el emacs
  • C-t !: ejecutar un comando de consolar
  • C-t C-t: volver a la ventana anterior
  • C-t w: listar las ventanas abiertas
  • C-t 0: ir a la ventana número 0 (con otros números iremos a ventanas distintas)

Para evaluar código lisp se usa C-t :. Así, podemos evaluar:

  • (+ 2 2): evalúa una suma de dos más dos
  • (loadrc): evalúa el fichero .stumpwmrc
  • (quit): sale de la sesión

Mi .stumpwmrc es realmente simple, ya que llevo muy poco tiempo utilizando este entorno, pero puede ser útil para otros principiantes como yo:

(in-package :stumpwm)

(setf *default-package* :stumpwm)

;; Cambio el prefijo C-t por C-z
(set-prefix-key (kbd "C-z"))

;; Creo el comando iceweasel
(defcommand iceweasel () ()
  "Start/Switch to Iceweasel."
  (run-or-raise "iceweasel" '(:class "Iceweasel")))

;; Ahora con C-z C-i iré al iceweasel
(stumpwm:define-key stumpwm:*root-map* (stumpwm:kbd "C-i") "iceweasel")

;; Creo el comando wikipedia
(defcommand wikipedia (search)
  ((:string "Search in Wikipedia for: "))
  "docstring"
  (check-type search string)
  (substitute #\+ #\Space search)
  (run-or-raise 
     (concat "iceweasel http://www.wikipedia.org/wiki/" search) 
     '(:class "Wikipedia")))

;; Arranca el network-manager al iniciar (para conectar vía wifi)
(run-shell-command "nm-applet --sm-disable")

Las cosas que he encontrado útiles de stumpwm son:

  • tener atajos para ir directamente al emacs, ó al navegador independientemente de cuantas ventanas tengo abiertas, no como con Alt+TAB que le tienes que dar unas cuantas veces
  • tener el fichero de configuración en lisp
  • su rapidez, especialmente vital en máquinas lentas

¿A vosotras/os que os parece?

Estándar
emacs, lisp, software libre

Gmail desde Emacs Gnus

Recientemente he configurado mi emacs para poder leer el correo de gmail. Básicamente es lo que viene en http://www.emacswiki.org/emacs/GnusGmail. Pero en este artículo trataré de explicarlo paso a paso y en castellano.

Gnus viene instalado con emacs, que en ubuntu 11.04 se instala de la siguiente forma:
sudo apt-get install emacs23

La configuración del .emacs para descargar correo es

;; GNUS ;;

(setq gnus-select-method '(nnimap "gmail"
(nnimap-address "imap.gmail.com")
(nnimap-server-port 993)
(nnimap-stream ssl)))

(add-hook 'gnus-group-mode-hook 'gnus-topic-mode)

;; Threads are nice!
(setq gnus-summary-thread-gathering-function
'gnus-gather-threads-by-subject)

Aparte en .authinfo es necesario meter la siguiente línea:
machine imap.gmail.com login correo@gmail.com password mipassword port 993

Ahora ya deberíamos poder descargar correo en emacs con M-x gnus. Lo primero que deberemos hacer es suscribirnos a algún grupo con la letra U. Una vez suscrito pulsamos enter en el grupo y ya podemos acceder.

Lo siguiente es poder enviar correo si usamos el smtp de gmail nuestros correos quedarán almacenados en el servidor automáticamente. La configuración es la siguiente:


;; SMTP ;;

(setq message-send-mail-function 'smtpmail-send-it
smtpmail-starttls-credentials '(("smtp.gmail.com" 587 nil nil))
smtpmail-auth-credentials '(("smtp.gmail.com" 587 "correo@gmail.com" nil))
smtpmail-default-smtp-server "smtp.gmail.com"
smtpmail-smtp-server "smtp.gmail.com"
smtpmail-smtp-service 587
smtpmail-local-domain "ubuntu")

(setq user-full-name "David Arroyo Menéndez")
(setq user-mail-address "correo@gmail.com")

No obstante, primero deberemos instalar starttls, en debian/ubuntu apt-get install gnutls-bin

Otra funcionalidad que considero vital es que autocomplete la dirección de correo electrónico. Para ello es necesario 2 modos de emacs: bbdb + google-contacts y algo de software python + gdata. En debian/ubuntu podemos hacer apt-get install python-gdata bbdb y ya solo nos faltará descargar y descomprimir en tu directorio emacs el proyecto googlecontacts.

Mi configuración en el .emacs de bbdb y google-contacts es la siguiente:


;;;; BBDB ;;;;

(setq bbdb-default-country "Spain"
bbdb-north-american-phone-numbers-p nil
bbdb-default-area-code "91"
bbdb-quiet-about-name-mismatches t
bbdb-file "~/.bbdb")

(require 'bbdb)
(bbdb-initialize)
(add-hook 'gnus-startup-hook 'bbdb-insinuate-gnus)
(add-hook 'gnus-startup-hook 'bbdb-insinuate-message)
(add-hook 'message-setup-hook 'bbdb-define-all-aliases)

;;;; Google Contacts ;;;;

(setq load-path (append load-path (list (expand-file-name "~/emacs/google"))))
(require 'google-contacts)

(setq google-contacts-user "davidam") ;;; GOOGLE USER
(setq google-contacts-code-directory "~/emacs/google/code") ;;; PATH TO THE PYTHON CODE
(setq google-contacts-directory "/tmp") ;;; TEMPORARY DIRECTORY
(setq google-contacts-auto-update t ) ;;; DEFINE IF THE CONTACTS ARE DOWNLOADED AFTER EVERY MODIFICATION

Y así automáticamente podemos autocompletar con TAB al escribir un correo desde GNUS.

Actualización (29/09/2011): Al hilo de este artículo he publicado cómo utilizar Múltiples cuentas de smtp en GNUS con msmtp

Actualización (21/10/2011): Otro artículo relacionado: Gnus + Gmail + Offlineimap y así poder leer correo de gmail en gnus también cuando se está desconectado.

Estándar