Archivo

Archive for the ‘lisp’ Category

Stumpwm: lisp en el gestor de ventanas

12/10/2011 2 comentarios

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?

Categorías:lisp, software libre

Gmail desde Emacs Gnus

31/07/2011 7 comentarios

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.

Categorías:emacs, lisp, software libre
Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.