En ese artículo comentaba que utilizo las tablas de org-mode como si de hojas de cálculo se tratasen y la verdad es que dan bastante juego para editar, calcular e imprimirlas en nuestros documentos; o incluso para realizar gráficos desde ellas con gnuplot . Al poco de publicar aquel artículo, alguien me habló del modo SES que viene por defecto con nuestro querido Emacs.

La diferencia fundamental con el uso de las tablas de org-mode es que SES monta un buffer especial que se ordena en filas y columnas como lo hace una hoja de cálculo al uso... Pero no esperéis grandes cosas: lo de Simple que lleva en el nombre no es por falsa modestia. Es todo muy sencillo y muy básico. Voy a hacer un ejemplo, bastante similar al que viene en la documentación de SES pero luego lo destriparé un poco más para ver cómo funciona el formato.

Imaginemos que lo he utilizado para controlar algunos gastos de esta Semana Santa y me he hago una tabla como sigue:

Crear ─o visitar─ mediante C-x C-f un archivo que se va a llamar gastos.ses : hay que observar que la extensión .ses es importante para que Emacs entre en modo SES . Al hacerlo me encuentro un buffer casi vacío con una etiqueta A y una zona subrayada, con el cursor allí situado... nuestra hoja sólo tiene, de momento, una celda: la A1 . Si observamos la línea de estado, nos mostrará en qué celda está situado el cursor... ¡seguimos! Pulso " , las comillas dobles, y me pregunta por una cadena de texto. Escribo Concepto y de nuevo <RET> . Ahora en la celda A1 aparece el texto Concept , no nos cabe todo ello en una celda de 7 caracteres. Pulso <TAB> y vemos que aparece una etiqueta para la columna B . El cursor se sitúa en la celda B1 . De nuevo, para introducir una cadena pulso la tecla " y escribo Cantidad , cuando me lo pregunta. Como también me lo corta, vamos a dimensionar la columna pulsando w (width), y cuando pregunta le doy 10 de ancho. Me sitúo de nuevo en la columna A y la dimensiono, también con w a 25. Al pulsar <RET> en cualquiera de las celdas, nos muestra en el minibuffer su contenido y podemos editarlo. Bajo una línea con C-n , o la flecha abajo, y el cursor parece haberse salido de la tabla. Pulso C-o para insertar otra línea de celdas. El cursos se nos ha situado en la casilla A2 y podemos empezar a meter un concepto, como hemos hecho antes con las dos celdas anteriores. Por ejemplo, Refrescos en el bar. Pulso <TAB> y el cursos se sitúa en la celda B2 . Ahora voy a introducir un número y la cosa cambia: hay que pulsar = .

Bien ahora hay que repetir el proceso para crear todas las filas que necesite, hasta crear algo parecido a lo siguiente:

A B Concepto Cantidad Refrescos en el bar 7.25 Comida en restaurante 35.8 Combustible 52.15 ---------- ---------- Total __________

Bien, ya tenemos algunos valores en nuestra tabla: ¿Cómo los sumamos? Pues metiendo en la celda donde irá el total una expresión elisp que haga la suma: (+ B1 B2 B3) . Nos arroja un valor de 95.2 ... pero queremos cambiarle el formato, para que nos lo dé de manera más legible. Al pulsar M-p nos dice que el formato de columna es nil , así que introducimos "%.2f€" y el resultado será algo así:

A B Concepto Cantidad Refrescos en el bar 7.25€ Comida en restaurante 35.80€ Combustible 52.15€ ---------- ---------- Total 95.20€

Como se puede apreciar, con M-p se modifica el formato de toda la columna, si queremos cambiar sólo algunas de las celdas también lo podemos hacer pulsando p en cada una de las que queremos afectar.

Para el cálculo, también hubiéramos podido utilizar un rango de celdas que sumar. Lo haríamos mediante la fórmula (apply '+ (ses-range B2 B4 !)) . El símbolo ! hace que de la lista de celdas devueltas por ses-range , se eliminen las que estén vacías.

En general, para introducir contenidos en las celdas vemos que se pueden utilizar diversos caracteres:

«0..9» Pulsar sobre cualquier número hace que se ponga en modo ses-read-cell , utilizando un número. «-» Para introducir un número negativo. «.» Para introducir una fracción decimal. «"» Para introducir una cadena. «(» Para introducir una expresión o fórmula. <RET> Editar el contenido de la celda. C-c C-c Recalcular el contenido de la celda (o el rango marcado). C-c C-l Recalcular la hoja entera.

Otras teclas sirven para redimensionar la hoja:

C-o Insertar una fila. M-o Insertar una columna. C-k Eliminar una fila. M-k Eliminar una columna. <TAB> Se mueve a la siguiente columna, si hay una, o añade una columna si está el cursor en la última.

No voy a mostrar muchas más opciones que hay, porque la ayuda está suficientemente clara. Además se pueden utilizar otras muchas teclas y combinaciones de las habituales de Emacs.

También se pueden poner nombres a algunas celdas, para utilizarlos en fórmulas o como enlace para saltar a ellas. O cambiar la línea de cabecera, que normalmente muestra letras como nombres para las columnas.