Prettify-symbols-mode

Desde la versión 24.4 de emacs se incluye un nuevo modo llamado prettify-symbols-mode, el cuál esta planeado para remplazar la representación de varios identificadores/símbolos usados en los lenguajes de programación por caracteres más estéticos.

Por ejemplo, en el modo lisp (emacs-lisp también), al escribir la palabra reservada lambda, visualmente se transforma en el símbolo λ, pero que en el texto se sigue conservando la palabra escrita.

Esto permite que escribir en diversos lenguajes tenga una notación un poco más “matemática” y visualmente más estética respecto a escribirlo en otros editores.

Para activar esta características, por ejemplo, en el modo lisp hay que sobreescribir la variable lisp--prettify-symbols-alist de la siguiente forma:

(defconst lisp--prettify-symbols-alist
  '(("lambda"  . ?λ)))

Esto significa que la palabra lambda va a ser remplazada por el simbolo λ. Pero también se puede agregar más remplazos para otros modos:

(add-hook clojure-mode-hook
            (lambda ()
              (push '(">=" . ?≥) prettify-symbols-alist)))

En caso de que queramos activar por defecto prettify-symbols en la mayoría de los modos por defecto de emacs, agregamos la siguiente linea a nuestra configuración de emacs:

(global-prettify-symbols-mode +1)

Instalando Emacs

Después de durante esta semana no pudiera trabajar habitualmente con mi laptop y mis configuraciones, tuve que regresar a la computadora de escritorio, la cuál, tengo un poco abandonada en el sentido de que tengo actualizado el software que tiene instalado.

En los últimos meses he estado editando y configurando mis .el para emacs, en que si le agregó una nueva característica o le quito algo que ya no me gusta, o por cualquier cosa. Entonces, al tratar de usar la versión de emacs que tenía instalada en ese máquina, descubro que aún tenía la 24.3 y yo uso 24.5.4 😱.

Como esta es la última versión estable liberada, hay que compilarla e instalarla, desde cero. Entonces para facilitarme la vida y que en otros lugares necesite de esta versión de emacs, decidí escribir un pequeño script para instalarlo y automatizar el proceso, el cuál transcribo a continuación.

sudo apt-get install build-essential
sudo apt-get build-dep emacs24
cd /tmp
echo "Cambiando a /tmp"
wget http://mirror.cedia.org.ec/gnu/emacs/emacs-24.5.tar.gz
tar -xvzf emacs-24.5.tar.gz
cd emacs-24.5
./configure
make
sudo make install

Seguramente habrán algunas dependendcias que habrá que instalar a mano, pero ya son los menos1. El script anterior debería de ser suficiente para poder instalarlo y evitarnos de problemas2.

Footnotes:

1

Actualizaré el script cuando recuerde cuales fueron las dependencias que no tenía instaladas.

2

La idea es ir automatizando las tareas de instalación y configuración de un equipo para cuando sea necesario tener que cambiar de máquina, sea más fácil la transición.

Ejecución de consultas SQL en org-mode

Una de las cosas por la que me gusta usar org-mode es la posibilidad de usar código fuente de prácticamente cualquier lenguaje en él.

Particularmente hoy estuve haciendo unas pruebas sobre su uso con SQL y PostgreSQL. Para configurarlo hay que agregar las siguientes lineas a nuestro archivo .org:

:PROPERTIES:
:engine:   postgresql
:cmdline:  database -U user
:exports:  both
:END:

Y lo siguiente es probar que org puede realizar una conexión con la base de datos a simplemente realizando una consulta que va a depender de la estructura de la base de datos a la que queremos conectarnos. En mi caso, mi consulta de prueba sería la siguiente:

#+name my-query
#+begin_src sql
select nombre, fecha from public.videojuego limit 1;
# +end_src

La consulta se ejecuta tecleando C-c C-c y eso desplegará resultados como el que muestro a continuación:

| ┌────────┬────────────┐ |
|-------------------------|
| │ nombre │   fecha    │ |
| ├────────┼────────────┤ |
| │ Gears  │ 2015-04-16 │ |
| └────────┴────────────┘ |

Esta consulta la realicé a una de las bases de mis alumnos. Una vez entendido este pequeño ejemplo, lo utilizaré para explicar algunas cosas y manteniendo todas las herramientas que provee org-mode.

Notas de braveclojure

Bueno, creo que es hora de ir tomando nota de este pequeño tutorial que es presentado en la página Brave Clojure.

Me salte los capítulos 1 y 2, por lo que me fuí directamente con el tercero.

Using emacs with clojure.

Este capítulo se basa principalmente en mostrar la forma de conectarse a al repl de clojure vía cider-nrepl, así como una introducción a las herramientas que se pueden usar en emacs y sus atajos de teclado.

El capítulo está dividido en las siguientes subsecciones:

  • How to start a REPL process that’s connected to Emacs
  • How to work with Emacs windows
  • A cornucopia of useful key bindings
    • How to evaluate an expression
    • How to compile the file you’re editing
    • How to switch to the namespace of your current file
  • How to handle errors
  • Intro to Paredit

De las cosas más importantes de este capítulo se encuentran los atajos de teclado que utiliza, los que voy a separar de la siguiente forma:

How to start a REPL process that’s connected to Emacs

Atajo Descripción
M-x cider-jack-in Inicia un nuevo nrepl asociado a un archivo .clj
M-x nrepl-close Cierra el nrepl

How to work with Emacs windows

Atajo Descripción
C-x o Mueve el cursor al siguiente frame
C-x 1 Elimina los otros buffers excepto el actual
C-x 2 Divide el buffer en dos. Uno arriba y otro abajo
C-x 3 Divide el buffer en dos. Uno a la izquierda y otro a la derecha
C-x 0 Elimina el buffer actual
C-x b Intercambia entre buffers

A cornucopia of useful key bindings

Atajo Descripción
C-e Se mueve al final de la linea
C-x C-e Evalúa la expresión de Clojure
C-c M-n Establece el namespace actual al REPL
C-c C-k Compila el archivo actual
C-↑, C-↓ Historial del Cider
q Cierra el stack-trace de REPL en caso de error
M-x paredit-mode Establece el modo paredit
M-( Inserta un nuevo par de paréntesis
C-→ Mueve el parentesis al elemento siguiente
C-← Mueve el parentésis al elemento previo

Continuará…

Usando el chat de facebook en emacs.

Últimamente he comenzado a utilizar emacs para casi todo, entonces recordando que la conexión de los clientes para el chat de facebook es vía xmpp, busque un cliente xmpp para emacs.

Mi sorpresa es que existe Jabber, el cuál puede ser instalado desde Melpa.

Una vez instalado, hay que configurar la conexión hacia facebook de la siguiente forma:

;; define una lista de cuentas.
(setq jabber-account-list '(("account_name_or_id@chat.facebook.com"
                             (:network-server . "chat.facebook.com")
                             (:connection-type . starttls)
                             (:port . 5222)
                             (:password . "your_password"))))

;; deshabilita notificaciones de presencia de jabber.el
(remove-hook 'jabber-alert-presence-hooks
             'sr-jabber-alert-presence-func)

;; conecta todas mis cuentas de jabber.el al inicio.
(jabber-connect-all)

Ejemplo emacs-chat2.png

Con esto sería más que suficiente para conectarse a facebook vía emacs sin mayores complicaciones.

Para saber más sobre Jabber.