
Recuerda, “No tiene que gustarte Emacs para que te guste”––Emacs puede tener
diferentes colores, diferentes comandos y diferentes atajos que el Emacs por
defecto. {AItPiEL}
An Introduction to Programming in Emacs Lisp
git clone https://gitlab.com/nasciiboy/elipo.git
# o
git clone https://notabug.org/nasciiboy/elipo.git
para descarga en formato zip
y en tar
“Una introducción a la programación en Emacs Lisp” es una guia turistica por
los conceptos basicos de la programacion, recorriendo las entrañas mas
emblematicas en “las fuentes” de GNU Emacs, el “editor extensible”.
El documento es un primer acercamiento gentil, mas o menos claro y muy reiterativo a Emacs
Lisp, que a un iniciado en la programacion deseoso por utilizar el verdadero
potencial de emacs le vendra de maravilla. Menciono que a un iniciado, por que
asi es mi caso, y me costaria recomendarlo como primer libro de programacion.
Aun asi, utiliza buenas analogias e introduce los conceptos base
de forma tan gradual como para no descartarlo (por completo) como libro novel.
A lo largo del material, aprenderemos ademas de los fundamentos de la
programacion (variables, bucles, recursividad, funciones, …, listas), a crear atajos
personalizados para las funciones de Emacs, como tambien a definir las nuestras
propias, a manipular y construir listas lisp, visitar buffers, mover el punto,
utilizar la region, crear funciones interactivas, a conocer el anillo de la
muerte y en ultima instancia a enterarnos con certeza de lo que hacemos con
nuestro init.el
…
…bueno, el texto esta un poco anticuado fue escrito con la version 22
(2007-2008) en mente, pero en la practica (practicamente) todo el codigo aun es
aplicable, exeptuando algunas pocas funciones y configuraciones relacionadas con
X Window
Antes ya habia realizado otros acercamientos a lisp como “The land of Lisp”
(traduciendolo “informalmente” como hasta un 2X%) y tambien con ANSI Common
Lisp, pero este ha sido el primer libro que termino y donde (mas o menos) llego a comprender las
bases de Lisp… sin masterizarlo a profundidad, pues el libro no abarca
conceptos como la metaprogramacion, macros y el potencial de las funciones
lambda (quien sabe que signifique todo eso…)
De momento Lisp me continua pareciendo un lenguaje curioso, con algo de
elegancia (no demaciada), medianamente “retro” y un poco tosco en lo que a adquirir
documentacion y uso de librerias se refiere
Muchos aspectos son forzados a encajar en el molde de las listas y en otros
tantos, como las “formas especiales”, simplemente se ignoran en pro de la
practicidad
Mi calificacion?
No es una perdida de tiempo
Necesario si quieres profundizar en emacs o descubrir la superficie de lisp
Sin ser una lectura ipnotizante, tampoco es soporifera. En ocaciones cuesta
seguir las ideas del autor, pero es apreciable que sin ser un escritor de profesion
o vocacion (supongo) se esforza por plasmar su conocimento lo mas claro que le fue posible
porg
No recuerdo si fue en alguna busqueda de Emacs-material, en irc o
directamente el la pagina de David Arroyo donde con
alegria incontrolable descubri la existencia de una traduccion al español (en apariencia
terminada) de este titulo, que ademas de tener una version en PDF y texinfo,
contaba con el material impreso.
Con la mayor alegria que puede albelgar un aprendis del silicio y en particular usuario de
Emacs que poco entiende del lenguaje ingles, procedi a descargar
el PDF para recorrerlo con deseo. Sin embargo, al poco de leer, fue evidente que
la version tenia defectos apresiables aun para un completo perdido del engrish.
Incredulo, supuse que la version digital y la impresa tenian algun (compresible)
desfase comercial y fui directamente al repositorio donde se albergaba la
fuente. Para descubrir que el material era tal cual el del repositorio
No negare que un fuerte sentimiento de desilucion aparecio al ver que habria que
hecharle esfuerzo para tener un material compresible. Aunque viendolo desde otro
angulo, ya habia personas que habian invertido tiempo y energia preparando el
material. Que menos que unirse a la causa para sumar al material, o tan siquiera
dejarlo en un punto que fuera util a mis egoistas fines
Segun el repo, la primer contribucion que hice fue el 30-05-16, pero aunque
intente mantenerme constante, encontre que traducir mediante un fichero .po
que ademas esta documentado en texinfo es bastante engorroso. Sumado a esto, las
taras ortograficas y traductorias que cargo que son bastas (e incorregibles…),
como resistirme a colocar acentos o a pasar un corrector ortografico y ademas
tener en esas fechas algunos experimentos bizarros para un lenguaje de marcas
ligero que cumpliera todas mis ridiculas exigencias, condujeron a que hiciera un
“fork” del proyecto
“fork” etre comillas, porque no cargue con el material original. Fue una
adaptacian express al lenguaje experimental de aquel tiempo (aun sin exportador, ni
nada) y tras “corregir” cerca del 30% perdi la motivacion….
el asunto se fue aparcando, el formato de marcado ligero cambiando y poco
interes tenia por actualizar
hasta que por diciembre del 2017 lo retome esporadicamente y luego de
bastantes seciones, pues lo doy por “usable” y digno de ser compartido bajo unos
pobres estandares.
Eso si, no sera ningun logro literario, pero no negare que visualmente tanto
las versiones web y en morg, tienen un acabado de puta madre. Ha quedado
bien chido y “profecional”

Sin embargo, la parte de la traduccion que no se como inicio, pero creo
fue obra del traductor de google (y en un inico continue con la tradicion hasta
que aparecio deepl) (por mi parte) consistio apenas en darle sentido a los parrafos
En muchas (por no decir que en todas) las seciones, terminaba por
entrar en una face cercana al sueño y dejando presionada una tecla
indefinidamente. Iniciaba una alerta de regresar a la consciencia, y… volvia a
controlar la somnolencia, unos minutos mas antes de desistir.
Otro de los bellos detalles que inclui, fueron palabras con sus caracteres en posiciones alteradas
de sitio. Asi como palabras repetidas y poca atencion al formato
Hay varios sitios donde es necesario hacer mas digerible la transmicion de ideas
y otros donde por la falta de conocimiento del engrish solo intuia el sentido e
inventaba el resto
Algunas traducciones no son consistentes, otras dificiles de transladar y unas mas se
asume que ya se entienden, por ejemplo las funciones y conceptos narrow
y
widen
, que deje como reducir y extender
Donde decia “computer” al principio substitui con computador, pero termino
como ordenador, y asi otros tantos detalles
Por el lado del codigo, el proyecto de traduccion original (de libre-manuals)
planeaba adaptar el codigo a una version reciente. Por parte mia, y ya que
segun la wikipedia el autor
de esta obra (y otras mas) Robert J. Chassel murio en 2017, he preferido dejarlo
(casi en su mayoria) tal cual. (Alguna cosa cambie pero no recuerdo que exactamente.)
Otra cosa importante, es que todas las regiones de texto en el original dentro
de un bloque texinfo ignore
, las extripe de las versiones a “morg”. Considere que eran
comentarios y ya que estaban inconclusos los quite.
…
Asocia la tecla ‘Bloq Mayus’ a ‘Control’
(Una interfaz de usuario tan rota, sugiere que los fabricantes de teclados
piensan que las computadoras son máquinas de escribir de 1885.) {AItPiEL}
Y luego del momento de monolo, el producto central esta en los siguientes repos
git clone https://gitlab.com/nasciiboy/elipo.git
git clone https://notabug.org/nasciiboy/elipo.git
tambien hay uno en github, pero los repos hay presentes (todos inconclusos) los he congelado y/o
estan en proceso de migracion hacia gitlab
Para quien desee intervenir el material, recomendaria primero leer acerca del
(cambiante y experimental) lenguaje de marcas ligeras morg y si se quiere
profundizar mas, seguir la etiqueta morg en este blog.
El fichero donde deben realizarce las modificaciones tanto en español, como en
ingles es emacs-lisp-intro_es.porg
Para facilitar la labor, utilizo org-mode para algunas funcionalidades, como
escribir listas y tener outline-mode. Algunas de las configuraciones que se
pueden agregar a init.el
para ayudar un poco, son:
(add-to-list 'auto-mode-alist '("\\.morg\\'" . org-mode))
(add-to-list 'auto-mode-alist '("\\.porg\\'" . org-mode))
;;; resaltado primitivo y no siempre certero de la sintaxis
(add-hook 'org-mode-hook
(lambda ()
(highlight-regexp "@[^[<({]+[[<({][^]>})]+[]>})]" 'hi-green-b)
(highlight-regexp "@[[<({][^]>})]+[]>})]" 'hi-red-b)
(highlight-regexp "@[^[<({]+[[<({][]>})]" 'hi-red-b)
(highlight-regexp "[[:space:]]@[[:space:]]" 'hi-yellow)
(highlight-regexp "@[a-zA-Z]+[[:space:]]" 'hi-yellow)
(highlight-regexp "^ *@ +.*" 'hi-pink)
)
)
me parece que el programa que esta en los repositorios y el que utilizo en mi
sistema para realizar la exportacion, difieren un poco… estaba en proceso de
refactorizacion e inesperadamante cai en un bucle de poscastinacion y falta de
ideas.
En los planes esta que las versiones finales de ficheros (en|es|..|xx|).morg
puedan mesclarze, traducirse automaticamente, compararse, reformatearse y
demas. Pero ante mi ineficacia, para este material recurri a simples trucos
para generar la versiones finales apartir del fichero .porg
para producir la traduccion en español, solo tienen que borrarse todas las
lineas que inicien con #
. Para generar la version en ingles, mantener todas
las lineas vacias y que inicien con #
, y luego eliminar el #
inicial mas un caracter
en blanco (si lo hubiera)
he colocado unas cripticas instrucciones en el .porg
, para generar ambas
versiones.
De .porg
a en.morg
y ademas exportacion a html, seria:
awk 'length == 0 || /^#/' emacs-lisp-intro_es.porg | sed -e 's/^# \?//' | sed '8,11d' > emacs-lisp-intro.morg && morg toHtml emacs-lisp-intro.morg
y de .porg
a es.morg
con exportacion a html:
morg unPorg emacs-lisp-intro_es.porg && morg toHtml emacs-lisp-intro_es.morg
Si se desea verificar que los enlaces en las exportaciones html apuntan a algun
lado, se puede utilizar linkchecker
(presente en los repositorios de debian)
linkchecker emacs-lisp-intro_es.html --check-extern
algunas convenciones
cuando despues de un atajo se incluye el nombre de la funcion que invoca “entre
parentesis”, utilizo la sintaxis @%c(nombre-de-funcion)
cuando despues de un palabro en español o ingles se coloca su equivalente en el otro
idioma, utilizo la sintaxis @%i(traduccion/original)
En el documento origital varias “piezas de codigo” se colocaban entre comillas
simples. Cuando lo considere pertinente y que ofrecia un mejor resaltado utilice
@'c(pieza-de-codigo)
Por falta de mejora en el exportador, y sombretodo, como un apaño, dentro de los bloques de
codigo, deben respetarse los espacios en blanco. Si un bloque de codigo en el
original tiene una linea de espacio en blanco, debe intercaralse forzosamente el codigo en ingles,
colocando la traduccion al español y que ambos bloques compartan la linea en
blanco
En el original, habia condiciones para que al exportar el fuente los enlaces
externos a los manuales de Emacs y Emacs Lisp estubieran accesibles desde info y
en caso de exportar en un formato diferente, desde la ruta web.
un proposito futuro, es replicar este comportamiento (una vez adaptadas esas dos obras a
morg), pero eso puede tardar mucho o nunca suceder. Para mantener la
funcionalidad, en principio substitui toda referencia a dichos recursos con la ruta web al
manual mono-pagina. Pero para evitar peticiones de varios megas a gnu.org, con
la lentinud que ello conlleba, termine por colocar en el repositorio verciones locales
de estos en formato web mono-pagina
En el original creo que las citas con comillas dobles y sencillas y ---
, se aplicaban
mediante sintaxis texinfo. Para mejorar la legibilidad en el fuente, se
modificaron a “cosas”
, ‘cosas’
y ––
. El formato morg, tiene comandos para
aplicar los mismos efectos: @"(cosas)
, @'(cosas)
y @-(cosas)
. Sin embargo
el ultimo no esta adaptado para casos “especiales” si las cosas tienen llave de
apertura pero no de cierre. Aun considero cambiar todas las apariciones
“legibles a simple vista” por su version en comando, pero no lo termino de decidir
Disfrut! Bienvenidas las peleas, asesorias programacionales a morg, los
exportadores de texinfo a morg, los tenedores, monitores 2K y sobre todo, el sucio dinero!