Categoría: emacs

  • Conectandose al IRC con GNU Emacs y ERC.

    ⚠️ Actualización Octubre 2025:
    Freenode dejó de existir en 2021 tras un hostile takeover de la red (anuncio del staff original). La comunidad de software libre migró masivamente a Libera.Chat, una nueva red fundada por el staff original de Freenode. Este artículo ha sido actualizado para reflejar la configuración moderna.

    Redes IRC actuales para FLOSS:

    • Libera.Chat – Reemplazo oficial de Freenode para proyectos de software libre (anuncio oficial)
    • OFTC – Red oficial de Debian y otros proyectos

    Referencias sobre la migración:

    GNU Emacs viene de base con el paquete ERC para poder conectarnos al IRC.

    En este artículo publicamos como automatizar el proceso de conectarnos a las redes de Freenode Libera.Chat y OFTC, autenticación de nuestro nick con NickServ, y entrar en los canales que definamos.

    A su vez, para más seguridad, las claves van a ser encriptadas con GPG.

    Se asume que previamente:

    • Se ha configurado GPG en el sistema
    • Los usuarios han sido registrados en los respectivos NickServ de cada servidor de IRC

    1. Crear el fichero .authinfo

    machine irc.freenode.net login **** password ****
    
    machine irc.libera.chat login **** password ****
    machine irc.oftc.net login **** password ****
    

    Nota: omitimos los valores reales del nick y el password.

    2. Encriptar el fichero .authinfo

    Desde Emacs:

    M-x epa-encrypt-file
    

    Seleccionamos .authinfo

    Esto creará el fichero .authinfo.gpg

    Nota 1: El módulo que hace posible esto se llama EasyPG.
    Nota 2: A partir de ahora, podemos borrar .authinfo. Cada vez que Emacs abra el fichero .authinfo.gpg lo desencriptará automáticamente para poder editarlo y lo encriptará al guardar.

    3. Automatizar la conexión a los servidores de ERC

    📁 ¿Dónde poner esta configuración?

    Doom Emacs:
    Añade el código en ~/.doom.d/config.el
    Después ejecuta: doom sync y reinicia Emacs

    Spacemacs:
    Añade el código en ~/.spacemacs dentro de la función dotspacemacs/user-config

    Emacs Vanilla (sin distribución):
    Añade el código en ~/.emacs o ~/.emacs.d/init.el

    use-package (recomendado para configuración modular):
    Crea un archivo separado como ~/.emacs.d/lisp/setup-erc.el y cárgalo desde tu init.el con:
    (load "~/.emacs.d/lisp/setup-erc.el")

    Configuración Básica

    ;; Lectura de las claves encriptadas en .authinfo.gpg
    (setq auth-sources
          '((:source "~/.authinfo.gpg")))
    
    (setq erc-autojoin-timing 'ident)
    (setq erc-prompt-for-nickserv-password nil)
    

    Entrada automática a los canales de cada servidor IRC

    (setq erc-autojoin-channels-alist
          '(("freenode.net" "#emacs-es" "#debian" "#nethack"
             "libera.chat" "#emacs-es" "#debian" "#nethack" "#emacs" "#guix" "#lisp")
            ("oftc.net" "#debian-next" "#oftc" 
                        "#debian-mentors"      ; Para aspirantes Debian Maintainer
                        "#debian-devel"        ; Desarrollo general Debian
                        "#debian-multimedia"   ; Paquetes multimedia
                        "#debian-qa"           ; Quality Assurance
                        "#debian-es")))        ; Comunidad Debian española
    

    Identificación con cada servidor

    Cambiar el valor del nick apropiadamente en cada caso.

    (erc-tls :server "irc.freenode.net" :port 6697 :nick "****")
    (erc-tls :server "irc.libera.chat" :port 6697 :nick "****")
    (erc-tls :server "irc.oftc.net" :port 6697 :nick "****")
    

    4. Usar certificado personal con OFTC (alternativa a NickServ)

    📁 Ubicación del certificado:
    Los archivos keyfile y certfile generalmente se guardan en:
    ~/.ssl/oftc/ o ~/.config/ssl/oftc/

    Reemplaza /path/to/your/keyfile y /path/to/your/certfile con las rutas reales, por ejemplo:
    ("/home/tuusuario/.ssl/oftc/nick.key" "/home/tuusuario/.ssl/oftc/nick.crt")

    Como alternativa a la validación por clave o password, existe la posibilidad de usar certificados para conectarse al servidor.

    Para usar un certificado con OFTC: https://www.oftc.net/NickServ/CertFP/

    Las instrucciones para versiones Emacs 27 o 28 están aquí: https://www.emacswiki.org/emacs/ErcSSL

    Creamos el certificado tal como se indica en la página de oftc.net y añadimos esto a nuestros ficheros init de emacs:

    (with-eval-after-load 'erc
    
      ;; erc hack for gnutls for client cert.
      (defvar *uconf/erc-certs* nil
        "erc client certs used by gnutls package for :keylist.")
    
      ;; copied from the gnutls lib but set :keylist to client certs.
      ;; this function is called from `open-network-stream' with :type tls.
      (defun uconf/open-gnutls-stream (name buffer host service &optional nowait)
        (let ((process (open-network-stream
                        name buffer host service
                        :nowait nowait
                        :tls-parameters
                        (and nowait
                             (cons 'gnutls-x509pki
                                   (gnutls-boot-parameters
                                    :type 'gnutls-x509pki
                                    :keylist *uconf/erc-certs* ;;added parameter to pass the cert.
                                    :hostname (puny-encode-domain host)))))))
          (if nowait
              process
            (gnutls-negotiate :process process
                              :type 'gnutls-x509pki
                              :keylist *uconf/erc-certs* ;;added parameter to pass the cert.
                              :hostname (puny-encode-domain host)))))
    
      ;; only set the global variable when used from `erc-tls'.
      (defun uconf/erc-open-tls-stream (name buffer host port)
        (unwind-protect
            (progn
              (setq *uconf/erc-certs*
                    '(("/path/to/your/keyfile" "/path/to/your/certfile")))
              (open-network-stream name buffer host port
                                   :nowait t
                                   :type 'tls))
          (setq *uconf/erc-certs* nil)))
    
      (advice-add 'open-gnutls-stream :override #'uconf/open-gnutls-stream)
      (advice-add 'erc-open-tls-stream :override #'uconf/erc-open-tls-stream)
      )
    

    Configuración Avanzada (Opcional)

    💡 Nota sobre configuración modular:

    Para Doom Emacs:
    Toda esta configuración avanzada va en ~/.doom.d/config.el

    Para organización limpia (cualquier Emacs):
    Puedes crear un archivo separado ~/.emacs.d/erc-config.el con toda la configuración de ERC y cargarlo desde tu init principal:

    ;; En tu ~/.emacs o ~/.doom.d/config.el
    (when (file-exists-p "~/.emacs.d/erc-config.el")
      (load "~/.emacs.d/erc-config.el"))

    Esto mantiene tu configuración modular y fácil de mantener.

    Logging y Tracking Mejorado

    ;; Guardar logs de conversaciones
    (setq erc-log-channels-directory "~/.erc/logs/"
          erc-save-buffer-on-part t
          erc-save-queries-on-quit t
          erc-log-write-after-send t
          erc-log-write-after-insert t)
    
    ;; Tracking mejorado - ignora mensajes de sistema
    (setq erc-track-exclude-types '("JOIN" "NICK" "PART" "QUIT" "MODE"
                                     "324" "329" "332" "333" "353" "477")
          erc-track-enable-keybindings t
          erc-track-visibility nil)
    
    ;; Timestamps visibles
    (setq erc-timestamp-format "[%H:%M]"
          erc-insert-timestamp-function 'erc-insert-timestamp-left)
    

    Función de Conexión Rápida

    (defun my/erc-connect ()
      "Connect to IRC servers."
      (interactive)
      ;; Libera.Chat (reemplaza Freenode)
      (erc-tls :server "irc.libera.chat" :port 6697 :nick "tu-nick")
      
      ;; OFTC (para Debian)
      (erc-tls :server "irc.oftc.net" :port 6697 :nick "tu-nick"))
    
    ;; Keybinding para conexión rápida
    (global-set-key (kbd "C-c e c") 'my/erc-connect)
    

    Canales Recomendados para Debian Maintainers

    En OFTC (irc.oftc.net):

    • #debian-mentors – Aspirantes a Debian Developer/Maintainer
    • #debian-devel – Desarrollo general de Debian
    • #debian-multimedia – Paquetes multimedia (relevante para Stremio, VLC, etc)
    • #debian-qa – Quality Assurance y testing
    • #debian-es – Comunidad Debian hispanohablante
    • #debian-next – Testing y Sid

    En Libera.Chat (irc.libera.chat):

    • #emacs – Comunidad Emacs general
    • #emacs-es – Comunidad Emacs hispanohablante
    • #lisp – Common Lisp
    • #guix – GNU Guix

    Referencias y Recursos

  • Emacs Meeting Reloaded

    Emacs Meeting Reloaded

    Tras una charla sobre MongoDB en Sevilla, me entero a través del canal #emacs-es de Freenode que vamos a organizar otro Emacs Meeting en Madrid!

    Más información en: http://atlacaba.net/node/12

    ¡No teníamos uno de estos desde el 2008! ¡Casi 6 años ya! He aquí una foto como memento de aquel día.

    2008-12-16-emacs-es

     

     

    Artículo relacionado: Anuncio del Emacs Meeting #1 en el año 2008 en Sevilla
    https://vejeta.com/encuentro-de-usuarios-de-emacs-en-el-hacklab-de-sevilla/

  • emacs *ERROR*: Display :0.0 can’t be opened

    En mi .emacs tengo:

    (setq server-name "vejeta")
    (server-start)

    Para que siempre arranque un servidor de emacs.

    Hoy en mi máquina de trabajo, una Debian squeeze, quería arrancar emacs gráficamente.

    emacsclient -s vejeta -c

    -s vejeta : Para que se conecte al servidor «vejeta»

    -c : Para que cree un nuevo frame (o ventana)

    Se producía el error indicado más arriba:

    emacs *ERROR*: Display :0.0 can't be opened

     

    Lo solucioné ejecutando en consola:

    ## Dance so screen subprocesses can talk to GDM-spawned X servers.
    if test -n "$XAUTHORITY"
    then
        xauth extract - $DISPLAY |
        xauth -f ~/.Xauthority merge -
        unset XAUTHORITY
    fi

     

    Fuente que me ayudó a resolverlo: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=539809

  • Emacs: Trabajar con ficheros .php con MuMaMo (multi major mode)

    Referencias:

    http://www.emacswiki.org/emacs/MuMaMo

    http://www.emacswiki.org/emacs/NxhtmlMode

    http://ourcomments.org/Emacs/nXhtml/doc/nxhtml.html#php

     

    Nos descargamos la última version de Nxhtml desde el sitio: http://ourcomments.org/cgi-bin/emacsw32-dl-latest.pl y concretamente nos basta con el archivo .zip en el enlace que pone «Download latest nXhtml (zip file)».

     

    Lo descomprimimos donde queramos y añadimos a nuestro .emacs la ruta para tener disponible este modo.

     

    (load "YOUR-PATH-TO/nxhtml/autostart.el")

     

    Recargamos nuestro .emacs con M-x load-file .emacs. (Esto sólo es necesario hacerlo una vez, y sólo si ya tuvieras emacs abierto)

     

     

    Abrimos cualquier fichero .php y ya podemos editar con ese modo.

      M-x nxhtml-mumamo

     

    nxhtml-mumamo usa distintos colores para los distintos trozos de código, además de otras funcionalidades.

     

    Para aprender más, echad un vistazo a los tutoriales

     

     

     

     

    PHP con nxhtml

  • Emacs: Grabar ficheros en UTF-8

    La fuente que me dió la solución fué esta:    http://hacks.catdancer.ws/emacs-utf8.html

     

    En el trabajo no puedo trabajar con GNU/Linux como en casa. Pero si uso emacs para mis desarrollos, combinado con FTPDrive para acceder a los ficheros ftp remotos como si fueran una carpeta local (al estilo de curlFTPfs de GNU/Linux).

    Al crear un fichero desde emacs en ese directorio y luego abrirlo en el navegador no se visualizaban las tildes, eñes, etc…

    Como solucionarlo:

    1. Escribe M-x customize-variable RET auto-coding-alist RET
    2. Pulsa en el primer botón “INS” (arriba en la página).
    3. En “File name regexp”, introducir \.php\'
      (Barra-invertida punto P H P  barra-invertida comilla-simple).
    4. En “Coding system”, introducir utf-8
    5. Pulsar el botón “Save for Future Sessions”.

    Como manera alternativa de hacerlo podrías añadir esto a tu fichero .emacs:

     (setq auto-coding-alist
       (cons '("\\.php\\'" . utf-8) auto-coding-alist))
    

    Otro consejo de zoperman

  • Encuentro de usuarios de Emacs en el hacklab de Sevilla.

     

    Encuentro de usuarios de Emacs en Sevilla.

     

    Tal como se anunció en la web de hackarena:

    http://sevilla.hacklabs.org/?q=node/14

    Este fin de semana tendrá lugar un encuentro informal entre usuarios de Emacs. Reproducimos aquí las ideas que han surgido de momento para tratar en el encuentro:

    En el canal #emacs-es en irc.freenode.net y en la lista de correo de hackarena (hacklab-sevilla AT listas.nodo50.org) surge la idea de un encuentro de usuarios de emacs.

    Emacs es un editor con larga trayectoria en el software libre, que tienes sus origenes en la comunidad hacker del MIT a finales de los 70, y en los que GNU emacs, de Richard Stallman, es una de las versiones de emacs mas extendidas.

    David Vazquez, un miembro muy activo de la comunidad de emacs, junto con otros usuarios propone un encuentro en los que tratar estos temas:

    * Introducción al editor GNU/Emacs
    * Emacs como procesador de documentos (Latex, Texinfo, Docbook..)
    * Desarrollo en GNU/Emacs

    * Control de versiones
    * Diferencias, patchs, …
    * Más

    * Edición avanzada: mejorando tu productividad

    * Automatización de tareas: macros.
    * Autoescritura: abbrevs, plantillas, autocompletado..

    * Más que un editor: extendiendo las funcionalidades

    * Planificación (org-mode, planner, …)
    * Correo electrónico y news
    * Mensajería instantánea
    * Integrando todo el sistema

    * Lisp: Historia e Introducción
    * Programación en Emacs Lisp y extendiendo Emacs (taller)

     

     

    Lugar: CSOA Sin-Nombre

    C/ SanBernardo 42 /46 (edificio de ladrillo visto, antiguo colegio en frente de la antigua estación de cadiz)
    Nos reuniremos en la planta de arriba.

     

     

    Mapa para llegar desde la estación de trenes de San Bernardo hasta la calle San Bernardo, 42

     

    Actualización: El encuentro finalizó con mucha satisfacción por parte de los asistentes. Estas fotos son del domingo, cuando Davidam ya nos habia dejado para poder visitar la ciudad antes de volver a Madrid.

     

    Algunas imágenes del evento:

     

    La biblioteca del CSOA. Lugar del encuentro de emacs y taller de Lisp

    Evaluando una expresión Elisp.

    Despues del almuerzo, Antoniopr prueba algo nuevo con elisp bajo la atenta mirada de Davidvp y Jusore

    Taller de Elisp, Davidpr explica las estructuras básicas de Lisp. Jusore atento a la explicación y Antoniopr descubre la cámara de Vejeta.

Creative Commons License
Except where otherwise noted, the content on this site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.