Archivo de la etiqueta: emacs

Lo que he aprendido: expresiones regulares en Emacs

Hablé hace tiempo de las expresiones regulares por aquí (de hecho fue lo que inauguró la sección Lo que he aprendido) pero todavía no me había puesto a usarlas en serio en Emacs para buscar y reemplazar cosas. Algún día tiene que ser el día, así que voy a ver si puedo resumir aquí para futura referencia la sintaxis de las expresiones regulares de Emacs, cómo se usan para buscar y qué ventajas nos ofrecen a la hora de reemplazar texto.

Sintaxis

La sintaxis de las expresiones regulares de Emacs tiene muchas cosas en común con las de otros programas y lenguajes de programación pero también tiene sus peculiaridades. Con C-h S regexp podemos ver toda la información sobre las regexp de Emacs, como soy muy maja os resumo aquí algunas cosas:

  • Los símbolos ., +, *, ? y [] funcionan de la manera típica:
    • . sustituye a cualquier carácter excepto al de nueva línea. Por ejemplo, a.b pillará cualquier secuencia de tres caracteres que empiece por a y acabe con b.
    • * localiza el carácter precedente cualquier número de veces, incluido cero. Por ejemplo, ca* captará caaaa pero también c.
    • + lo mismo que el anterior pero obligando a que el carácter precedente aparezca como mínimo una vez. Al contrario que ca*, ca+ no captará c. Para no confundirlo con el anterior a este le llamo el uno o más.
    • ? similar a * pero solo capta el carácter precedente una vez o cero. Siguiendo con el ejemplo, ca? captará c y ca? pero no caaa. Yo a este le llamo el si hay sí.
    • [] indica opciones. Por ejemplo, [ac]a encontrará las cadenas aa y ca. Su contrario es [^] que elimina las opciones entre corchetes, de este modo, [^ac]a encontrará ba pero no ca.
  • En Emacs hay clases sintácticas que empiezan por \s y su negación por \S. Por ejemplo, \sw indica un carácter de palabra (letras en minúscula o mayúscula y dígitos) y \s. un carácter de puntuación. A diferencia de otros programas, Emacs no interpreta \s como un espacio, para eso está \s-.
  • También tenemos clases sintácticas que se usan entre corchetes (adicionales a los que ya llevan) como [:digit:] para los números y [:alnum:] para los caracteres alfanuméricos. Una cosa a tener en cuenta es que estas clases varían según el modo.

  • Hay marcadores de borde, por ejemplo, \b indica el borde de palabra, y ^ y $ el inicio y el fin de línea respectivamente.

  • Podemos capturar grupos con \(CAPTURA\) para después hacer referencia a ellos con \N, donde N es un número que indica su posición. Por ejemplo, si hacemos \([[:digit:]]+\) capturaremos en la variable \1 una tira de números seguidos.

Seguir leyendo →

Anuncios

Lo que he aprendido: ver pdfs en Emacs

¡Hola! Últimamente no escribo tan a menudo porque el capitalismo me ha vuelto a atrapar en sus redes. Que he empezado a currelar, vaya. Y entre la mudanza, el nuevo trabajo, que salí despedida de un buseto y demás cosas locas que pueblan mi vida no doy para más.

Lo que os vengo a contar hoy es algo que he descubierto haciendo una presentación sobre mí misma que me han pedido en el trabajo. Aprovechando que tenía mi ordenador la he escrito en Markdown en Emacs y luego la he convertido en un pdf con Pandoc. Mi típico proceso del que he hablado en cantidad de ocasiones. Como llamo a Pandoc desde la terminal en Emacs (un día lo integraré) me ha venido la cosa de abrir también el pdf final en Emacs ¡y no salir de Emacs nunca jamás! JUAJUAJUA. Bueno, me centro.

El modo DocView

La cuestión es que Emacs ya es capaz de ver pdfs (es megalisto), gracias al modo DocView, que permite abrir documentos DVIs, PostScript, OpenDocument y hasta de Microsoft Office. Para ello los convierte en imágenes que carga y muestra.

Sigue leyendo

Lo que he aprendido: selección rectangular en Emacs

La selección rectangular es una de las cosas por las que amo Emacs, una vez que la pruebas ya no puedes vivir sin ella. ¿En que consiste esa cosa tan espectacular? me diréis. Veámoslo con un ejemplo: imaginemos que tenemos esta tabla en un archivo de texto plano:

A    24
B    24
C    45
D    78
E    13

De repente nos damos cuenta de que hemos metido dos veces el dato para A y que tenemos todos los números una fila más abajo de lo que corresponde. Argh. Sería guay poder seleccionar los datos correspondientes a la columna y situarlos en la posición correcta, ¿no? ¡Pues con Emacs podemos gracias a la selección rectangular!

Sigue leyendo

Lo que he aprendido: compilar Emacs desde fuente

¡Saludos damas y caballeros! Vuelvo después de mis merecidas vacaciones con el frikismo recargado. Digo esto porque estuve de visita en casa de un amigo que compiló Emacs 25 desde fuente delante de mí y ha provocado que tenga envidia y quiera compilar yo también. Y eso os vengo a contar, mi experiencia creando Emacs desde sus piezas más elementales desde mi punto de vista de ignorante de la informática.

¿Compilar?

No es mi primera vez compilando, es concretamente la segunda. La primera fue con pdfpc que compilé tanto en Windows como en GNU/Linux invocando a cmake para que crease las instrucciones, luego a make para que compilase y finalmente a make install para que me instalase el programa en las carpetas correctas.

Compilar Emacs es similar solo que en lugar de llamar a cmake usamos el script configure, un script estándar para los programas de GNU que verifica que el sistema cumple las condiciones para compilar el programa en cuestión y crea las instrucciones para make.

Que los programas de GNU se compilen siempre de la misma manera es debido al conjunto de herramientas GNU Build System o Autotools, que ayudan a crear paquetes de código portables para que los programadores se centren en la funcionalidad de sus programas y que los usuarios solo tengan que aprender el método para compilar una única vez.

He resumido lo que he entendido de este proceso en un dibujillo, para que luego sepamos más o menos dónde estamos:

¡A compilar Emacs!

Después de esta pequeña introducción vamos a ensuciarnos las manoplas. Los pasos que seguiremos son:

  1. Descargaremos el código fuente
  2. Si hemos clonado de un repo ejecutaremos autogen.sh para obtener el script configure
  3. Ejecutaremos configure con las opciones que queramos
  4. Llamaremos a make que nos fabricará Emacs
  5. Si queremos instalar Emacs en las carpetas de instalación haremos make install

Veamos cuál ha sido mi experiencia con sus problemas y soluciones.

Descargar el código fuente

Evidentemente, lo primero que necesitamos para compilar desde fuente es el código fuente. Para conseguirlo tenemos dos opciones:

  • Descargar la release desde la web a mano, con wget o como nos parezca. En este caso empezamos directamente con el script configure, siguiendo las instrucciones del archivo INSTALL.
  • Clonar desde el repositorio de GitHub o Savannah. Obedeceremos a INSTALL.REPO que nos manda ejecutar autogen.sh para que aparezca el famoso configure.

El script autogen.sh

Como yo siempre sigo el camino más difícil, cloné el repo de GitHub y por lo tanto tuve que invocar primero a autogen.sh. Para ello necesité primero instalar Autoconf, una de las herramientas que conforman el GNU Build System y que se encarga de crear el script configure a partir del archivo configure.ac. Como suele ser habitual, hice:

sudo apt-get install autoconf

En el caso de que descarguemos la release no tenemos que fabricar el script configure sino que ya viene incluido.

El script configure

Ahora nos toca ejecutar configure para que nos verifique si tenemos todas las librerías necesarias instaladas y genere finalmente el Makefile si es así. También podemos pasarle diferentes opciones para controlar el proceso, con --help vemos cuáles hay.

Por ejemplo, yo utilicé --prefix para elegir el destino en el que quería que se instalase Emacs. No quería que lo instalase en el directorio por defecto /usr/local/ porque solo estaba haciendo unas pruebas:

ondiz@slimbook:~/Testing/emacs$ ./configure --prefix=/home/ondiz/Testing/

Nos irá diciendo qué dependencias tenemos que resolver y la opciones que debemos darle si no queremos usarlas con un mensaje de este estilo:

configure: error: The following required libraries were not found:
libXpm libjpeg libgif/libungif libtiff gnutls
Maybe some development libraries/packages are missing?
If you don't want to link with them give
--with-xpm=no --with-jpeg=no --with-gif=no --with-tiff=no --with-gnutls=no
as options to configure

Sigue leyendo

Lo que he aprendido: variables locales en Emacs

Pasando a limpio mis apuntes de italiano, me he puesto a investigar cómo establecer el idioma para la revisión ortográfica de un documento porque me da mucha rabia tener que cambiarlo cada vez que lo abro. Gracias a estas pesquisas he descubierto algo interesante: las variables locales de Emacs.

Seguir leyendo →

Lo que he aprendido: escribir en WordPress desde Emacs

Por fin, gentes mías, por fin puedo escribir los posts de este blog desde Emacs. Todo ello ha sido por la envidia hacia mi señor hermano que escribe en su blog desde su amado NeoVim. Yo no soy tan ultra friki profesional como él y no me he escrito mi propio cacharro de escribir, sino que he usado un modo ya existente: el modo Weblogger

Ya que estaba, también aproveché para cambiar de tener un archivo de configuración .emacs a una carpeta de configuración .emacs.d/ en la que metí el antiguo archivo de configuración renombrado como init.el y creé una carpeta extras/ que añadí al load path y en la que metí los modos que me he ido descargando.

Centrándonos ya en weblogger, solo tenemos que descargarlo junto con xml-rpc y cargarlo, bien desde el propio Emacs con:

M-x load-file RET ubicación

o desde el archivo de configuración (si está en el load path), añadiendo:

(require 'weblogger)

Podemos configurar para siempre las opciones haciendo:

M-x customize-group RET weblogger RET

Que nos escribirá las líneas correspondientes en el archivo de configuración de Emacs. Una cosa a tener en cuenta es la URL que hay que añadir, en mi caso, como escribo en un blog de WordPress tuve que poner la dirección del blog seguido de xmlrpc.php, pero esto varía según qué tipo de blog utilicemos:

https://ondahostil.wordpress.com/xmlrpc.php

Para empezar una nueva entrada hacemos:

M-x weblogger-start-entry

Si no hemos configurado nada nos pedirá una dirección, un usuario y una contraseña en ese momento.

A continuación, veremos algo con esta pinta:

Subject:
Keywords:
Date: 13 feb 2017 19:15:41 +0100
Newsgroup: Onda Hostil
--text follows this line--

Donde podemos escribir alegremente.

Para gestionar las entradas tenemos los siguientes comandos:

  • C-x C-s (weblogger-publish-entry) para publicar la entrada
  • C-c C-c (weblogger-send-entry) para guardar como borrador
  • C-c C-n (weblogger-next-entry) para subir la entrada sin publicarla y pasar a la siguiente
  • C-c C-p (weblogger-prev-entry) para subir la entrada sin publicarla y pasar a la anterior
  • C-c C-k (weblogger-delete-entry) para borrar la entrada

Una cosa curiosa es que trata a las entradas como si fueran emails y las ordena según la fecha, independientemente de que sean entradas publicadas, programas o borradores.

De momento ando jugando un poco con él, me deja publicar, crear borradores y acceder a las entradas que he escrito en el propio WordPress, me queda averiguar cómo se establecen las categorías y hacer que las etiquetas funcionen bien. Hasta me deja escribir en Markdown.

PD. Sí, sé que existe un modo que permite publicar desde org-mode pero no sé si tengo ganas de aprender org ahora mismo 😀

Referencias

Weblogger Mode en GitHub

Weblogger mode en Emacs Wiki

Caution: Blog Ahead por M I X Y vía Attribution Engine. Licencia CC BY-NC-SA.

Lo que he aprendido: configurando Aspell para Emacs

En su momento configuré el corrector ortográfico de Emacs en Windows. Primero lo intenté con Aspell y luego me pasé a Hunspell que tenía también corrector de euskera. Ahora he hecho la misma operación en GNU/Linux, esta vez con Aspell que era lo que tenía instalado.

El proceso tiene dos partes: instalar diccionarios y configurar Emacs. Os cuento ambas.

Instalar diccionarios

Dando por hecho que tenemos Aspell instalado, podemos mirar qué diccionarios hay disponibles con:

aspell dump dicts

Si el que nos hace falta no aparece en la lista lo podemos instalar directamente de los repositorios (si está) o descargarlo e instalarlo a mano.

Instalación desde los repositorios

Como no tenía ni idea de cómo se llamaba el paquete de español de Aspell, busqué directamente. Me salió lo siguiente:

ondiz@slimbook101:~$ apt-cache search aspell español
aspell-es - Diccionario de español para Aspell de GNU
aspell-gl-minimos - Diccionario de gallego (minimos) para aspell

Habría que instalar por lo tanto aspell-es.

Instalación manual

Si el diccionario que necesitamos no está en los repositorios, podemos comprobar si está en la lista de diccionarios disponibles para Aspell e instalarlo a mano. Buscamos el que queramos, lo descargamos y lo descomprimimos. Ocurre una cosa curiosa, el diccionario de euskera no está en esa página pero sí está en los repositorios, es concretamente aspell-eu-es.

En el README están claras las instrucciones, básicamente lo que tenemos que hacer es ejecutar el archivo de configuración en la carpeta y luego instalar el diccionario en sí. Es decir:

ondiz@slimbook101 ~/aspell6-es-1.9a-1/$ ./configure

Finding Dictionary file location ... /usr/local/lib/aspell
Finding Data file location ... /usr/local/share/aspell

Y a continuación:

make # montar el paquete
make install # instalar el paquete (necesité sudo)
make clean # hacer limpieza

Si todo ha ido bien deberíamos tener en /usr/lib/aspell/ el diccionario de español.

Configurar Emacs

Lo primero que tenemos que hacer es decirle a Emacs que el corrector ortográfico que queremos usar es Aspell. Para ello añadimos la siguiente línea al archivo de configuración:

(setq-default ispell-program-name "aspell")

Para probar si nos funcionan los diccionarios que hemos instalado, hacemos M-x ispell-change-dictionary y elegimos el diccionario que queramos. Cuando activemos el corrector, por ejemplo con M-x flyspell-mode debería marcarnos las palabras que están mal 🙂

Por último, si queremos establecer un diccionario por defecto, podemos añadir esta línea al archivo de configuración, con el idioma correspondiente:

(setq ispell-dictionary "castellano")

Para establecer el de español también podríamos haber puesto spanish o espanol, ya que los tres son alias del mismo diccionario.

Espero que os resulte útil, yo me he venido arriba y casi se me olvida comer1.

Más

Quijote Libre también habló de esto en Corregir ortografía en GNU Emacs.

Imagen via Mediachain Attribution Engine. Licencia CC0 (Dominio público).

  1. Igual también tiene que ver que estaba escuchando esto