Maxxcan's Site: Técnicas que te pueden ayudar mucho a mejorar la productividad

Introducción

Este artículo es la segunda parte del anterior. Si en él hablábamos sobre consejos que podrían ayudar a mejorar la productividad personal en este ahondo en las técnicas que más uso y que me ayudan mucho, por lo que las expongo por si fueran de ayuda para ti también.

Como dije son técnicas que me han ayudado muchísimo, incluso algunas han cambiado totalmente mi forma de trabajar e incluso el día a día. También hay que decir que como no soy perfecto no siempre las llevo a la perfección por lo que si en algún momento me "han fallado" es por mi culpa más que por culpa de las técnicas.

Aquí voy a hablar de forma muy resumida de cada una de las técnicas que uso en mi día a día y cuando las uso. Posteriormente haré artículos enteros hablando sobre esas técnicas y como aplicarlas o cómo las aplico yo. También hay que decir que cuando hablemos de esas técnicas haré una separación con respeto a las herramientas. Citaré o explicaré muy resumidamente herramientas, bien sean informáticas o no, que la gente puede usar y luego está la parte de cómo lo hago yo. Yo uso el Editor/"Sistema para todo" que es Emacs y todas las técnicas de las que hablo se pueden aplicar usando ese programa por lo que también haré otros artículos sobre cómo yo con Emacs y otras herramientas aplico personalmente esas técnicas. Puede parecer raro a la gente que hable tanto de Emacs pero es más que un programa, casi una filosofía de vida, y muchos de mis lectores son usuarios de Emacs y saben de lo que les hablo y les interesa. A los que no, como digo hay otras herramientas aunque por supuesto no las recomiende tanto.

El poder de la escritura

Recuerdo en la carrera que fui de las primeras personas de toda mi facultad que llevaba el portátil, en cuanto tuve uno, a las clases para tomar los apuntes directamente en el ordenador. Ahora es totalmente normal, pero hace más de 20 años no lo era para nada y todos me miraban como el bicho raro que soy. Yo no entendía como tenía que dejarme la mano tomando notas manuscritas si luego era mejor pasarlas a ordenador, ya que yo sabía mecanografía desde los 13 años, y lo veía una pérdida de tiempo.

Es curioso porque ahora aconsejaría todo lo contrario a los estudiantes y a las personas en general, incluso en su día a día y es que no pierdan la costumbre de escribir. La relación neuronal y funcional que ocurre en el cerebro cuando escribimos algo es mucho más fuerte que cuando tecleamos en el ordenador, yo mismo puede pasar a ordenador gran cantidad de información y no recordar nada de esa información a los pocos minutos, básicamente porque creo una línea directa que va desde lo que tengo que escribir hasta mis dedos en el teclado sin pasar, por decirlo así, por mi memoria, por lo que rápidamente no recuerdo nada de lo que he tecleado.

Por eso, tanto para aprendizaje, como para la reflexión diaria, toma de decisiones, acciones que tengo que hacer para la semana, etc, aconsejo que se hagan en papel y con bolígrafo ya que es habitual ahora cuando aprendemos una técnica rápidamente buscar herramientas informáticas que implementen esas técnicas y como digo aunque yo las uso y pueden ayudar mucho es muy importante no perder el factor de la escritura sobre todo para aprender esa técnica.

Os pongo un ejemplo, cuando empecé a aprender la técnica Zettelkasten de la que hablo después, la técnica es de los años 60 y el creador no usaba ordenador para implementarla. El creador usaba unas tarjetas perforadas y las guardaba en un cajón donde las ordenaba. A pesar de que hoy en día hay muchas aplicaciones informáticas e incluso yo uso mucho una de ellas para implementar el método, yo para aprender ese método usé las mismas herramientas que el autor, tarjetas perforadas y un cajoncito y a día de hoy incluso con la aplicación informática sigo usando mucho las tarjetas perforadas

GTD

De GTD poco puedo contar que no se haya dicho ya, pues es una técnica que tiene más de 10 años y que tiene infinidad de libros, programas que lo implementan, etc, etc. Yo solo voy a decir que de verdad funciona y que merece mucho la pena. Creo que ya no hay nadie que no conozco el método GTD pero si queda alguno pues eso, probarlo que tiene cosas muy buenas para la organización del trabajo, la regla de los dos minutos, la automatización de partes del trabajo que lo facilita más aún, etc, etc.

Para saber más pasaos por la página web del autor, también hay información muy interesante en la wikipedia y además no puedo dejar de recomendaros este libro en español que fue gracia al que yo aprendía a usar esta técnica.

GTD-Book-Transparent-2.png

Pomodoro

Esta técnica es una gran ayuda no perder el hilo del trabajo durante la jornada laboral. A mí me ayuda mucho porque soy muy dado a empezar a hacer algo y despistarme con cualquier cosa, o de repente me acuerdo de que quiero/tengo que hacer algo rápido y pierdo el hilo, ya no digamos el tener que entrar un momento en internet para buscar una cosilla y acabar viendo cosas que no tienen nada que ver.

La técnica la inventó un estudiante italiano y empezó usándola con uno de esos temporizadores de cocina con forma de fruta y verdura. El suyo en concreto tenía forma de tomate y de ahí el nombre de la técnica ya que pomodoro es tomate en italiano. Yo por ejemplo, tengo una berenjena por lo que agradecemos que la técnica no la haya inventado yo.

La técnica consiste en hacer nuestra tarea o estudio por un plazo de 20 minutos, descansar 5 y volver a hacer 20. Luego después de dos pomodoros (espacios de 20 minutos) hacemos un descanso de 10 y a los 4 descansamos más tiempo. Lo importante es que cada pomodoro es indivisible, esto es, cuando empecemos ha hacer algo vamos a estar los próximos 20 minutos solo haciendo lo que hemos decidido.

La técnica como digo es ideal para no perder el hilo o hacer cosas que no son las que tenemos que estar haciendo en el momento además de que ayuda mucho a concentrarse.

Yo además voy anotando los pomodoros que hago por actividad por lo que así llevo un registro de qué actividades me llevan más tiempo o les dedico más esfuerzo.

Tenéis toda la información necesaria en la correspondiente entrada de la wikipedia.

Zettelkasten

Esta es una de las últimas técnicas que he descubierto y me ha cambiado mucho mi forma de trabajar. Para haceros un resumen yo la llamo la "técnica que ha hecho de mi procrastinación algo productivo".

Bien lo explico un poco. La técnica es una forma de tomar notas de libros, películas, pensamientos, lo que sea que se nos pase por la cabeza o que veamos o escuchemos. La inventó en los años 60 un profesor de sociología llamado Niklas Luhmann y aunque según la wikipedia el invento es anterior a él, realmente fue él el que lo ha hecho ser lo que es hoy en día. Yo lo descubrí gracias a la extensión para Emacs Org Roam y como digo una vez que lo descubrí fui indagando en él y cada vez lo he visto más productivo.

Zettelkasten.jpg

Sin meterme mucho en detalle porque ya haré más artículos tanto de la técnica en general como de Org Roam, todo se basa en tomar notas en una pequeñas tarjetas sobre, por ejemplo, si estás estudiando o investigando algo, pero no solo tomar notas sino además poder relacionar notas entre ellas tal como se hace hoy en día con los hiperenlaces en internet, pero además esos enlaces son dinámicos y pueden acabar permitiéndonos ver relación de cosas que en un principio no la vimos. Por ejemplo, estas leyendo un libro de matemáticas y te das cuenta que cierto descubrimiento tiene que ver con momento histórico que has leído en otro libro y del que también tomaste notas.

Yo lo llamo la técnica que hace que mi procrastinación sea productiva porque como ya he comentado soy muy dado a empezar a buscar sobre una cosa en internet y acabo leyendo sobre cosas que no tienen nada que ver. O estoy viendo una película o leyendo un libro y de repente tengo curiosidad sobre algo que he visto o leído y empiezo a buscarlo y a saber más de eso.

El problema es que antes todo ese flujo de información, como no lo anotaba ni lo relacionaba se acababa perdiendo porque mi memoria es limitada. Ahora apunto todo, tanto la información que recopilo como los enlaces que me llevan de una cosa a otra lo que me genera una especie de "Segundo Cerebro" donde están todas mis anotaciones, ideas, descubrimientos, etc.

Además una vez que tienes ese "segundo cerebro" por lo que se puede usar como borrador para luego escribir sobre algo de forma mucho más rápida y con todas las referencias posibles, sobre todo si te dedicas a la escritura o a la investigación.

Os muestro un ejemplo de mi "Segundo Cerebro" tal como está ahora:

<img src="second-brain.png" alt="segundo cerebro" width= 400>

Como recursos aunque yo descubrí el método gracias a Org Roam lo primero que hice fue documentarme y compré este libro que lo recomiendo mucho en general, no solo para este método. Además ya concretamente para aprender el método me leí este artículo que explica el método de forma clásica, sin usar herramientas informáticas, solo con las tarjetas que usaba Luhmann y como relacionarlas y es la forma que yo al menos aconsejo.

Otro buen artículo es éste de reddit donde hablan las ventajas del "Segundo Cerebro" y cómo hacerlo.

Como pequeño indicativo de lo buena que es esta técnica Luhmann llegó a escribir más de 60 años además de otros artículos y ensayos sobre sociología.

Hay poca documentación en español, por eso mi idea es que en un futuro realizar más artículos sobre este método en español para que más gente lo conozca y pueda disfrutar de sus ventajas.

Bullet Journal

Finalizo con este método que realmente es una amalgama de otros métodos y para mí ha sido de lo más práctico y se basan en el primer punto que he comentado, el poder de la escritura, y es porque todo se basa en llevar una libreta donde podemos apuntar distintas cosas, pero vamos a explicarnos mejor.

El bullet journal es una forma de llevar nuestro día a día, donde apuntaremos nuestras actividades, citas importantes, notas, recordatorios de todo tipo e incluso nuestros pensamientos personales.

El creador lo desarrolló de joven porque tiene un déficit de atención y necesitaba una forma de organizarse y tenerlo todo en un solo sitio, por eso de una forma casi involuntaria creó este método tal como explica en su libro que recomiendo mucho y que yo me leí para empezar a llevarlo.

Aunque en la propia web del autor tienen su propia Aplicación informática yo aconsejo usar el método de la libreta. En esa libreta apuntamos los días del mes y vamos apuntando que queremos o qué estamos haciendo en cada uno de esos días, además puedes apuntar proyectos, ideas, etc, lo bueno del método es que da mucha libertad y no hay dos bullet journal iguales porque cada persona le da su toque personal.

Aunque hay libretas especiales para este método mi consejo es empezar con una libreta A4 normal y corriente y cuando le cojamos el gusto y vayamos entendiendo mejor como funciona el método si queremos podemos comprar cualquiera de las libretas que hay especiales para este método.

Como digo lo bueno de este método es que aunque tiene una metodología específica permite aplicar incluso mucho de las técnicas que ya hemos visto y combinarlas tanto con otras técnicas como con otras aplicaciones.

También, es muy importante para mí, usar una libreta física, tal como ya he vuelto a comentar sobre el poder de la escritura porque he creado en mí la rutina de levantarme por la mañana y mientras desayuno miro las tareas que he realizado el día anterior y las que quiero hacer para ese día, así como ver el cómo llevo proyectos e ideas.

Conclusión

Hasta aquí un pequeño resumen de las mejores técnicas que uso en mi día a día para mejorar la productividad. Como ya he dicho, quedan muchos artículos hablando más en profundidad sobre esas técnicas y cómo las aplico, qué herramientas uso, como lo implemento en Emacs y muchas más cosas.

Cualquier cosa no dudes en ponerte en contacto conmigo a través de mi correo electrónico.

-1:-- Técnicas que te pueden ayudar mucho a mejorar la productividad (Post )--L0--C0--August 19, 2021 08:00 AM

Maxxcan's Site: Cómo mejorar la productividad personal

Introducción

Estarás pensando que esta es la pregunta del millón y es que realmente no tiene una única respuesta. Realmente el artículo debería llamarse, posibles consejos para mejorar la productividad personal, pero bueno el puesto anteriormente es más directo.

Y eso es lo que pretendo con este artículo y es que tras leer muchas páginas, que no voy a citar aquí, más mi experiencia personal, haré un resumen de actitudes y técnicas que me han ayudado a mejorar mi productividad personal y por lo tanto espero que al menos en parte lo haga con la tuya.

Eso sí, para mí la más importante de todas y que sin ella es puede que el resto de las técnicas no te servirán de nada es sobre todo la MOTIVACIÓN. Entiendo que no siempre hacemos lo que que nos gustaría hacer en ese momento, ahí influye la disciplina, pero si en el conjunto no hay una motivación personal, es muy difícil como digo que el resto de las técnicas que te comente por aquí acaben surgiendo efecto.

Qué es la productividad

30-consejos-para-mejorar-tu-productividad.jpg

Vamos a lo más básico y es que como creo que ya la mayoría ya tenemos claro ser más productivo no es trabajar más horas y menos aún hacer horas extras. De hecho el tema de las horas extras más que aumentar la productividad lo que reflejan es que o por tu parte o por la de la empresa a la que trabajas sea directa o indirectamente no están haciendo las cosas bien.

Por lo tanto la productividad podríamos definirla tal como lo hace la OCDE (Organización para la Cooperación y el Desarrollo Económicos) que aseguraba que la clave de la productividad laboral -que suele medirse en relación al Producto Interior Bruto (PIB) por hora trabajada – no es trabajar más duro, sino con más eficacia.

Consejos básicos

Vamos con los consejos básicos que al menos a mí me ayudan a mejorar mi productividad. Como podemos ver digo, mejorar mi productividad, que no ser productivo ya que para eso hay muchos factores de los que podríamos hablar en futuros post o juntarnos en una terapia de grupo de esas.

Priorizar y planificar un horario

schedule.png

Este el el primer consejo que vas a ver en todas las webs, charlas, couching, etc, que veas, leas, etc. Y es que es muy importante hacer esto de una forma regular para mejorar la productividad. El asunto es que organizar nuestras tareas, los tiempos y qué tareas hacer primero es algo que lleva tiempo y esfuerzo mental, por lo que al principio nos costará hacerlo e incluso no lo haremos al no poder superar esa dificultad. El acostumbrarnos a hacer esa tarea de forma habitual hace que cada vez sea más fácil para nosotros, como cualquier ejercicio físico, por lo que cada vez lo haremos de forma más habitual y de forma más sencilla para nosotros.

Haz una lista y sácalo todo de tu cerebro

También es una parte importante de nuestro entrenamiento cerebral diario el poder sacar tareas, ideas, cosas que hacer de nuestra cabeza para que no nos entorpezca nuestro flujo normal de trabajo. Si estamos trabajando en algo pero cada dos por tres nos viene a la cabeza que tenemos que comprar comida para el gato, o mandar un correo electrónico, esto nos frenará mucho. Lo mejor es o una aplicación del móvil o incluso lo que yo recomiendo, un pequeño bloc de notas para anotarlo todo, sacarlo de nuestra cabeza y en el proceso de planificación ya veremos cómo y cuándo lo hacemos. Por supuesto, aunque por motivos que ya comentaré prefiero el bloc de notas, si vas conduciendo en coche es muy útil algunas aplicaciones para el móvil que se activan por voz y nos sirven como un asistente personal.

tactics-for-people-studying-English-brain-with-letters.jpg

Crear objetivos diarios, semanales y mensuales

Algo también muy importante sobre todo si trabajas por cuenta propia es ponerse objetivos diarios, semanales, mensuales e incluso anuales. Aunque he leído distintas cosas acerca de la importancia de esto y si realmente es útil yo pienso que si uno mismo no se va poniendo unos objetivos y el trabajo en sí no tiene una fecha fija en el corto tiempo, podemos acabar demorándonos demasiado y acabar haciéndolo todo a última hora o no haciéndolo. Aquí yo creo que lo dejo a la experiencia de cada uno y el conocerse así mismo, pero como digo yo creo que es importante. Comentarme si tenéis experiencia en esto como os va con el tema de los objetivos y plazos.

Ahorra tiempo con la técnica de los dos minutos

Parkinsons_Law-300x200.jpg

La famosa técnica de los dos minutos es algo así de que si una tarea la puedes hacer en menos de dos minutos hazla. Y es que muchas veces demoramos tareas que realmente se pueden hacer muy rápidamente y se van acumulando por pensar precisamente que se pueden hacer enseguida y acaban formando una bola enorme. Si puedes mandar un correo corto, ver el precio de algo en una web, etc, hazlo. Te sorprenderás cuantas tareas acumuladas se pueden hacer en dos minutos y han estado ahí acumulándose como esqueletos polvorientos en una cripta.

Divide las tareas en actividades más pequeñas

Va un poco en relación con lo anterior y es que hay tareas que parecen complejas que si las sabemos gestionar las podemos subdividir en tareas pequeñas de esas que he dicho que se pueden hacer en menos de 2 minutos, por lo que proyectos que a priori nos tiran para atrás por ser muy inabarcables o demasiado grandes si los dividimos en tareas pequeñas los podremos hacer sin problemas o en varias tandas. Vamos a poner un ejemplo. Imaginemos que somos fotógrafos y hemos hecho 300 fotos de una boda y tenemos que entregar un book a los novios en pocas semanas. A priori una tarea grande y pesada, pero si la dividimos en, por ejemplo, seleccionar fotos, cambiarlas al tamaño y formato adecuado, ecualizar los colores, corregir algunos errores, darles nuestro toque artístico…, etc, pues entonces son actividades cortas, que podemos hacer seguidas o intercalándolas con otras actividades para que no se haga tan pesado el trabajo y al final incluso haciéndolo más divertido.

Haz las tareas más difíciles lo antes posible

Esto no va en contra de lo anterior, más bien lo corrobora. El asunto es como hemos dicho dividir los proyectos en actividades más pequeñas, pero sobre todo irnos por los proyectos que más difíciles creamos que nos van a resultar. Sino vamos a estar posponiéndolos hasta el infinito y más allá, y mientras más los pospongamos más pereza nos dará ponernos a ellos y así ad infinitum.

La comodidad y la limpieza lo es todo

clasicas-manager-720x420.jpg

Bien, en este punto al menos puedo decir que estoy innovando un poco, no mucho, ya que no se suele mencionar en la mayoría de guías o artículos sobre productividad. Y es que un ambiente, limpio, agradable, que invite al trabajo y sobre todo que no tenga cosas que nos puedan distraer es seguramente para la mayoría incitación a la productividad. Si tenemos basura, estarás pensando todo el rato en que hay que limpiarla, y si hay mal olor estarás pensando más tiempo en eso que en el trabajo. Por eso digo, que tener un ambiente, limpio y agradable debería ser tarea primordial para todo espacio de trabajo.

Aprender a delegar

Esto también es importante, y es que a veces nos sobrecargamos de trabajo que aunque sepamos hacer puede que otra persona lo haga mejor o simplemente lo haga dándole otra perspectiva y en el proceso nos quite ese trabajo. También es verdad que no siempre se puede delegar por motivos económicos, pero está claro que muchas veces ignoramos cuanto dinero nos puede aportar el delegar el trabajo a otra persona ya que ganamos tiempo y calidad de vida.

Aprende a decir que no

Poco que decir de esto, creo que la mayoría de nosotros cuando escuchamos esta frase "aprende a decir que no" pensamos, yo sé decir que no, eso a mí no me afecta. Pero la realidad es que la mayoría de nosotros sea por motivos económicos, por no quedar mal, o simplemente por rutina decimos que sí a trabajos y actividades que o no nos corresponden o simplemente nos rompen nuestro flujo de trabajo, haciendo que perdamos más de lo que ganamos. Además si aceptamos tareas de las que no somos demasiado expertos la realización de las mismas nos van a quitar más tiempo y por tanto dinero de lo que nos puedan aportar. Hay que ser muy crítico con nosotros mismos y lo que podemos y no podemos hacer.

Evaluación interna

Esta parte no siempre la hacemos o la hacemos de forma incorrecta y es muy muy importante. Y es muy adecuado el poder evaluarnos a nosotros mismos para poder tomar decisiones en el futuro sobre qué trabajos y actividades realizar y cómo realizarlas. Hay muchas formas y herramientas para medir esto, y nos vale tanto para nosotros mismos, un grupo de trabajo o una empresa completa. Por ello hablaré sobre ello en varios post en un futuro.

Recompensate por el trabajo bien hecho

A veces nosotros mismos somos los mejores para valorar nuestro propio esfuerzo. Cuando termines algún trabajo importante recompensate, haz algo que te guste diferente del trabajo, tú te conoces y sabes que te puede ayudar para seguir motivado.

Cada tarea tiene su momento

Bien, como ya he repetido hasta la saciedad y como decía Sócrates, Conócete a ti mismo. A veces hay momentos donde estamos más capacitados para ciertas tareas y en otros momentos para otras. Por ejemplo, muchos programadores prefieren la noche o la madrugada para las partes más intensas de su trabajo, otros prefieren las mañanas… pues eso.

Si eres programador o incluso diseñador o escritor y prefieres trabajar de noche porque eres más productivo que sepas que no estás solo y te dejo un enlace que lo explica.

El descanso es muy importante y las vacaciones también

vacation.jpg

Y este no por ser el último es el menos importante, todo lo contrario, podría hasta ser el primero y el más importante y es que hemos dicho nada más empezar ser productivo no es trabajar más horas, sino hacerlo de forma más eficiente y para ello, el descanso, desconectar de vez en cuando y unas buenas vacaciones son indispensables. Y esto último es para reivindicarlo aún más ya que parece que la tendencia en muchos sitios es eliminarlas o al menos reducirlas mucho y hasta se han inventado un término nuevo para que no existan llamado trabacaciones, que no voy a hablar más de ello aquí porque merece un post muy completito y crítico con el tema.

Seguiremos en una 2ª Parte

Aquí de momento los consejos que doy según mi experiencia que puede o no mejorar tu productividad.

En una 2ª parte veremos las técnicas que me han ayudado mucho y sobre todo lo más importante La Motivación

Nos vemos pronto en este mismo canal y a la misma hora

-1:-- Cómo mejorar la productividad personal (Post )--L0--C0--August 11, 2021 08:00 AM

Notxor tiene un blog: Configuración de org-mode para utilizarlo como agenda (I)

El configurar correctamente org-mode para utilizarlo como agenda es un procedimiento sencillo, pero que a algunos parece que se les atranca. Por lo tanto, me he planteado escribir esta entrada en el blog, además lo acompañará un vídeo que resume todo el proceso de una manera sencilla. Utilizo programación literaria para explicar todos los pasos según los voy haciendo.

El procedimiento del artículo es sencillo:

  1. Iniciar Emacs sin cargar la configuración con el comando
emacs -q
  1. Generar una configuración mínima para hacer más agradable la modificación de código.
  2. Después de cargar la configuración mínima, modificarla únicamente en los aspectos relacionados con la agenda.

Inicio de paquetes y configuración mínima de variables

Por defecto, al arrancar mediante emacs -q, no se carga ningún tipo de configuración y los valores son los que cargarían por defecto en una primera instalación.

(package-initialize)

(custom-set-variables
 '(Info-default-directory-list
   '("/usr/share/info/" "/usr/local/share/info/" "~/opt/share/info/"))
 '(custom-enabled-themes '(dracula))
 '(custom-safe-themes
   '("549ccbd11c125a4e671a1e8d3609063a91228e918ffb269e57bd2cd2c0a6f1c6" default))
 '(ivy-mode t)
 '(truncate-lines t)
 '(display-line-numbers-type 'visual)
 '(scroll-bar-mode nil)
 '(which-key-mode t))

(global-company-mode t)

La primera línea anterior le dice a Emacs que cargue la lista de paquetes que encuentre en el sistema. Es hacer un poco trampa porque ya tengo en mi máquina los paquetes necesarios instalados y no hablo sobre la instalación en ningún momento. Sin embargo, org-mode ya viene por defecto en Emacs.

También le digo a este Emacs pelado dónde puede encontrar los archivos info que utiliza para mostrar la documentación, por si más tarde fuera necesario consultarla. Cambio el tema de Emacs a uno oscuro y después cargo unas pocas herramientas que mejoran la comodidad al usar el editor:

  • ivy, un modo que hace la interacción con Emacs mucho más agradable, proporcionando listas de comandos, de ficheros, de... muchas cosas.
  • which-key, un modo que nos proporciona información sobre las cadenas de comandos de teclado disponibles.
  • company, nos proporciona el completado de sintaxis cuando estamos programando.

Configuración para la agenda

Primero se configura el formato para las fechas en la variable calendar-date-style, de entre tres estilos establecidos:

  • american con el formato mes/día/año.
  • european con el formato día/mes/año.
  • iso con el formato año/mes/día.

Después especificar qué día comienza la semana en la variable calendar-week-start-day. La función admite un número entre 0 y 6:

  • 0 - domingo
  • 1 - lunes
  • 2 - martes
  • 3 - miércoles
  • 4 - jueves
  • 5 - viernes
  • 6 - sábado

Por defecto, el valor se establece a 0, domingo, que es el día en el que comienza la semana en muchos países. En otros, como aquí, la semana comienza el lunes, por lo que ajusto el día de comienzo a 1.

(setq calendar-date-style 'iso)
(setq calendar-week-start-day 1)

Nombres de días y meses

Los nombres de los días y de los meses se establecen en dos variables cada uno, una con el formato abreviado y otra con el nombre completo.

  • calendar-day-header-array ... "Do", "Lu", etc.
  • calendar-day-name-array ... "domingo", "lunes", etc.
  • calendar-month-abbrev-array ... "Ene", "Feb", etc.
  • calendar-month-name-array ... "enero", "febrero", etc.
(setq calendar-day-header-array ["Do" "Lu" "Ma" "Mi" "Ju" "Vi" "Sá"])
(setq calendar-day-name-array ["domingo" "lunes" "martes" "miércoles" "jueves" "viernes" "sábado"])
(setq calendar-month-abbrev-array ["Ene" "Feb" "Mar" "Abr" "May" "Jun" "Jul" "Ago" "Sep" "Oct" "Nov" "Dic"])
(setq calendar-month-name-array ["enero" "febrero" "marzo" "abril" "mayo" "junio" "julio" "agosto" "septiembre" "octubre" "noviembre" "diciembre"])

Sólo quiero recordar dos cosas. Una es que estas variables esperan recibir un array y no una lista. Otra es que en castellano, los nombres de los meses y de los días no se escriben con mayúsculas, por eso, aunque sí las utilizo para las abreviaturas no las uso en los nombres completos.

Ficheros de datos

Necesitamos mínimo un fichero. Dos, si utilizamos el diario: uno será para la agenda y otro para el diario. El fichero de diario lo trataré más adelante, aunque es opcional.

Se pueden tener varios ficheros org donde guardar la información de los eventos. Podemos, por ejemplo, tener distintos ficheros para agrupar conceptos como trabajo, ocio, familia, etc. En mi caso utilizo dos, uno de los ficheros donde se guardan los eventos capturados a través del calendario de mi servidor Nextcloud y que se sincroniza con la agenda de Emacs a través del paquete org-caldav. Pero en el ejemplo, sólo utilizaré uno.

Los distintos ficheros se configuran en la variable org-agenda-files y espera una lista de ficheros con el path completo.

(setq org-agenda-files '("~/agenda/agenda.org"))

El fichero debe existir para que funcione la agenda. org-mode se quejará si encuentra en la lista algún fichero que no existe y propondrá eliminarlo de la lista, pues entiende que se ha borrado. No suele ser mala idea el tener varios ficheros, uno dedicado a cada una de nuestras actividades, por ejemplo. Uno para el trabajo, otro para el ocio, etc. Al visualizarse juntos no hay problema con que se solapen las actividades. O por ejemplo, si tenemos que gestionar la agenda de un grupo de trabajo, podemos tener separadas las tareas de cada miembro del grupo. Somos libres de adaptar la lógica de nuestros ficheros a la lógica de trabajo.

Otra forma de configurar varios ficheros separados es juntarlos todos en un directorio y configurar dicho directorio en la variable org-agenda-files, de esta manera, cuando genere la vista de la agenda consultará todos los archivos org que se encuentren en él.

Configuración del diario y eventos periódicos

El fichero del diario se configura en la variable diary-file. El diario se puede utilizar para recordatorio de fechas señaladas, cumpleaños, festivos, eventos periódicos. Hay que establecer esa variable y también org-agenda-diary-file.

También hay que configurar si queremos que nos muestre las entradas del diario en la vista de la agenda mediante la variable org-agenda-include-diary puesto a t.

(setq diary-file "~/agenda/diario.org")
(setq org-agenda-diary-file "~/agenda/diario.org")
(setq org-agenda-include-diary t)

Las entradas se pueden cargar mediante dos comandos principalmente:

  • Uno con org-anniversary con el formato:

    %%(org-anniversary año mes dia) Texto explicativo
    
  • Otro para eventos periódicos flotantes:

    %%(diary-float mes dia orden) Texto explicativo
    

En ambas sintaxis los parámetros de año, mes o día deben ser números. Es decir, nos encontraremos un error si completamos con 0, como me pasó a mí durante la realización del vídeo: Había preparado una entrada de diario para que se visualizara al cargar la agenda y resultó que no funcionó. Después de darle muchas vueltas, resultó, que acostumbrado a escribir las fechas completando con ceros1, al hacerlo la agenda no lo reconocía como fecha válida. Eso me hizo perder un poco de tiempo, porque repasaba la entrada y para mí estaba correcta... hasta que al crear una entrada de diario desde la vista de la agenda me encontré que la escribía en el fichero sin el cero.

Por otro lado, también se puede configurar la agenda para que ciertas tareas las convierta en periódicas añadiendo en la fecha de schedule o de death un sufijo con su periodicidad. Por ejemplo, si queremos que nos avise semanalmente de alguna tarea rutinaria, podemos añadir a la fecha, el sufijo 1w; si lo queremos quincenal añadiremos 2w; o también, por ejemplo, si lo queremos trimestral: 3m; o 1y para tareas anuales. Estas tareas, cuando se marcan como hechas lo que hace org-mode es añadir un línea con la fecha y hora de la realización de la tarea y modificar la fecha de schedule o death al próximo evento, generando un histórico.

Configuración de los elementos de entrada

Para la realización del vídeo se han configurado mínimamente los dispositivos de entrada, ─ratón y teclado─, con lo mínimo para hacer el trabajo más agradable. Por tanto, se carga el paquete org-mouse para tener acceso en modo gráfico a las funciones del ratón y también se estableces algunas combinaciones de teclas de uso común.

Configuración del ratón

;;; Configurar ratón para el modo gráfico
(require 'org-mouse)

Configuración de combinaciones de teclas

Combinaciones de teclas que suelo utilizar con frecuencia.

;;; Configuración de teclas
(global-set-key (kbd "C-;")   'iedit-mode)
(global-set-key (kbd "C-c a") 'org-agenda)
(global-set-key (kbd "C-c l") 'display-line-numbers-mode)
(global-set-key (kbd "C-c s") 'dired-sidebar-toggle-sidebar)
(global-set-key (kbd "C-c t") 'toggle-truncate-lines)
(global-set-key (kbd "C-c w") 'whitespace-mode)

Aunque últimamente utilizo la combinación C-i para el modo iedit, he configurado C-; porque es la tecla que configura el paquete por defecto. Las demás teclas no necesitan mucha más explicación, aunque en el vídeo la podréis encontrar.

Configuración de dired

El acceso directo de algunos modos al abrir los archivos correspondientes. En concreto se cargan los modos para que muestre iconos en el buffer de dired.

;;; Hooks
(add-hook 'dired-mode-hook 'all-the-icons-dired-mode) ; muestra iconos en el árbol dired
(add-hook 'dired-mode-hook 'dired-git-mode)           ; identifica directorios git
(add-hook 'dired-mode-hook 'auto-revert-mode)         ; refresco de dired

Además, se establecen algunos parámetros en la configuración para que se muestren a mi gusto directorios y ficheros.

;; Ajustes de dired-sidebar
(setq dired-sidebar-theme 'nerd)
(setq dired-sidebar-use-term-integration t)
(setq dired-sidebar-use-custom-font t)

Configuración del paquete ivy

El paquete ivy es uno de los fundamentales para hacer mucho más amigable Emacs para el usuario.

;;; Configurar ivy
;; añadir ‘recentf-mode’ y bookmarks a ‘ivy-switch-buffer’.
(setq ivy-use-virtual-buffers t)
;; número de líneas de resultado mostradas
(setq ivy-height 15)
;; no contar candidatos
(setq ivy-count-format "")
;; no utilizar regexp por defecto
(setq ivy-initial-inputs-alist nil)

Ajustes de fuentes de texto.

Algunos themes de Emacs modifican el tamaño de las fuentes de las cabeceras de org-mode. Buscan mejorar el aspecto de cómo se mostrará el documento en pantalla, sin embargo cuando utilizo programación literaria, como ahora, desajusta la visualización de la lista de opciones que puede mostrar el paquete company y es mejor desactivar esos tamaños.

(custom-set-faces
 '(org-level-1 ((t (:inherit outline-1 :height 1.0))))
 '(org-level-2 ((t (:inherit outline-2 :height 1.0))))
 '(org-level-3 ((t (:inherit outline-3 :height 1.0))))
 '(org-level-4 ((t (:inherit outline-4 :height 1.0))))
 '(org-level-5 ((t (:inherit outline-5 :height 1.0))))
 '(org-level-6 ((t (:inherit outline-6 :height 1.0)))))

El vídeo y los ficheros de trabajo

Si preferís el enlace al sitio:

https://video.nogafam.es/w/u1GkvDRiBe4Ks4s8kQAVCe

Desde ahí también podéis descargarlo y verlo cuando queráis sin estar conectados.

Los ficheros utilizados son tres, está también el cuarto que es el fichero configuracion.el generado a partir del código que se encuentra en configuracion-articulo.org. Los podéis encontrar en:

Es muy recomendable, si no has configurado nunca la agenda y quieres aprender cómo funciona, que toquetees estos ficheros y que pruebes cosas nuevas simplemente para aprender. Sin miedo a estropear tu configuración, si tienes alguna, copiada de algún sitio y que funciona, pero no entiendes muy bien cómo. Recuerda, arranca Emacs con el parámetro -q y carga el fichero de configuración sin preocuparte de romper nada.

Conclusiones

En esta primera parte hablo principalmente de la configuración de agenda y diario, entendiendo que añadimos las tareas y las entradas al diario modificando directamente los ficheros que contienen los datos.

En una próxima entrega hablaré sobre la captura de datos para la agenda. En el vídeo se puede apreciar cómo se puede hacer dicha captura desde la vista de agenda para el diario. Sin embargo, la captura de datos para la agenda es bastante más compleja y merece un capítulo aparte.

Footnotes:

1

Con completar con ceros me refiero a que cuando escribo fechas tengo la costumbre de escribir 2021/01/01 en lugar de 2021/1/1, para preservar dos posiciones alfanuméricas para el mes y el día.

-1:-- Configuración de org-mode para utilizarlo como agenda (I) (Post )--L0--C0--July 30, 2021 12:00 AM

Blog uGeek: Editando CSV usando Emacs

Editando CSV usando Emacs

Edito muchos archivos CSV (valores separados por comas) y aunque puedo hacerlo con un programa de hoja de cálculo, me resulta más rápido hacerlo con Emacs....

Sigue leyendo el post completo de Editando CSV usando Emacs

Visita uGeek Blog

Visita uGeek Podcast

Suscribete al Blog de uGeek

Suscribete al Podcast de uGeek

-1:-- Editando CSV usando Emacs (Post )--L0--C0--July 28, 2021 06:45 PM

Notxor tiene un blog: Introducción en vídeo a org-mode

Vengo con otro experimento. Como la sensación del anterior vídeo no fue demasiado buena, no me siento tan productivo editando vídeo como me siento productivo escribiendo un artículo. Pienso que es por falta de práctica. Después de haber editado uno, me planteé hacer otro, a ver si las herramientas, ahora más familiares, me permitían funcionar mucho más rápido. Además estoy valorando hacer un tercero, a ver si mejoro algunas cosas. Por ejemplo, el sonido (que es penoso).

El vídeo actual quiere presentar, por encima, las capacidades de org-mode y las cosas que se pueden hacer. No en profundidad, porque era un vídeo planeado para 20 ó 30 minutos. Sin embargo, va montado en dos partes. Cuando tenía casi terminado el montaje del vídeo y estaba montando y ajustando el sonido, kdenlive me lanzó un error y algo debió quedar mal en el fichero del proyecto, porque no conseguía abrirlo y cuando lo hacía petaba la aplicación.

Al final pude arreglar un poco el fichero, gracias a que es XML y parte del trabajo no se perdió. El problema es que lo tuve que dividir en dos partes. Así pues, el vídeo no es un vídeo, que son dos. Además, la limitación de tamaño en la plataforma de vídeo tampoco me hubiera permitido hacerlo en un sólo vídeo, porque el archivo no puede superar los 100Mb y todo junto, no sé si los hubiera sobrepasado.

El contenido del vídeo

Cualquiera que haya trabajado con Emacs encontrará el contenido demasiado escueto. Apenas doy unas pinceladas de lo que puede hacer org-mode. He tenido que dejar en el tintero muchas cosas para no alargar demasiado el vídeo. Algo que me resulta más molesto que en los artículos escritos, que pueden ser más largos o más cortos, dependiendo del tema que se hable, pero es más difícil pensar en el aburrimiento del que lo ve.

Hablo en general de cómo escribir un fichero org y cómo exportarlo a otro formato, en concreto a HTML. Por desglosarlo más despacio, se ven los aspectos básicos sobre:

  • Estilos de fuentes
  • Cabecera de archivo
  • Estructura del documento
  • Enlaces (tanto internos como externos)
  • Tablas
  • Gestión de tareas, fechas y listas (etiquetas)
  • Bloques de código
  • Exportación del documento a otros formatos (HTML)

El resultado se puede ver en el siguiente enlace:

prueba-org-mode.html

y el fichero org que lo genera en

prueba-org-mode.org

Si no has trabajado nunca con org-mode y es tu primer contacto, puedes bajarte el archivo org y juguetear con él.

¿Vais a aprender algo con el vídeo? Pues si ya utilizas Emacs y org-mode, puedes prescindir de perder el tiempo viéndolo, porque ya digo que todo es muy básico y con seguridad es muy posible que encuentres más interesante la música de fondo que he puesto que lo que digo y muestro.

Los vídeos

Como vengo diciendo, al final son dos vídeos de introducción a org-mode. El sonido es penoso tirando a catastrófico, ya lo siento. En la siguiente prueba, por sugerencia de Deesix, en lugar de utilizar el portátil en el que trabajo, intentaré hacerlo con el móvil. Posiblemente el sonido sea más claro, con menos ruido y pueda no sonar tan opaco y mal. He hecho un par de pruebas de grabación y la verdad es que funciona mejor. En la lista de aplicaciones para el Ubuntu Touch que llevo en el móvil, encontré una aplicación de grabación que lo hace directamente a ogg... y enchufándole los auriculares con micrófono la captura es más aceptable que desde mi viejo portátil.

Hasta ahora, para eliminar el ruido, tengo que pasarle al audio dos veces el filtro de reducción de ruido de Audacity. Pero eso también hace que la voz suene como si estuviera metido en una cueva y en algún momento, juntándose por mi desgana al vocalizar, se pierda algún contenido. Por ello, en estos vídeos he añadido la opción de ponerles subtítulos, por si alguien no entiende muy bien lo que digo.

Mi forma de pronunciar el inglés

A propósito del anterior vídeo hay quien se empeñó en corregirme la forma de pronunciar algunos palabros de origen inglés. No tengo ganas de discutir, pero no voy a cambiar de estilo. Me resulta artificioso introducir vocablos ingleses en medio de una frase en castellano. Las siglas las seguiré deletreando tal y como se hace en castellano por lo mismo.

El otro día me eché unas risas al ver una entrevista a una periodista cubana, de parte de un periodista español y le preguntaba que con las restricciones de Internet en la isla, cómo era posible estar haciendo la entrevista... La respuesta fue algo así como que me conecto a través de una aplicación «bipién». El periodista español le preguntó qué aplicación era esa y repitió por «bipién». Aún sabiendo (por la cara del periodista) un poco más que él sobre redes, tardé un rato en darme cuenta que se refería a VPN. ¿Por qué? Porque es artificial, no esperas ─al menos yo no espero─ lenguas mezcladas.

Por otro lado, además, puestos a hacer esfuerzos creo que me pondré a esforzarme en pronunciar correctamente las palabras inglesas insertadas en una oración pensada en castellano, cuando vea que hay reciprocidad y hacen el mismo esfuerzo por pronunciar correctamente las palabras españolas en medio de una oración pensada en inglés. Así, cuando oiga a un inglés o estadounidense pronunciar correctamente «Los Ángeles», o «San Francisco», o «Toledo» o cualquier otro término, como «siesta» o «tortilla», me plantearé si debo hacer dicho esfuerzo. Recuerdo en un trabajo conjunto con un equipo norteamericano mi amigo «Vázquez» era «Bascuas», que terminó desistiendo de que lo pronunciaran correctamente. Sin embargo, sí debíamos pronunciar bien los suyos, e incluso hacer el esfuerzo de pronunciar a la inglesa apellidos como «Daias» (Díaz), porque se enfadaban de veras si mezclábamos palabras pronunciadas en castellano en medio de una frase en inglés, por no hacer ningún esfuerzo en comprenderla. Desde entonces (entre enero y abril de 2010), aunque a veces se me escapa alguna, procuro no pronunciar a la inglesa ninguna palabra que sepa cómo se escribe, en reciprocidad al trato recibido.

Dichos esfuerzos se los merecen más otras lenguas, ─no puedo decir que las domino, pero sí las /chapurreo/─, que sí intento pronunciar correctamente cuando utilizo alguna de sus palabras: como el catalán, el esperanto, o incluso el francés. Sin embargo, todas tienen sonidos que no son nativos de mi lengua materna (el castellano) y la pronunciación puede no ser exacta (sobre todo si hay una ll final en catalán que nunca he conseguido pronunciarla bien). Por tanto, ya me disculparán si no lo hago correctamente del todo.

Si, como digo, el objetivo es entendernos, es mejor no mezclar idiomas. Que por otro lado lo invaden todo. Incluso muy pocos parecen saber ya que en castellano la W se lee como una B y les oyes pronunciar güenceslao o güamba, en lugar de Benceslao o Bamba. O simplemente pronunciar cualquier nombre extranjero, ya sea alemán, sueco, holandés o incluso italiano o portugués, a la inglesa. Que recuerdo a un membrillo decir que íba a la «Feirou's concentreison» cuando íbamos a la concentración motorista de Faro (Portugal), si quería ser internacional podría haber dicho «Concentraçao de Faro» y hubiera quedado mejor.

Así pues, si te molesta cómo lo pronuncio silencias el audio y miras los subtítulos. Y hablando de idiomas, la música que he seleccionado está en Esperanto es de Martin Wiese (es sueco, no pronuncies «güeisa», recuerda: es sueco. Cuando se lo oí pronunciar a él mismo, pronunció «Biss»). Van tres canciones:

  • Pli ol nenio (Más que nada)
  • Superbazaro (Supermercado)
  • Anstataŭ letero (En lugar de [a modo de, en vez de] una carta)

Próximas entregas

Tengo intención, por concretar mejor el experimento y ver si voy cogiendo soltura con la edición de vídeo y la incomodidad que aún siento editando vídeo va desapareciendo con la práctica, editar otro vídeo. El tema sería la configuración de org-mode para utilizarlo como agenda y lo que quiero incluir:

  • Personalización de días de la semana y nombres de meses en las fechas.
  • Configuración de los diversos tipos de etiquetas.
  • Configuración de la captura de entradas para la agenda.
  • Tareas periódicas (diarias, semanales, mensuales, trimestrales, anuales).
  • La agenda y los distintos listados de tareas y filtros.
  • El uso del diario para eventos periódicos, honomásticas, cumpleaños y otras informaciones similares.

Si hay interés por el asunto, intentaré hacerlo más ameno (o fluido) que hasta ahora y ver si puedo hacerlo además con mejor sonido, grabando el sonido en directo mientras trabajo. Si bien no sería «hacer un directo», sería un equivalente: capturar una sesión en la que configuraría org-mode desde cero para gestionar una agenda. Aún contando con un guión más o menos detallado, los imponderables que sucedan, como errores en el código y demás, aportarían más frescura al discurso hablado.

El resultado

La primera parte:

La segunda parte:

Los enlaces, por si queréis verlos fuera del blog son los siguientes:

Conclusión

De momento, la tarea de editar vídeo sigue sin parecerme óptima. Un vídeo lo miras de principio a fin pero es complicado ir haciendo lo que hace la otra persona para que se te quede el procedimiento. Además un texto lo puedes empezar a leer por donde quieras, ir directamente al código, a un gráfico o a una explicación... en un vídeo es más complicado encontrar justo lo que necesitas consultar. Por tango, ¿este blog se convertirá en vlog? ─como me ha preguntado alguno─, pues no: me gusta escribir y contar cosas; cosas que sé o que creo saber, cosas que siento o cosas que vivo. Un vídeo contándolas no me resulta igual de atractivo. Así que no, no me voy a pasar al vídeo, aunque puedo hacer alguno de vez en cuando.

-1:-- Introducción en vídeo a org-mode (Post )--L0--C0--July 19, 2021 07:31 PM

Notxor tiene un blog: Introducción en vídeo a org-mode

Vengo con otro experimento. Como la sensación del anterior vídeo no fue demasiado buena, no me siento tan productivo editando vídeo como me siento productivo escribiendo un artículo. Pienso que es por falta de práctica. Después de haber editado uno, me planteé hacer otro, a ver si las herramientas, ahora más familiares, me permitían funcionar mucho más rápido. Además estoy valorando hacer un tercero, a ver si mejoro algunas cosas. Por ejemplo, el sonido (que es penoso).

El vídeo actual quiere presentar, por encima, las capacidades de org-mode y las cosas que se pueden hacer. No en profundidad, porque era un vídeo planeado para 20 ó 30 minutos. Sin embargo, va montado en dos partes. Cuando tenía casi terminado el montaje del vídeo y estaba montando y ajustando el sonido, kdenlive me lanzó un error y algo debió quedar mal en el fichero del proyecto, porque no conseguía abrirlo y cuando lo hacía petaba la aplicación.

Al final pude arreglar un poco el fichero, gracias a que es XML y parte del trabajo no se perdió. El problema es que lo tuve que dividir en dos partes. Así pues, el vídeo no es un vídeo, que son dos. Además, la limitación de tamaño en la plataforma de vídeo tampoco me hubiera permitido hacerlo en un sólo vídeo, porque el archivo no puede superar los 100Mb y todo junto, no sé si los hubiera sobrepasado.

El contenido del vídeo

Cualquiera que haya trabajado con Emacs encontrará el contenido demasiado escueto. Apenas doy unas pinceladas de lo que puede hacer org-mode. He tenido que dejar en el tintero muchas cosas para no alargar demasiado el vídeo. Algo que me resulta más molesto que en los artículos escritos, que pueden ser más largos o más cortos, dependiendo del tema que se hable, pero es más difícil pensar en el aburrimiento del que lo ve.

Hablo en general de cómo escribir un fichero org y cómo exportarlo a otro formato, en concreto a HTML. Por desglosarlo más despacio, se ven los aspectos básicos sobre:

  • Estilos de fuentes
  • Cabecera de archivo
  • Estructura del documento
  • Enlaces (tanto internos como externos)
  • Tablas
  • Gestión de tareas, fechas y listas (etiquetas)
  • Bloques de código
  • Exportación del documento a otros formatos (HTML)

El resultado se puede ver en el siguiente enlace:

prueba-org-mode.html

y el fichero org que lo genera en

prueba-org-mode.org

Si no has trabajado nunca con org-mode y es tu primer contacto, puedes bajarte el archivo org y juguetear con él.

¿Vais a aprender algo con el vídeo? Pues si ya utilizas Emacs y org-mode, puedes prescindir de perder el tiempo viéndolo, porque ya digo que todo es muy básico y con seguridad es muy posible que encuentres más interesante la música de fondo que he puesto que lo que digo y muestro.

Los vídeos

Como vengo diciendo, al final son dos vídeos de introducción a org-mode. El sonido es penoso tirando a catastrófico, ya lo siento. En la siguiente prueba, por sugerencia de Deesix, en lugar de utilizar el portátil en el que trabajo, intentaré hacerlo con el móvil. Posiblemente el sonido sea más claro, con menos ruido y pueda no sonar tan opaco y mal. He hecho un par de pruebas de grabación y la verdad es que funciona mejor. En la lista de aplicaciones para el Ubuntu Touch que llevo en el móvil, encontré una aplicación de grabación que lo hace directamente a ogg... y enchufándole los auriculares con micrófono la captura es más aceptable que desde mi viejo portátil.

Hasta ahora, para eliminar el ruido, tengo que pasarle al audio dos veces el filtro de reducción de ruido de Audacity. Pero eso también hace que la voz suene como si estuviera metido en una cueva y en algún momento, juntándose por mi desgana al vocalizar, se pierda algún contenido. Por ello, en estos vídeos he añadido la opción de ponerles subtítulos, por si alguien no entiende muy bien lo que digo.

Mi forma de pronunciar el inglés

A propósito del anterior vídeo hay quien se empeñó en corregirme la forma de pronunciar algunos palabros de origen inglés. No tengo ganas de discutir, pero no voy a cambiar de estilo. Me resulta artificioso introducir vocablos ingleses en medio de una frase en castellano. Las siglas las seguiré deletreando tal y como se hace en castellano por lo mismo.

El otro día me eché unas risas al ver una entrevista a una periodista cubana, de parte de un periodista español y le preguntaba que con las restricciones de Internet en la isla, cómo era posible estar haciendo la entrevista... La respuesta fue algo así como que me conecto a través de una aplicación «bipién». El periodista español le preguntó qué aplicación era esa y repitió por «bipién». Aún sabiendo (por la cara del periodista) un poco más que él sobre redes, tardé un rato en darme cuenta que se refería a VPN. ¿Por qué? Porque es artificial, no esperas ─al menos yo no espero─ lenguas mezcladas.

Por otro lado, además, puestos a hacer esfuerzos creo que me pondré a esforzarme en pronunciar correctamente las palabras inglesas insertadas en una oración pensada en castellano, cuando vea que hay reciprocidad y hacen el mismo esfuerzo por pronunciar correctamente las palabras españolas en medio de una oración pensada en inglés. Así, cuando oiga a un inglés o estadounidense pronunciar correctamente «Los Ángeles», o «San Francisco», o «Toledo» o cualquier otro término, como «siesta» o «tortilla», me plantearé si debo hacer dicho esfuerzo. Recuerdo en un trabajo conjunto con un equipo norteamericano mi amigo «Vázquez» era «Bascuas», que terminó desistiendo de que lo pronunciaran correctamente. Sin embargo, sí debíamos pronunciar bien los suyos, e incluso hacer el esfuerzo de pronunciar a la inglesa apellidos como «Daias» (Díaz), porque se enfadaban de veras si mezclábamos palabras pronunciadas en castellano en medio de una frase en inglés, por no hacer ningún esfuerzo en comprenderla. Desde entonces (entre enero y abril de 2010), aunque a veces se me escapa alguna, procuro no pronunciar a la inglesa ninguna palabra que sepa cómo se escribe, en reciprocidad al trato recibido.

Dichos esfuerzos se los merecen más otras lenguas, ─no puedo decir que las domino, pero sí las /chapurreo/─, que sí intento pronunciar correctamente cuando utilizo alguna de sus palabras: como el catalán, el esperanto, o incluso el francés. Sin embargo, todas tienen sonidos que no son nativos de mi lengua materna (el castellano) y la pronunciación puede no ser exacta (sobre todo si hay una ll final en catalán que nunca he conseguido pronunciarla bien). Por tanto, ya me disculparán si no lo hago correctamente del todo.

Si, como digo, el objetivo es entendernos, es mejor no mezclar idiomas. Que por otro lado lo invaden todo. Incluso muy pocos parecen saber ya que en castellano la W se lee como una B y les oyes pronunciar güenceslao o güamba, en lugar de Benceslao o Bamba. O simplemente pronunciar cualquier nombre extranjero, ya sea alemán, sueco, holandés o incluso italiano o portugués, a la inglesa. Que recuerdo a un membrillo decir que íba a la «Feirou's concentreison» cuando íbamos a la concentración motorista de Faro (Portugal), si quería ser internacional podría haber dicho «Concentraçao de Faro» y hubiera quedado mejor.

Así pues, si te molesta cómo lo pronuncio silencias el audio y miras los subtítulos. Y hablando de idiomas, la música que he seleccionado está en Esperanto es de Martin Wiese (es sueco, no pronuncies «güeisa», recuerda: es sueco. Cuando se lo oí pronunciar a él mismo, pronunció «Biss»). Van tres canciones:

  • Pli ol nenio (Más que nada)
  • Superbazaro (Supermercado)
  • Anstataŭ letero (En lugar de [a modo de, en vez de] una carta)

Próximas entregas

Tengo intención, por concretar mejor el experimento y ver si voy cogiendo soltura con la edición de vídeo y la incomodidad que aún siento editando vídeo va desapareciendo con la práctica, editar otro vídeo. El tema sería la configuración de org-mode para utilizarlo como agenda y lo que quiero incluir:

  • Personalización de días de la semana y nombres de meses en las fechas.
  • Configuración de los diversos tipos de etiquetas.
  • Configuración de la captura de entradas para la agenda.
  • Tareas periódicas (diarias, semanales, mensuales, trimestrales, anuales).
  • La agenda y los distintos listados de tareas y filtros.
  • El uso del diario para eventos periódicos, honomásticas, cumpleaños y otras informaciones similares.

Si hay interés por el asunto, intentaré hacerlo más ameno (o fluido) que hasta ahora y ver si puedo hacerlo además con mejor sonido, grabando el sonido en directo mientras trabajo. Si bien no sería «hacer un directo», sería un equivalente: capturar una sesión en la que configuraría org-mode desde cero para gestionar una agenda. Aún contando con un guión más o menos detallado, los imponderables que sucedan, como errores en el código y demás, aportarían más frescura al discurso hablado.

El resultado

La primera parte:

La segunda parte:

Los enlaces, por si queréis verlos fuera del blog son los siguientes:

Conclusión

De momento, la tarea de editar vídeo sigue sin parecerme óptima. Un vídeo lo miras de principio a fin pero es complicado ir haciendo lo que hace la otra persona para que se te quede el procedimiento. Además un texto lo puedes empezar a leer por donde quieras, ir directamente al código, a un gráfico o a una explicación... en un vídeo es más complicado encontrar justo lo que necesitas consultar. Por tango, ¿este blog se convertirá en vlog? ─como me ha preguntado alguno─, pues no: me gusta escribir y contar cosas; cosas que sé o que creo saber, cosas que siento o cosas que vivo. Un vídeo contándolas no me resulta igual de atractivo. Así que no, no me voy a pasar al vídeo, aunque puedo hacer alguno de vez en cuando.

-1:-- Introducción en vídeo a org-mode (Post )--L0--C0--July 17, 2021 07:31 PM

Notxor tiene un blog: Videotutoriales

A veces podemos tener la idea de que las cosas entran por los ojos y un buen vídeo nos puede ahorrar muchas explicaciones. Esto puede ser cierto y falso a la vez. No voy a entrar en muchos detalles, porque creo que se verá de manera muy sencilla qué es lo que quiero expresar con una serie de proyectos que estoy realizando. Se verá que cada cosa tiene sus ventajas y sus inconvenientes y que es posible que lo que es bueno para mostrar un proyecto no lo sea para mostrar otro. Se trata de los siguientes temas.

  1. Realizar un vídeo con mi forma de trabajar con Emacs.
  2. Trabajar en un proyecto de programación, convirtiendo un proyecto incipiente en programación literaria.
  3. Ver si es posible realizar algunas de las entradas del blog en forma de vídeo utilizando las herramientas a mi disposición:
    • ffmpeg
    • OBS
    • kdenlive
    • audacity
    • screenkey

Entre los posibles inconvenientes está que mi aterciopelada voz no se presta para ser grabada y mi incapacidad de aclararme conmigo mismo sobre la marcha impiden que la captura del audio sea fresca. Para eso siempre recurro a escribir lo que pienso, porque decir, digo muchas tonterías. Aún teniendo el guión escrito, me encuentro con algunos impedimentos técnicos derivados de lo justo que es mi equipación para realizar estas tareas.

Captura de pantalla con ffmpeg

De primeras pensé en hacerlo al estilo yutuber pofesioná capturándolo todo con el OBS Studio mientras trabajaba. No hubo manera de hacerlo correctamente. Aunque en el vídeo final hay algún trozo capturado con OBS la mayoría del mismo está capturado con ffmpeg utilizando el comando:

ffmpeg -f pulse -i default -f x11grab -framerate 10 -i :0.0 -q:v 5 fichero-video.mp4

Viendo que mi tarjeta de sonido hace ruido como para ocultar el despegue de un reactor, eliminé la captura del sonido:

ffmpeg -f x11grab -framerate 10 -i :0.0 -q:v 5 fichero-video.mp4

Esta captura es directa y tendrá la resolución que tenga configurada la pantalla. En mi caso, las X tienen una resolución de 1920x1020 y a esa resolución quería el vídeo, para que el texto se leyera con facilidad.

La captura se realiza además activando el programa screenkey para mostrar qué teclas, y qué botón del ratón, voy pulsando mientras trabajo. Esto facilitará mucho las explicaciones, porque podemos obviar los listados interminables de las combinaciones de teclas.

Ventajas e inconvenientes del videotutorial

Todo lo que se me ocurre como ventaja es que es más visual, ese sería su principal punto a favor. Se ve cómo se trabaja de forma directa, qué teclas se pulsan y qué reacciones tiene Emacs. Para alguien que se inicia en el uso de este editor es posible que vea que el trabajo es tan fluido como con cualquier otro editor y se anime a probarlo más a fondo.

Como digo, eso, quizá, sea su único punto a favor... el resto me he encontrado con un montón de inconvenientes. Los enumero y explico algunos:

  • Tenéis que soportar mi aterciopelada voz (podría ser considerado como tortura en algunas culturas, lo sé).
  • El flujo de trabajo se me hace muy raro y farragoso (con lo fácil que es escribir y ya).
  • Estoy limitado por el equipo con el cuento (soy pobre, os recuerdo que podéis donar para comprar nuevo equipo si os molan los vídeos).

Quizá el flujo de trabajo sea raro también, por una cuestión de potencia del equipo con el que trabajo. Mi ordenador es un portátil con un intel i5 y 4Gb de RAM de hace 11 años. El tema de gráficos y proceso de sonido le vienen a estas alturas ya un poco justos, por no decir cuesta arriba.

Como habéis visto antes la captura de vídeo la he hecho principalmente con ffmpeg capturando a 10fps. Para ver cómo evoluciona el texto sobre la pantalla es suficiente. Lo he hecho así por la imposibilidad, o desconocimiento, de cómo conseguir la misma resolución con OBS. Este programa se empeña en comprimir el vídeo y en algunos momentos el texto se hacía ilegible. Sin embargo, lo he utilizado a la hora de capturar las pruebas del código en el entorno gráfico. OBS sincroniza bien el sonido con la imagen, sin embargo, al intentar hacer la captura más precisa con ffmep el sonido se capturaba con 1,5 segundos de retardo, aproximadamente. Probé un montón de parámetros para hacer la captura y después de perder mucho tiempo, me decidí a capturar esa parte con OBS.

Capturar vídeo con ffmpeg y OBS y sonido con Audacity es lo de menos: luego hay que montarlo todo y para eso utilicé kdenlive. Juntar todas las pistas con un poco de coherencia supongo que será cogerle el tranquillo al programa. El problema es que al generar el vídeo tengo limitadas las posibilidades. Me he tenido que pelear con los programas para conseguir la resolución que quería. Además de tener que reducir la calidad, el tiempo que tarda en generar el vídeo, bloqueándome cualquier otro trabajo, es enorme.

El principal problema con el sonido es la falta de aparatos solventes. Toda la grabación de voz se realizó con unos auriculares con micrófono. Sin embargo, el hardware produce tanto ruido que posteriormente, con audacity debía pasarle a la pista varias veces el filtro de reducción de ruido para conseguir algo decente. El resultado es que la voz parece estar metida en una cueva. Aunque aún presenta ruido que ha sido enmascarado por una bonita melodía de fondo.

Flujo de trabajo

Mi expectativa era poder grabar el vídeo mientras iba haciendo el trabajo. Como mucho al final sería cortar y pegar con kdenlive y todo sería fácil, pero no ha sido así.

Primero, al capturar con OBS me encontraba que se empeñaba en comprimir el vídeo y estropeaba la visualización del texto en pantalla. También intenté capturar el vídeo con ffmpeg, reduciendo los fps. El problema de la captura en directo es de mi hardware de sonido, el problema de visualización del texto se puede solventar con unas fuentes más grandes, pero el ruido parásito de la tarjeta de sonido, no.

Por todos esos impedimentos, al final se desechó todo el sonido grabado a la par que el vídeo y se grabó uno específicamente para sustituirlo. La captura del sonido la he tenido que hacer, además, en varias sesiones. Necesitaba la casa en silencio, así que aprovechaba cuando la familia dormía, el perro del vecino no ladraba, las tórtolas no se llamaban unas a otras, el camión de la basura no pasaba y, en fin, cuando encontraba un poco de paz y sosiego para hacerlo. Si en el vídeo, en algunas ocasiones, os parece que estoy susurrando, es que efectivamente estaba susurrando porque cuando lo grabé todo el mundo dormía. Ya lo siento.

Una vez registradas las imágenes y el sonido, hay que montarlo en el vídeo. La herramienta elegida ha sido kdenlive como ya he dicho antes y soy muy novato en estas lides. Se puede apreciar que ni siquiera he sido capaz de alinear bien los títulos generados. Tiene tantos pichorros que me pierdo muchas veces y aunque sé lo que quiero conseguir no sé muy bien cómo hacerlo.

Resultados

El resultado producido por el vídeo se puede ver en el repositorio del en codeberg y el vídeo es éste:

O directamente en peertube:

https://video.nogafam.es/videos/watch/0c166161-8d59-4a48-9c87-feb55bb38c46

Conclusiones

Con el vídeo soy menos productivo, no creo que pudiera mantener un ritmo regular de publicar. Que no es que publique mucho, pero escribir un post me lleva unas pocas horas, mientras que editar el vídeo me lleva unos cuantos días. Además la falta de material adecuado: un ordenador más potente, una tarjeta de sonido decente, un micrófono adecuado, un espacio insonorizado que me permita grabar cuando quiera y no cuando pueda, etc.

Ya me contaréis que os parece el experimento. Yo he visto el vídeo ya unas cuantas veces mientras lo montaba, lo editaba y lo publicaba; seguro que más fallos y pegas que le he encontrado yo ya no le vais a encontrar. Pero ahí queda como referencia a superar en los próximos vídeos (que viendo cómo ha quedado, es fácil hacerlo)

También aprovecho para agradecer a https://nogafam.es por proporcionarme el espacio para alojar el vídeo de pruebas.

-1:-- Videotutoriales (Post )--L0--C0--July 02, 2021 07:32 AM

Notxor tiene un blog: Fuente con ligaduras Fira Code

Venía preparado para escribir un largo artículo sobre algo, que pensado más despacio parece una chorrada y hecho más deprisa lo es: conseguir que nuestro querido Emacs muestre ligaduras en sus fuentes. A mí no me produce especial atracción, es algo muy hipster, sin embargo, aprovechando que tengo dicha fuente instalada, y la utilizo como fuente fija por defecto en la terminal, en hexchat, en firefox, en... bueno, en casi todos los programas de uso diario menos en Emacs.

En realidad, este artículo es el resultado de una conversación donde un friki mostraba las bellas ligaduras en su editor de código y me retaba a hacerlo en mi feo Emacs. El pobrecico aún no ha interiorizado que cualquier cosa que haga su editor, seguramente, lo hace Emacs desde hace mucho más tiempo. Así pues me puse a ello.

Me acordé de fira-code-mode y de que ya tenía las fuentes instaladas en mi sistema. Lo bueno, es que si no las tienes tampoco pasa nada, el mismo paquete te las instala. Pero vamos por pasos.

  1. Instalar el paquete

    Como muchas veces hemos visto ya:

    M-x package-install RET fira-code-mode
    
  2. Instalar las fuentes

    En mi caso ya las tenía instaladas. Pero hay que hacer un pequeño apunte: el paquete las busca en ~/.local/share/fonts/. Si no las tienes ahí crea un enlace o copia las fuentes... o de forma aún más sencilla:

    M-x fira-code-mode-install-fonts
    

    Ese simple comando instala las fuentes necesarias en el sitio donde las busca, así no tendrás problemas.

  3. Establecer la fuente por defecto

    Una vez tenemos las fuentes instaladas y el modo preparado, hay que decirle a Emacs que utilice esa fuente como predeterminada del editor. Lo más rápido en este caso es recurrir al menú Options -> Set default font.... La otra opción, para los que les gusta el barro, es utilizar el siguiente código:

    (custom-set-faces
     '(default ((t (:family "Fira Code" :foundry "CTDB" :slant normal :weight normal :height 98 :width normal)))))
    

    Ten cuidado, porque sólo debe haber un custom-set-faces en el init.el y es posible que ya exista, por lo que sólo tienes que modificarlo si ya existe.

  4. Activar el modo

    Debes decidir si quieres ligaduras para todo o sólo en algunos casos, porque la configuración variará. Para la versión completa sólo necesitas activar global-fira-code-mode y ya está. En mi caso, como no quiero que lo utilice en todos los buffers, sólo en los de programación o en org-mode he establecido los ganchos adecuados:

    (add-hook 'prog-mode-hook 'fira-code-mode)
    (add-hook 'org-mode-hook 'fira-code-mode)
    

    Por supuesto, puedes activar o desactivar el modo en cada buffer concreto de manera manual, llamando al comando M-x fira-code-mode

    Por ejemplo, para conseguir verlo tal que:

    Captura-pantalla_comparacion-ligaduras.png

    Como se puede apreciar en la imagen anterior, la parte izquierda es un buffer de una de las terminales de Emacs mostrando el texto plano de un fichero hecho para probar las ligaduras. La parte derecha es ese mismo fichero en un buffer de edición con las ligaduras activadas. En este caso, como es un fichero .txt tuve que activar el modo manualmente.

    Por si a alguien le interesa para hacer pruebas, el contenido del fichero es el siguiente:

         .= ..= .- := ::= =:= __
          == != === !== =/= =!=
    
     <-< <<- <-- <- <-> -> --> ->> >->
     <=< <<= <==    <=> => ==> =>> >=>
        >>= >>- >- <~> -< -<< =<<
            <~~ <~ ~~ ~> ~~>
    
         <<< << <= <>  >= >> >>>
       {. {| [| <:  ✓  :> |] |} .}
       <||| <|| <| <|> |> ||> |||>
    
                <$ <$> $>
                <+ <+> +>
                <* <*> *>
    
           \  \\  /* */  /// //
          </ <!--  </>  --> />
          0xF 9:45 m-x *ptr www
    
           ;; :: ::: !! ?? %% && 
          || .. ... ..< .? ?. ?:
           -- --- ++ +++ ** ***
    
              ~= ~- -~ ~@
              ^= ?= /= /==
            -| _|_ |- |= ||=
            #! #= ## ### ####
          #{ #[ ]# #( #? #_ #_(
             
             
    a*b a*A B*b A*B *a *A a* A*
    a-b a-A B-b A-B -a -A a- A-
    a+b a+A B+b A+B +a +A a+ A+
    a:b a:A B:b A:B :a :A a: A:
    

Conclusión

¿Para qué sirven las ligaduras? La respuesta corta es para hacer el texto más bonito, algunos dirán más legible. Hay quien prefiere cada carácter en su sitio mientras programa.

Como va en gustos, tampoco le voy a dar muchas vueltas. Ya que me puse con ello, se quedará en la configuración, pero no descarto que me canse y finalmente desaparezcan las ligaduras de mi Emacs. Nunca se sabe, porque hasta ahora he vivido perfectamente sin ellas y tampoco creo que aporten nada imprescindible para mi trabajo.

-1:-- Fuente con ligaduras Fira Code (Post )--L0--C0--June 24, 2021 07:30 AM

Blog uGeek: Wallabag en Emacs

Wallabag en Emacs

Hay publicado un nuevo paquete de wallabag para Emacs en GitHub. De momento no está disponible en Melpa u otros repositorios, así que si quieres hacer uso, tienes que clonar...

Sigue leyendo el post completo de Wallabag en Emacs

Visita uGeek Blog

Visita uGeek Podcast

Suscribete al Blog de uGeek

Suscribete al Podcast de uGeek

-1:-- Wallabag en Emacs (Post )--L0--C0--April 15, 2021 05:50 PM

Maxxcan's Site: Por qué uso un editor avanzado a diario

06/03/2021
Article image

Abstract

Introducción

Para muchas personas que solemos crear contenido de algún tipo la mayor parte del día delante de un ordenador pasamos delante de algún programa en el que podemos escribir bien sea programas informáticos, libros o documentos de lo más variado de los temas, contenido para la red o simplemente rellenando o controlando nuestra agenda y/o lista de tareas.

El estar tanto tiempo delante de ese tipo de programas nos da a entender que es bueno tener buenas herramientas las cuales nos ahorren tiempo y maximicen nuestra productividad y optimicen nuestro esfuerzo.

Herramientas necesarias

Al igual que si somos corredores de coches, motos, médicos, etc, queremos las mejores herramientas para el tema de la creación de contenidos ocurre lo mismo y no solo me refiero a los programas informáticos sino también a cosas como nuestro teclado o nuestro lugar de trabajo, silla, mesa, etc.

Qué es un editor avanzado

Un editor es una forma más directa y clara de crear nuestro contenido. Al no usar programas wysiwyg (what you see is what you get), sabemos a ciencia cierta lo que hay en nuestro fichero de texto plano, al contrario de lo que pasa con los otros programas.

Por supuesto, por lo general para las personas que solo quieren generar texto sin ningún formato un editor es suficiente, esto también vale para una persona que haga un programa de ordenador ya que al ordenador no le importan lo bonito o legible que sea el texto. El programador tiene otras necesidades que están más relacionadas a tener herramientas que le faciliten o gane velocidad a la hora de escribir el código fuente que el ordenador interpretará o compilará, para ellos están los IDEs (Entorno de desarrollo integrado)

El tema es que también hay una forma de generar documentos bien formados, visualmente atractivos y de una manera más rápida usando editores de texto avanzados tal como vamos a ver.

El problema de usar IDEs o programas wysiwyg es que suelen ser programas pesados que en ocasiones requieren ordenadores de última generación para hacerlos funcionar.

Editores avanzados

Con los editores avanzados podemos optar a las mejoras de un programa que nos permita programar al igual que los IDEs y además también podemos crear documentación de una altísima calidad aplicando eso sí, algunas técnicas más parecidas a la programación pero sin llegar para nada a esta.

Vim

Es una versión mejorada del editor vi, que es un editor que está en todos los sistemas Unix. Su autor, Bram Moolenaar, presentó la primera versión en 1991, fecha desde la que ha experimentado muchas mejoras.

Vim es un editor hecho por programadores para programadores. Para facilitar la programación, Vim dispone de un modo "editar, compilar, corregir". De la misma forma que los entornos de desarrollo integrados, puede editar el código fuente además llamar a un compilador externo, e interpretar sus resultados.

vim.png

Más información en Wikipedia

Emacs

Emacs es un editor de texto con una gran cantidad de funciones, muy popular entre programadores y usuarios técnicos. GNU Emacs es parte del proyecto GNU y la versión más popular de Emacs con una gran actividad en su desarrollo. El manual de GNU Emacs lo describe como "un editor extensible, personalizable, auto-documentado y de tiempo real_."

Fue escrito en 1975 por Richard Stallman junto con Guy Steele.

200px-EmacsIcon.svg.png

Por qué Emacs

Hay muchas razones por las que usar Emacs.

Veremos algunas:

  1. Su gran velocidad y poca necesidad de recursos
  2. Es mucho más que un editor de texto
  3. Su gestor de paquetes
  4. Sus cientos de paquetes y modos
  5. Su productividad
  6. Sus combinaciones de teclas
  7. Que funciona igual tanto en modo texto como en modo gráfico
  8. Org-mode
  9. Magit
  10. Sus temas
  11. Spacemacs
  12. Su interfaz y forma de trabajar unificada.
-1:-- Por qué uso un editor avanzado a diario (Post )--L0--C0--March 06, 2021 09:14 PM

Maxxcan's Site: Introducción a org-static-blog

Introducción

Org-static-blog es un generador de blog estático. Está enfocado en la simplicidad. Todos los ficheros son simples ficheros org-mode en un directorio. El único requerimiento es que esos ficheros tengan un #+TITLE y un #+DATE, y opcionalmente, #+FILETAGS.

Instalación

Para instalarlo es tan sencillo como hacerlo desde el gestor de paquetes de Emacs o con el comando package-install, siempre claro que tengamos en nuestra configuración añadido los repositorios marmalade y/o melpa-stable.

Como recordatorio para añadir el repositorio melpa-stable solo hay que añadir lo siguiente a nuestro fichero de configuración principal de Emacs.

(require 'package)
(setq package-archives (append package-archives
			       '(("melpa" . "http://melpa.org/packages/"))))
(package-initialize)

Configuración

Explicación

Para org-static-blog, un blog consiste en 6 partes:

  1. Los post en sí. Todo fichero org en el directorio org-static-blog-posts es un post en el blog. Cada post es renderizado como su propia página HTML.
  2. La página índice que contiene los últimos post en una sola página. El número de entradas en el índice puede ser modificada usando org-static-blog-index-length.
  3. Opcionalmente muestra una previsualización de un párrafo en vez del post entero en el índice usando org-static-blog-use-preview.
  4. Una página de archivo que lista las fechas y las cabeceras de todos los post publicados.
  5. El fichero XML RSS para los agregadores de noticias.
  6. Cada post del blog puede tener etiquetas, y cada etiqueta enlace a las páginas que tienen las mismas etiquetas. Además de una página con todas las etiquetas es creada con una lista de las fechas de publicación y la cabecera de todos los post. Esta característica solo será habilitada si habilitamos la opción org-static-blog-enable-tags.

Cada página HTML se puede personalizar con las siguientes opciones.

  1. Con la variable org-static-blog-page-header insertamos el código que queramos en la sección <head> de cada página. Esto incluye el CSS y el Javascript de nuestro blog.
  2. El contenido de org-static-blog-page-preamble es insertado justo antes del contenido de cada página. Es un buen sitio para poner las cabeceras o menús del blog.
  3. El contenido de org-static-blog-postamble es insertado después del contenido de cada página generada. Aquí es donde se suele incluir el copyright u otra información relevante del blog.

También podemos personalizar el fichero RSS configurando org-static-blog-rss-extra. Su contenido será localizado a la derecha antes de la secuencia de posts. Por ejemplo podemos añadir el icono del RSS o decir que el blog está creado con org-static-blog, por ejemplo.

Algunos textos como "Other posts", "Tags", etc que org-static-blog incluye por defecto. Estos están en inglés, pero para cambiar el lenguaje podemos cambiar el valor de org-static-blog-langcode.

Configuración de ejemplo

Si todo lo anterior te ha parecido muy largo lo más seguro es que con este ejemplo lo entiendas rápidamente:

  (setq org-static-blog-publish-title "Titulo del blog")
  (setq org-static-blog-publish-url "https://direccion-del-blog")
  (setq org-static-blog-publish-directory "~/proyectos/blog/publish/")
  (setq org-static-blog-posts-directory "~/proyectos/blog/posts/")
  (setq org-static-blog-drafts-directory "~/proyectos/blog/drafts/")
  (setq org-static-blog-enable-tags t)
  (setq org-export-with-toc nil)
  (setq org-export-with-section-numbers nil)
  ;; Esta cabecera es insertada en la sección <head> de cada página web:
  ;; (crearemos una hoja de estilos en ~/proyectos/blog/static/style.css
  ;; y el favicon en ~/proyectos/blog/static/favicon.ico)
  (setq org-static-blog-page-header
	  "<meta name=\"author\" content=\"Tu nombre\">
	  <meta name=\"referrer\" content=\"no-referrer\">
	  <link href= \"static/style.css\" rel=\"stylesheet\" type=\"text/css\" />
	  <link rel=\"icon\" href=\"static/favicon.ico\">")
  ;; Esto se inserta al principio de la sección <body> de toda página:
  ;; Esto en particular crea un <div> con un simple enlace a la cabecera
  (setq org-static-blog-page-preamble
	"<div class=\"header\">
	    <a href=\"https://maxxcan.com\">Mi Blog</a>
	  </div>")
  ;; Esta sección es insertada al final del <body> de cada página:
  ;; Esto en particular crea un <div> con un enlace a la página de los archivos y a la licencia
(setq org-static-blog-page-postamble
"<div id=\"archive\">
<a href=\"https://www.maxxcan.com/archive.html\"> Otros Posts</a>
</div>
<center><a rel=\"license\" href=\"https://creativecommons.org/licenses/by-sa/3.0/\"><img alt=\"Creative Commons License\" 
style=\"border-width:0\" src=\"https://i.creativecommons.org/l/by-sa/3.0/88x31.png\" /></a><br />
<span xmlns:dct=\"https://purl.org/dc/terms/\" href=\"https://purl.org/dc/dcmitype/Text\" 
property=\"dct:title\" rel=\"dct:type\">Maxxcan.com</span> by 
<a xmlns:cc=\"https://creativecommons.org/ns#\" href=\"https://www.maxxcan.com\" 
property=\"cc:attributionName\" rel=\"cc:attributionURL\">
Maxxcan Fox</a> is licensed under a <a rel=\"license\"
 href=\"https://creativecommons.org/licenses/by-sa/3.0/\">Creative Commons Attribution-ShareAlike 3.0 Unported License</a>.
</center>")
  ;; Este código HTML es insertado en la página del índice entre el preámbulo y los posts del blog 
  (setq org-static-blog-index-front-matter
	  "<h1> Bienvenido a mi blog </h1>\n")

Otras configuraciones

En la página del autor podemos encontrar más configuraciones, aunque sabiendo un poco Javascript toda configuración es posible. Por ejemplo siqueremos añadir comentarios con disqus podemos añadir el siguiente código al configurar el org-static-blog-postamble:

(setq org-static-blog-page-postamble  
   "<div id=\"archive\">  
   <a href=\"https://maxxcan.com/archive.html\">Otros posts</a>  
   </div>  
   <center><button id=\"disqus_button\" onclick=\"load_disqus()\">Load Disqus Comments</button></center>  
   <div id=\"disqus_thread\"></div>  
   <script type=\"text/javascript\">  
   function load_disqus() {  
   var dsq = document.createElement('script');  
   dsq.type = 'text/javascript';  
   dsq.async = true;  
   dsq.src = 'https://bastibe.disqus.com/embed.js';  
   (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);  
   document.getElementById('disqus_button').style.visibility = 'hidden';  
   };  
   </script>  
   <center><a rel=\"license\" href=\"https://creativecommons.org/licenses/by-sa/3.0/\"><img alt=\"Creative Commons  
   License\" style=\"border-width:0\" src=\"https://i.creativecommons.org/l/by-sa/3.0/88x31.png\" /></a><br /><span  
   xmlns:dct=\"https://purl.org/dc/terms/\" href=\"https://purl.org/dc/dcmitype/Text\" property=\"dct:title\"  
   rel=\"dct:type\">bastibe.de</span> by <a xmlns:cc=\"https://creativecommons.org/ns#\" href=\"https://bastibe.de\"  
   property=\"cc:attributionName\" rel=\"cc:attributionURL\">Maxxcan</a> is licensed under a <a rel=\"license\"  
   href=\"https://creativecommons.org/licenses/by-sa/3.0/\">Creative Commons Attribution-ShareAlike 3.0 Unported  
   License</a>.</center>")  

Añadiendo la licencia y la posibilidad de usar Disqus como sistema de comentarios. También podríamos añadir nuestro propio sistema si conocemos el Javascript necesario.

Mi configuración

Además de lo visto por si puede ser de ayuda dejo aquí mi propia configuración:

(setq org-static-blog-publish-title "Mi Blog Personal sobre Cosas que discurren")
(setq org-static-blog-publish-url "https://www.maxxcan.com/")
(setq org-static-blog-publish-directory "~/Documentos/blog/publish")
(setq org-static-blog-posts-directory "~/Documentos/blog/posts/")
(setq org-static-blog-drafts-directory "~/Documentos/blog/drafts/")
(setq org-static-blog-enable-tags t)
(setq org-export-with-toc nil)
(setq org-export-with-section-numbers nil)
(setq org-static-blog-langcode "es")
(setq org-static-blog-use-preview t)
(setq org-static-blog-preview-link-p t)
(setq org-static-blog-preview-convert-titles t)
(setq org-static-blog-preview-ellipsis "Sigue leyendo... / Continue reading...")

;; This header is inserted into the <head> section of every page:
;;   (you will need to create the style sheet at
;;    ~/projects/blog/static/style.css
;;    and the favicon at
;;    ~/projects/blog/static/favicon.ico)
(setq org-static-blog-page-header
      "<meta name=\"author\" content=\"Maxxcan Fox\">
<meta name=\"referrer\" content=\"no-referrer\">
<link href= \"static/style.css\" rel=\"stylesheet\" type=\"text/css\" />
<link href= \"static/code.css\" rel=\"stylesheet\" type=\"text/css\" />
<link rel=\"icon\" href=\"static/favicon.ico\">")

;; This preamble is inserted at the beginning of the <body> of every page:
;;   This particular HTML creates a <div> with a simple linked headline
(setq org-static-blog-page-preamble
      "<div class=\"header\">
  <a href=\"https://www.maxxcan.com\">Blog Personal de Maxxcan Fox</a>
</div>")

;; This postamble is inserted at the end of the <body> of every page:
;;   This particular HTML creates a <div> with a link to the archive page
;;   and a licensing stub.
(setq org-static-blog-page-postamble
      "<div id=\"archive\">
<a href=\"https://www.maxxcan.com/rss.html\">RSS</a></div>
<center><a rel=\"license\" href=\"https://creativecommons.org/licenses/by-sa/3.0/\"><img alt=\"Creative Commons License\" 
style=\"border-width:0\" 
src=\"https://i.creativecommons.org/l/by-sa/3.0/88x31.png\" /></a><br />
<span xmlns:dct=\"https://purl.org/dc/terms/\" href=\"https://purl.org/dc/dcmitype/Text\" 
property=\"dct:title\" rel=\"dct:type\">Maxxcan.com</span> by 
<a xmlns:cc=\"https://creativecommons.org/ns#\"href=\"mailto:maxxcan@disroot.org\" 
property=\"cc:attributionName\" 
rel=\"cc:attributionURL\">Maxxcan Fox</a> is licensed under a <a rel=\"license\" 
href=\"https://creativecommons.org/licenses/by-sa/3.0/\">
Creative Commons Attribution-ShareAlike 3.0 Unported License</a>.<br />
Si quieres contactar  conmigo puedes hacerlo a través de mi correo 
<a href=\"mailto:maxxcan@disroot.com\">maxxcan@disroot.org</a>
</center>")

Uso

Esta es la parte más divertida y más fácil. Ahora una vez configurado ahora solo hay que llamar a la función org-static-blog-posts-create-new-post, escribir el contenido y renderizarlo con org-static-blog-posts-publish. Cada post será un fichero org con lo siguiente:

#+TITLE: El titulo de nuestro post
#+DATE: <2021-03-02 mar>
#+FILETAGS: emacs blog editor 

Resumiendo solo hay que hacer 4 pasos:

  1. package-install org-static-blog
  2. Ejecutar Alt-x: org-static-blog-create-new-post y escribir el contenido
  3. Ejecutar Alt-x: org-static-blog-publish
  4. Subir el contenido de la carpeta ~/proyectos/blog/publish/ al servidor.

Nota Importante

En ocasiones cuando ejecutamos org-static-blog-publish éste no funciona y nos saca del buffer. Si esto ocurriera podemos también probar con la función org-static-blog-publish-file que exportará el org a html y entonces ejecutamos org-static-blog-publish para crear todo el blog.

Conclusiones

El sistema de org-static-blog es sencillo, fácil de gestionar ya que solo tienes que gestionar un directorio y sus directorios, y puedes gestionarlos con cualquier control de versiones, cifrarlos con pgp, etc. Además no tiene requerimientos externos ni hace falta tener nada más instalado a parte de Emacs.

Para más información pasad por la información de su autor donde hay incluso ejemplos de blogs que lo usan.

También podéis visitar el post de Notxor donde tiene un artículo que habla sobre ello.

-1:-- Introducción a org-static-blog (Post )--L0--C0--March 04, 2021 09:00 AM

Maxxcan's Site: Presentación del Blog

Introducción

Que valga este post como reinicio del blog personal que llevo desde hace un tiempo pero que por mi falta de constancia desde hace un tiempo que no actualizo. Por mi falta de constancia y por no encontrar un sistema que realmente me convenciera para llevar la gestión de él. Sistema que he encontrado en algo sencillo y minimalista como org-static-blog y del que hablaré sobre él en el siguiente post.

Volvemos a la carga

Como ya he dicho volvemos de nuevo tras muchos meses de parada, y es que desde hace tiempo que sufro de un profundo problema a la hora de retomar un proyecto ya empezado, requiero de mucha fuerza de voluntad y tener que volver a recordar cosas que ya había aprendido. Esto lo estoy superando gracias al Método Zettelkasten, del que hablaré en muchos post ya que una de las cosas que me ha hecho retomar el blog es profundizar en este método y cómo combinarlo con otras técnicas para mejorar nuestra productividad. Si ya tienes curiosidad puedes tener más información en esta página web.

Más variedad al Blog

Aunque mi blog iba enfocado inicialmente solo a artículos sobre el mejor Editor/programa/SO del mundo como es Emacs, la idea no es quedarme ahí, aunque Emacs da para muchos blogs y publicaciones, sino hablar de más cosas relacionadas con lo que me gusta y/o investigo. Esto es: computación, programación, biología, biotecnología, electrónica, productividad y diseño 2D y 3D, también cine, libros y cultura en general, así como pensamientos varios sobre la vida, el mundo y lo que viene siendo las cosas que transcurren en nuestro loco loco mundo.

Buscando una marca personal

Todo esto para buscar y encontrar una marca personal que me defina si es que eso es posible. Desde hace mucho me gusta la idea de ir buscando nuevas experiencias, aprender cosas constantemente y no terminar definiéndome a ningún estricto sistema de identificación de mi trabajo. Eso me tuvo un poco contrariado por un tiempo hasta que leí que a las personas como yo se les llama Exploradores, es un arquetipo desde hace mucho definido por la psicología y hay más. Éste y otros pueden ayudar no tanto a definirte, ya he dicho que estoy en contra de esas cosas, pero sí a definir tu trabajo y lo más importante a presentarte frente al mundo. Esto lo explican muy bien en este artículo llamado como crear tu marca personal basándote en los arquetipos de Jung y sobre esto y otras cosas relacionadas también hablaré.

Agradecimientos

Me gustaría agradecer de antemano toda aquella persona que gaste su tiempo en leer el blog y en aportar comentarios o recomendaciones sobre él o mi trabajo. Muchas gracias. El que quiera puede libremente usar mi correo electrónico para cualquier duda, comentario y/o aportación. Como digo se agradecerá mucho.

-1:-- Presentación del Blog (Post )--L0--C0--March 04, 2021 09:00 AM

MGallego: Comprobado de Faltas de Ortografía en Emacs

your_img

Ahora que estoy con una instalación limpia de Ubuntu/Debian y estoy volviendo a escribir un poco en el blog para documentar lo que voy haciendo tengo que configurar el flyspell para que me compruebe según voy escribiendo, para que no se me escape ninguna falta de ortografía.

Para ejecutarlo es tan sencillo como dentro del buffer que queraos comprobar lanzar el comando con M-x flyspell-mode el problema que me encuentro es que no tengo el diccionario es_ES instalado, así que vamos a ver como lo instalamos en Ubuntu/Debian

El error que nos da es el siguiente: Error enabling Flyspell mode: (Error: No word lists can be found for the language "es_ES".)

Lo único que tenemos que haces es instalar el paquete de lenguaje de aspell en el sistema, en mi caso con sudo apt install aspell-es y volver a cargar el modo flyspell. Con esto emacs ya comenzará a marcarnos los errores en nuestro texto con un subrayado en rojo.

-1:-- Comprobado de Faltas de Ortografía en Emacs (Post )--L0--C0--December 07, 2020 11:01 AM

MGallego: Mostrar Informacion con LSP UI en Emacs - Sideline

your_img

lsp-ui es un paquete que nos ayuda mostrando información útil sobre el servidor de lenguaje en nuestra interfaz. Voy a ver como configurarlo un poco para ver que utilidad nos puede dar.

En los ejemplos veremos imágenes del servidor de lenguaje de Scala que es lo que estoy configurando ahora mismo.

¿Qué es LSP?

LSP es un protocolo que sirve para comunicar servidores de lenguaje con editores, lo cual nos da en los editores las mismas o similares funcionalidades que ya existían en los IDEs, como por ejemplo navegación entre código, resaltado de sintaxis, comprobación de errores en tiempo real, refactorización …

Antiguamente para poder tener estas características teníamos que tener un modo (plugin) para cada uno de los lenguajes que usásemos, con su configuración, atajos de teclado, etc. Con este cambio solo necesitamos tener el modo LSP que se conectará al servidor de lenguaje que corresponda y tendremos todas las funcionalidades que nos de ese servidor, que por cierto, ese servidor será común entre todos los editores que soportan LSP.

Como no es el tema que quiero tratar en este post no voy a entrar mas en detalle, solo añado que LSP es lo mejor que le ha pasado a Emacs en los últimos años y diría que se podría decir lo mismo para otros editores como Vim

Aquí dejo un par de enlaces con mas información, uno de la Wikipedia y otro de la página de Microsoft.

¿Qué es lsp-ui?

lsp-ui es un modo de emacs que nos crea una interfaz, una UI (User Interface) por encima de LSP, dándonos información en tiempo real del código en el que nos encontramos, como firmas de funciones, acciones que podemos realizar sobre el cursor y documentación relacionada.

Esto es mas o menos lo que estamos acostumbrados a ver en los IDEs mas comunes y ahora lo tenemos en emacs con una configuración mínima.

Instalación

Para la instalación lo mejor es ir a la web del proyecto, apenas son 2 líneas, pero estará mas actualizado que este post.

Configuración

Para ir viendo los ejemplos no los voy a meter en mi fichero de configuración, lo que voy a hacer es ir evaluándolos con M-: para ir viendo en tiempo real como funciona y si merece la pena añadirlo a posteriori en mi fichero de configuración.

Toda la configuración está en la web oficial, pero como quiero probarlo yo mismo aprovecho y lo documento.

lsp-ui-sideline

El sideline es la información que se va a mostrar al final de la propia linea en la que estamos trabajando, por defecto cuando programo con PHP lo tengo desconectado porque me resulta un poco incómodo, sobre todo porque aparece demasiado a la derecha, pero en Scala con el tema del tipado creo que mas que útil va a acabar siendo necesario, así que vamos a ver que ofrece y como activarlo o desactivarlo

Para que todo funcione tenemos que tener el modo lsp-ui-sideline activado para ello ejecutamos M-x lsp-ui-sideline-mode

Apunte rápido

Todo lo que voy a ir metiendo son funciones en lisp para setear variables, con algo así como (setq variable valor) este valor puede ser t para true, activar, y nil, nulo, para desactivar. Como ya he dicho antes las voy a evaluar en mi caso directamente en el buffer de scala, si las queréis dejar activas para todos los buffer de Scala tendréis que añadirlo a la configuración de lsp-ui

  • lsp-ui-sideline-show-diagnostics: Nos sirve para mostrar un diagnostico en tiempo real en el caso de que haya fallado algo (setq lsp-ui-sideline-show-diagnostics t)

Este puede ser muy útil y lo voy a activar en mi modo lsp-ui

  • lsp-ui-sideline-show-hover: Muestra información sobre el objeto o la línea en el que se encuentre el cursor, esto es configurable.

También útil, por ahora lo meteré en mi configuración.

  • lsp-ui-sideline-show-code-actions: Muestra las acciones que podemos ejecutar en la posición actual del cursor. (setq lsp-ui-sideline-show-code-actions t)

Este también lo configuraré por defecto.

Hay mas opciones que no voy a cambiar, dejaré las que vienen por defecto, como el delay para que pinte la información o la forma de pintarla. Para mas opciones lo mejor es la leer la documentación oficial.

Y así es como quiero dejarlo:

Apunte rápido

Como podéis ver no he tocado nada de scala, ni modos ni nada, así que este paquete y su configuración nos valdría para cualquier lenguaje que tengamos con su servidor de lenguaje correspondiente.

-1:-- Mostrar Informacion con LSP UI en Emacs - Sideline (Post )--L0--C0--December 07, 2020 10:58 AM

MGallego: Fijar un Repositorio Para un Paquete en Emacs

Estos días estoy configurando mi Emacs para programar en Scala y voy a intentar ir documentando todos los pasos que vaya haciendo y lo que vaya descubriendo, porque la verdad es que la documentación que he encontrado sólo consiste en explicar la instalación, pero el uso tienes que investigarlo tú mismo.

En este post no voy a contar nada de Scala, pero está relacionado con un problema que me he encontrado y quería documentar como lo he solucionado.

Al arrancar Scala Metals flycheck da un problema porque necesita la última versión para funcionar, pero la última versión no está en el repostirio de melpa-stable, así que no hay forma de instalarlo por defecto, aunque lo busques en el listado de paquetes sólo va a aparecer el de melpa-stable. Pues así es como he conseguido solucionarlo.

Fijando un repositorio para un paquete de emacs

Cuando definimos los repositorios que queremos usar para descargar los paquetes de emacs podemos fijarles una prioridad a cada uno, el problema es que cuando encuentra un paquete en el primero ya el resto los ignora, así que como en mi caso, y en el de la mayoría de la gente, el repositorio con mas prioridad es melpa-stable no podremos seleccionar paquetes de melpa porque no los podremos ver en el listado y el instalador de paquetes siempre resolverá en stable

Cuando en nuestra configuración usamos use-package tenemos varios parámetros que podemos definir, uno de ellos es pin. En mi caso el único paquete que quiero poder usar de un repositorio diferente al primero es flycheck así que lo he configurado de la siguiente manera:

     (use-package flycheck
       :ensure t
       :pin melpa
       )
   

Si refrescamos el listado de paquetes ahora podremos ver un nuevo flycheck que no está instalado y si nos fijamos corresponde al del repositorio melpa así que ahora solo nos queda instalarlo y poder usar el paquete en su última version, eso sí, puede que ahora no se estable, pero a veces es un riesgo que hay que correr si queremos que todo funcione correctamente.

-1:-- Fijar un Repositorio Para un Paquete en Emacs (Post )--L0--C0--December 07, 2020 09:31 AM

Blog uGeek: Borrando líneas en blanco de un texto con Emacs

Borrando líneas en blanco de un texto con Emacs

A veces cuando copio un documento en la terminal, lo hace dejando líneas en blanco entre líneas. Para eliminar esto con Emacs es muy sencillo:...

Sigue leyendo el post completo de Borrando líneas en blanco de un texto con Emacs

Visita uGeek Blog

Visita uGeek Podcast

Suscribete al Blog de uGeek

Suscribete al Podcast de uGeek

-1:-- Borrando líneas en blanco de un texto con Emacs (Post )--L0--C0--October 26, 2020 05:45 PM

Blog uGeek: Añadiendo texto al principio de cada línea en Emacs

Añadiendo texto al principio de cada línea en Emacs

Como podéis imaginar, yo creo y edito mis scripts con Emacs. Hay momentos en los que quiero añadir "#" en un bloque de código para que no se ejecute, o...

Sigue leyendo el post completo de Añadiendo texto al principio de cada línea en Emacs

Visita uGeek Blog

Visita uGeek Podcast

Suscribete al Blog de uGeek

Suscribete al Podcast de uGeek

-1:-- Añadiendo texto al principio de cada línea en Emacs (Post )--L0--C0--October 24, 2020 10:30 AM

Blog uGeek: Visualizar aparte una Cabecera de un OrgMode en Emacs

Visualizar aparte una Cabecera de un OrgMode en Emacs

Hay momentos, al menos a mi me pasa, de todas las notas que voy registrando en mi orgmode, quiero exporta una ya sea en formato txt, pdf, markdown,......

Sigue leyendo el post completo de Visualizar aparte una Cabecera de un OrgMode en Emacs

Visita uGeek Blog

Visita uGeek Podcast

Suscribete al Blog de uGeek

Suscribete al Podcast de uGeek

-1:-- Visualizar aparte una Cabecera de un OrgMode en Emacs (Post )--L0--C0--September 03, 2020 05:45 PM

La Pipa Plena: La entrada 37 de emacs

Aprovechando el confinamiento en /home hemos terminado la entrada 37 de lo que llamamos el curso de emacs pero más que curso, son nuestros apuntes sobre los temas con los que nos vamos encontrando y en esta ocasión es fill-column-indicator, customize-themes, ffap, free-keys y auto-save-buffers El enlace es: http://lapipaplena.duckdns.org/emacs/ ¡¡Buen confinamiento para todos y excelentes … Sigue leyendo La entrada 37 de emacs
-1:-- La entrada 37 de emacs (Post la pipa plena)--L0--C0--April 12, 2020 02:32 PM

La Pipa Plena: subida la entrada 36 al curso de emacs

Hemos subido más cosas de las que nos vamos encontrando con emacs y las hemos puesto en la entrada número 36 para tenerlas siempre a mano. Recordamos que el archivo org puede descargarse de: http://lapipaplena.duckdns.org/emacs/curs_emacs.org y el curso completo de: http://lapipaplena.duckdns.org/emacs/
-1:-- subida la entrada 36 al curso de emacs (Post la pipa plena)--L0--C0--March 24, 2020 03:22 PM

La Pipa Plena: No estamos durmiendo…

Aunque parezca que tenemos el blog abandonado, cosa no muy descabellada, la verdad es que continuamos a pleno rendimiento pero en aspectos no tan evidentes como son las entradas de un blog. Una muestra del git log del tractatus así lo confirma: Y además hemos revisado y corregido varias cosas del curso de emacs que … Sigue leyendo No estamos durmiendo…
-1:-- No estamos durmiendo… (Post la pipa plena)--L0--C0--February 23, 2020 09:34 AM

Onda Hostil: Mi entorno de trabajo

Me han preguntado bastantes veces cómo me organizo y, aunque hace un tiempo hablé un poco sobre mi entorno de trabajo en Emacs, desde entonces he introducido algunas mejoras así que voy a hablar de mi entorno de trabajo en general. Aprovecho para enlazar otras entradas del blog en las que hablé en concreto de las herramientas que cito para que se note que las uso de verdad y no es (solo) postureo.

La base: acta en Org

La base de mi metodología es un archivo de Org que utilizo como acta y lista de tareas. Org tiene la ventaja de que me permite añadir imágenes, código y enlaces a diferentes documentos y, además, puedo exportar la parte del acta en diferentes formatos según las manías del receptor.

Este archivo se abre directamente cuando abro Emacs por las mañanas para que pueda ver qué me queda por hacer y acceder directamente a los documentos o al código en los que estoy trabajando desde él, que se abrirán o no en el propio Emacs según su formato. Para que esto ocurra he añadido la siguiente líneas a mi archivos de configuración:

; Abrir archivos con programa que corresponda
; Lo privativo!
(add-hook 'org-mode-hook
           '(lambda ()
          (add-to-list 'org-file-apps
               '("\\.m\\'" . default)    ;; Matlab
               '("\\.fig\\'" . default)  ;; Matlab
               '("\\.xlsx\\'" . default) ;; Excel
               )))

; Abrir acta al iniciar Emacs
(find-file (expand-file-name "acta/acta.org" default-directory))

Como toda mi labor investigadora se basa en este archivo tengo, evidentemente, una copia de seguridad.

El soporte auxiliar: diario de Emacs

Aparte de tener apuntadas mis tareas por temática, llevo un diario en el que apunto qué he hecho cada día. Esto tiene una doble función: por una parte, cuando me desmoralizo y creo que no avanzo, tengo evidencia empírica de que no es así; por otra, me sirve para seguir mi proceso mental y recordar qué estaba haciendo antes de irme de vacaciones, por ejemplo. Esto me resulta crucial porque me permite tanto desconectar en cuanto levanto el culo de la silla del trabajo como tener mis ideas hiladas en un lugar que no es mi (variable) cabeza.

Para ello uso el diario de Emacs de manera poco ortodoxa, que es como me gusta a mí usar las cosas. Tengo una copia de seguridad también del diario, claro.

El producto: texto plano y control de versiones

El tercer pilar de mi organización es que todo lo que produzco (los documentos, la bibliografía, las imágenes, el código …) es texto plano. Aparte de que de esta manera podré seguir accediendo a mi información dentro de treinta años1, así puedo tener todo bajo control de versiones. Para el control de versiones uso Magit en Emacs y git en la terminal por la vieja costumbre.

Os detallo un poco más cómo funciono:

  • Documentos: escribo en Org o en LaTeX tanto los artículos como los informes y las presentaciones para clase. Para LaTeX uso el modo AUCTeX con RefTeX para las referencias bibliográficas, CDLaTeX para las ecuaciones y Company para el autocompletado.

  • Bibliografía: la manejo con Jabref y, últimamente, con Helm-bibtex desde el propio Emacs. En este último caso, uso las variables locales para seleccionar el archivo de bibliografía correspondiente a cada documento así como la carpeta donde viven los pdfs.

%%% Local Variables:
%%% eval:(setq bibtex-completion-bibliography '("ruta_a_bib"))
%%% eval:(setq bibtex-completion-library-path '("ruta_a_pdf"))
%%% End:
  • Imágenes: trabajo generalmente con svg en Inkscape, o exporto a eps o svg desde el resto de programas. El motivo es que ambos son formatos vectoriales y eps el favorito de las revistas científicas. Para las gráficas científicas, tengo el código para producir la imagen bajo control de versiones y una función que le da un estilo uniforme a todas las imágenes que exporto.

  • Código: programo en Matlab por obligación y en Julia y últimamente algo en Python por vicio. Con Matlab hago más que suficiente con no caer en las malas prácticas que fomenta. Para programar en los otros dos uso los modos específicos de Emacs y también Org para programación literaria.

Un día en mi vida

Dicho esto, uno de mis días laborales suele tener esta estructura:

  1. Abro Emacs.
  2. Leo en la lista de tareas qué me queda por hacer y en el diario qué hice el día anterior.
  3. Decido qué voy a hacer. Si hay un archivo relacionado, estará enlazado en la propia lista de tareas y se me abrirá en Emacs o en el programa externo correspondiente.
  4. Trabajo. Escribo, programo, busco papers … abro ramas y envío actualizaciones al repo según corresponda con Magit o desde la terminal.
  5. Actualizo la lista de tareas y el diario con lo que vaya terminando y las conclusiones sacadas.
  6. Cierro Emacs.

Esta rutina laboral se irá modificando según vaya aprendiendo cosas nuevas, cuando eso ya os contaré. ¡De momento contadme vosotros qué hacéis!


  1. Dudo que vaya a querer, pero podré↩
-1:-- Mi entorno de trabajo (Post Ondiz)--L0--C0--October 16, 2019 03:00 PM

Onda Hostil: Lo que he aprendido: manejar referencias bibliográficas en Emacs

Detesto instalar programas, aprender dónde están los botoncillos en un programa nuevo y que luego no me convenza y vuelta a empezar. Supongo que es uno de los motivos por los que me encanta Emacs: mismo programa, miles de tareas diferentes.

Últimamente he estado hurgando un poco en sus habilidades como gestor bibliográfico. Como ya os conté, yo suelo usar Jabref que es el programa que aprendí a usar en su momento y con el que me apaño bien para añadir referencias directamente desde la web, pero hay veces en las que manejar texto plano a pelo me parece más conveniente. ¡Y para eso no hay nada que iguale a Emacs! Os cuento un poco.

El modo BibTeX

La forma más básica para trabajar con bibliografías en Emacs es el modo BibTeX: se carga directamente al abrir un archivo con extensión .bib y nos permite organizar (M-x bibtex-sort-buffer) y adecentar (C-c C-c ) nuestras referencias.

Para insertar entradas tenemos el comando genérico C-c C-b tras el que podemos usar autocompletado, o el grupo de comandos que empiezan por C-c C-e. Por ejemplo, para crear una entrada de tipo artículo podemos hacer lo siguiente:

  • con C-c C-e C-a (o M-x bibtex-Article) creamos una plantilla para artículo;
  • rellenamos los datos necesarios, algunos comienzan por OPT porque son opcionales;
  • al acabar hacemos C-c C-c (o M-x bibtex-clean-entry) para quitar los campos opcionales que no hemos rellenado y que nos corrija el formato;
  • si no le hemos puesto una palabra clave nos sugerirá una y la entrada estará finiquitada y lista para ser citada.

Otro comando interesante es M-x bibtex-fill-entry (generalmente C-c C-q ) para alinear correctamente cada entrada bibliográfica. Y tampoco está mal establecer la variable bibtex-maintain-sorted-entries para tener las referencias en orden alfabético.

Como siempre, podemos recurrir a M-x describe-mode para que Emacs nos explique qué hace el modo. Es un modo chiquitico, pero muy útil para embellecer la lista de referencias ya que ayuda a cambiar de mayúsculas a minúsculas, quitar espacios innecesarios y míticas mierdas que, a las que somos maniáticas, nos ponen muy nerviosas.

Helm-bibtex

Mi modo favorito para gestionar las referencias bibliográficas en Emacs es Helm-bibtex. Lo descubrí intentando abrir los artículos que cito directamente desde Emacs y lo he introducido directamente en mi rutina de escritura científica (que algún día os contaré) junto con AUCTeX y RefTeX.

Es sencillito de usar: una vez instalado, lo llamamos con M-x helm-bibtex. Nos aparecerá entonces una lista de nuestras referencias bibliográficas en la que podremos elegir la entrada que queramos. Dándole a TAB vemos las acciones posibles, que se ejecutan todas en las teclas F1F12.

Como sugieren en su ayuda, he enlazado M-x helm-bibtex a la combinación Menú + b añadiendo esta línea al archivo de configuración:

(global-set-key (kbd "<apps> b") 'helm-bibtex)    

con la idea de configurar el resto de las historietas de Helm también en la tecla Menú y pulsar menos botoncicos.

Evidentemente, aunque sea muy listo este modo, tenemos que decirle dónde tenemos el archivo de bibliografía, los artículos en cuestión y las notas al respecto, si las estamos usando. Yo, como tengo un archivo y una carpeta con referencias para cada tema, establezco unas variables locales para el artículo que esté escribiendo

%%% Local Variables:
%%% eval:(setq bibtex-completion-bibliography '("refs.bib"))
%%% eval:(setq bibtex-completion-library-path  '("references/"))
%%% End:

pero si tuviera todas las referencias juntas, podría añadir ese par de líneas al archivo de configuración directamente con las rutas correspondientes.

ACTUALIZACIÓN (16/10/2019) Por algún motivo que desconozco (Windows), la ruta relativa dejó de funcionar de un día para otro y tuve que poner la ruta absoluta.

Una cosa que me encanta de este modo es que, por medio de RefTeX, localiza la bibliografía local si se usa helm-bibtex-with-local-bibliography en lugar de helm-bibtex. Algo bastante útil sobre todo cuando estamos manejando bibliografías de otras personas.

De esta manera, cuando estoy escribiendo un artículo y quiero citar algo o a alguien, abro mis referencias, busco entre ellas lo que necesito y abro directamente el archivo en el propio Emacs usando pdf-tools. En Windows (sorpresa) esto no me carrula, así que he añadido esto al archivo de configuración

(setq bibtex-completion-pdf-open-function
  (lambda (fpath)
    (call-process "acrobat" nil 0 nil fpath)))

para que me abra los pdfs con al Acrobat Reader. Si, por lo que sea, lo que busco no está entre mis referencias, el cacharro me busca en repositorios online. Me falta investigar cómo funcionan las notas, que hasta ahora no he tenido necesidad de ellas.

Org-ref

Si Helm-bibtex os ha gustado y sois fanáticos de Org como la que escribe, org-ref os va a enamorar. Sirve para gestionar las referencias bibliográficas y cruzadas en Org y nos permite añadir letreros ref, label y cite como los de LaTeX.

Lo que más me gusta de este modo es que su propia ayuda es un archivo Org en el que se usan las funcionalidades del modo. Se abre con M-x org-ref-help y nos cuenta todo lo necesario para jugar con él. Hace cosas molonas como permitir navegar por el documento siguiendo las referencias, mostrar el título y demás de los trabajos citados si ponemos el cursor encima o ser capaz de extraer la información bibliográfica de un pdf (como Jabref). Es muy chulo y lo mejor para entender cómo funciona es abrir el archivo de ayuda y hurgar.

En fin, una cosa más que puedo hacer con Emacs.

Referencias

Managing BibTeX Files with Emacs

BibTeX-Mode for GNU-Emacs

Research Literature Management with Emacs


Suena:

-1:-- Lo que he aprendido: manejar referencias bibliográficas en Emacs (Post Ondiz)--L0--C0--September 25, 2019 11:30 AM

La Pipa Plena: Entradas 33 y 34 del curso de emacs

Hemos añadido al curso de emacs dos nuevas entradas sobre las últimas cosas del curso de emacs que nos han aparecido en las amenas charlas que sobre el tema efectuamos: pass, highlight-changes-mode,  mouse-avoidance-mode, glasses-mode, list-color-display, nov, real-auto-save, transpose-frame, diff-mode, substitute-in-file-name, memento-mori, recenter-positions, pathify-directory y golden-ratio-adjust http://lapipaplena.duckdns.org/emacs/ Y tambien hemos actualizado el org correspondiente: http://lapipaplena.duckdns.org/emacs/curs_emacs.org   … Sigue leyendo Entradas 33 y 34 del curso de emacs
-1:-- Entradas 33 y 34 del curso de emacs (Post la pipa plena)--L0--C0--September 15, 2019 04:53 PM

Onda Hostil: Lo que he aprendido: Julia, Babel y Org

Ya sabéis que me gusta llevar la contraria. También que me gusta el minimalismo y usar el mínimo de herramientas posible. Así que cuando me ha dado por explorar la programación literaria y la investigación reproducible en Julia, en lugar de aprender a utilizar los cuadernos Jupyter como una persona normal, me he puesto a jugar con mi adorado modo Org y su funcionalidad para incluir bloques de código Babel1. Supongo que es lo que tiene ser la única de tu entorno (laboral) que hace estas cosas y no tener por tanto limitaciones en la elección de herramientas. Total, como en la academia no se colabora, no se va a dar el caso de que mi elección me limite. En fin, dejo la academia, que me caliento, y os explicito los motivos:

  • No instalo más software: ya estoy programando en Julia en Emacs así que no necesito mil programas y mi ordenador durará años y años.

  • Utilizo mis atajos de teclado y configuración: como sigo usando el mismo programa, no tengo que aprender dónde están otros botoncillos. Además, tengo definido cómo exportar a pdf desde Org pasando por LaTeX en mi archivo de configuración por lo que el documento final es exactamente como yo quiero.

  • Puedo cambiar de lenguaje de programación: el sistema funciona para una pila de lenguajes de programación. Puedo incluso mezclar código de diferentes lenguajes en un único documento2.

Visto esto, parece que elegir Org es una buena idea, así que paso a contaros en qué consiste la programación literaria, cómo se aplica en Org y qué tiene de especial el caso de Julia.

La idea: escribir para humanos

La idea de la programación literaria, como tantas otras buenas ideas, fue de Donald Knuth. Consiste en cambiar de lector objetivo al escribir un programa: en lugar de una secuencia de instrucciones para una máquina salpicada por algún comentario sobre la implementación, el programa se convierte en una descripción de la lógica detrás de la implementación salpicada por algún fragmento de código. De esta manera, no es necesario descifrar qué hace el programa leyendo el código porque las decisiones de diseño y la lógica se explicitan. Se puede pensar en el programa, entonces, como en una obra literaria.

Como me dedico a los métodos de cálculo, es decir, propongo una manera de calcular algo y luego demuestro mediante un ordenador que mi manera es mejor que la manera anterior, este enfoque me interesa por dos motivos:

  • Investigación reproducible: puedo escribir un artículo científico que incluya mis datos y mi código con lo que quien lo lea puede acompañarme en el proceso, obtener mis mismos resultados y verificar si que mis conclusiones son correctas.

  • Documentación útil: puedo explicar en el propio programa mi proceso mental para implementar numéricamente un cálculo que inicialmente era analítico, incluyendo matemáticas si es preciso.

Solo nos queda responder a una pregunta: ¿cómo demonios se lee esa mezcla de texto y código sin volverse una loca? Pues mediante los procesos de weaving, que deja solo lo humano, y tangling, que deja solo lo que entiende la máquina. ¡A ver si os habíais pensado que el señor Knuth no había pensado en esto! La cuestión aquí es que como tanto la documentación o explicación y el código salen de un mismo documento, ambos crecen juntos y limitamos la típica divergencia de según la documentación esta función tiene dos variables de entrada pero según el código tiene tres.

Programación literaria en Org

Ahora que sabemos qué es lo que queremos hacer, vamos a ver cómo lo hacemos en Org. No puede ser más fácil: cuando queramos meter un cacho de código escribimos

#+BEGIN_SRC lenguaje opciones_cabecera

Código

#+END_SRC

y ya está. Impresionante. Más os voy a decir: los bloques se pueden crear con las plantillas fáciles de Org situándonos en el principio de la línea y haciendo <s TAB.

Para poder ejecutar el trocito de código necesitamos primero decirle a Org que vamos a usar el lenguaje en cuestión y que ese lenguaje sea uno de los soportados. Tan sencillo como ir al archivo de configuración y añadir elementos a la lista de lenguajes:

(org-babel-do-load-languages
(quote org-babel-load-languages)
(quote (
(LENGUAJE1 . t)
(LENGUAJE2 . t)
)))

Ahora si hacemos C-c C-c sobre el trocito, lo ejecutaremos y nos saldrá el resultado debajo. Por seguridad, preguntará si queremos ejecutar y tendremos que contestarle, si somos vagos y nos gusta ver el mundo arder podemos decirle que ejecute todo el código sin preguntar con

(setq org-confirm-babel-evaluate nil)

¡Destrucción! ¡Sí!

Un detallico sobre los resultados: los trocitos de código se ejecutan por defecto como si fueran una función (opción de cabecera :results value) y solo nos devolverán el contenido si se lo pedimos explícitamente, con un return en el caso de Python, por ejemplo. Podemos cambiar la opción a :results output y, entonces, Org nos devolverá el contenido de STDOUT. Para lenguajes interpretados, podemos combinar esta opción con :session, que abre un intérprete y envía allí el código de todos los bloques que contengan dicha opción. Es un poco lío esto, pero jugando un poco con las opciones y leyendo la docu, se entiende.

También usamos las opciones de cabecera para decidir si al crear el documento exportamos el código (:exports code), los resultados (:exports results), el código y los resultados (:exports both) o nada (:exports none); para decirle a Org qué debe hacer con los resultados (:post); o para decir si queremos solo el archivo para la máquina (:tangle ARCHIVO_DESTINO), que por defecto no nos crea.

También podemos configurar cómo exporta el código al documento final. En mi caso, como el documento final es un pdf y eso pasa por LaTeX, quiero que use listingsUTF8 para los bloques de código. Se puede configurar para minted también, claro.

;; Exportar código como listings
(require 'ox-latex)
(setq org-latex-listings t)

;; Paquetes de LaTeX para código
(setq org-latex-default-packages-alist
'((""    "listingsutf8"  t)
("usenames,dvipsnames,svgnames,table"    "xcolor"    t))))

Las cuqueces y los colorinchis no se limitan al documento final, con

(setq org-src-fontify-natively t)

también tendremos colores en nuestro Org.

Ah, por cierto, el trocito de código lo podemos modificar en un buffer especial que se abre con C-c '.

El caso de Julia

Julia es uno de los lenguajes que no tiene soporte directamente en Babel porque su autor no le dio el copyright a la FSF. Por lo tanto, aparte de añadir Julia a la lista de lenguajes que puede usar Org, necesitamos los paquetes ESS y ob-julia.

Luego, hacen falta un par de líneas extra en el archivo de configuración para decirle a ob-julia dónde está el ejecutable de Julia (yo lo tengo en el PATH y por eso no le doy la ruta entera) y decirle a Emacs que use ob-julia:

;; Código Julia en Org
(setq inferior-julia-program-name "julia") ;; nombre o ruta de ejecutable
(require 'ob-julia)

(org-babel-do-load-languages
(quote org-babel-load-languages)
(quote (
(julia . t)
)))

Ale, ya puedo jugar a programar explicándome a mí misma lo que he hecho. Ahora solo me falta aplicar estas ideas al archivo de configuración de Emacs para no romperlo nunca.

Seguiremos informando.

Referencias

Documentación de Babel

Babel: active code in Org-mode

Working with source code en el manual de Org

Introduction to Literate Programming

Emacs para ciencias del dato

Julia with Emacs Org mode

Org-mode and julia: an introduction

Literate Programming Examples

Literate programming with Org-mode

Ten simple rules for writing and sharing computational analyses in Jupyter Notebooks

Drops of Jupyter notebooks: how to keep notes in the information age


Os dejo con música:


  1. También hay un paquete específico para Julia, pero ¿me gusta a mí lo fácil? No. 
  2. Lo digo como su supiese programar en múltiples lenguajes, ¿habéis visto? 
-1:-- Lo que he aprendido: Julia, Babel y Org (Post Ondiz)--L0--C0--September 06, 2019 02:00 PM

Jubilación Efectiva: Spacemacs ¿Editor definitivo?.

Pues, para mí, va a ser que no, aunque en mi lento retorno a estos andurriales, me he visto sorprendido por este entorno. Lo cierto es que este verano me he encontrado con un pequeño problema ya que se me ha oxidado algo el Emacs, por falta de uso y en la búsqueda de vídeos …

Spacemacs ¿Editor definitivo?. Leer más »

La entrada Spacemacs ¿Editor definitivo?. se publicó primero en Gestión del Conocimiento Personal.

-1:-- Spacemacs ¿Editor definitivo?. (Post Antonio Simón)--L0--C0--August 22, 2019 05:19 PM

Onda Hostil: Lo que he aprendido: Julia en Emacs

He conseguido por fin poder programar en Julia usando Emacs. Eh, que no ha sido tan fácil: algo tan sencillo como instalar el julia-mode y el ess se convirtió en un infierno. Me pasó de todo.

Primero en GNU/Linux, como no estaba usando la versión más novedosa de elementary, el Emacs de los repositorios era demasiado antiguo y no compatible con los modos que me hacían falta. Me quedaban varias opciones: (i) actualizar el sistema (lo que finalmente hice); (ii) añadir un ppa con un Emacs más moderno (bien, pero prefiero tener los paquetes de mi distro que ya he organizado alguna petarda); o (iii) compilar Emacs desde fuente (ya lo hice alguna vez y no me apetecía repetir).

Luego en Windows, donde sí tenía un Emacs lo suficientemente moderno, parece ser que Julia tiene no sé que bug y se cuelga y hay que darle a C-g para que se reviva.

En fin, que actualicé el sistema operativo y en quince minutos ya tenía un entorno para programar en Julia. Bueno, eso en mi recién estrenado Juno, en Windows me conformo con Atom, ese editor que no es un editor. Qué dura es la vida a veces.

Después de contaros mis desventuras (para eso tengo un blog), paso a resumir qué hice la vez que funcionó todo.

Julia en GNU/Linux

Julia no está en los repos, nos dejan unos binarios genéricos para que descarguemos y ejecutemos sin más. Hay que elegir unos u otros según la arquitectura de nuestro procesador. Yo, como nunca sé qué tengo lo miro así:

ondiz@slimbook:~$ lscpu
Arquitectura:                        x86_64
modo(s) de operación de las CPUs:    32-bit, 64-bit

Descargados los binarios correspondientes, es útil crear un enlace simbólico a algún lugar donde ya estemos buscando ejecutables o añadir la carpeta donde los hemos descargado al PATH, a gusto del consumidor.

Yo he elegido la primera opción, así que he hecho:

sudo ln -s RUTA_A_EJECUTABLE /usr/local/bin/julia

Cuidadín que hay que poner la ruta absoluta al ejecutable bin/julia que si no no carrula.

Julia en Emacs

Pues lo que decía al principio: para tener un entorno chachi para programar en Julia solo hace falta instalar los modos julia-mode y ess. El primero es el modo oficial para editar Julia y el segundo es un paquete que ayuda a trabajar con lenguajes de programación para estadística (ESS viene de Emacs Speaks Statistics) como R, o en este caso, Julia. Se pueden hacer otras cosas, pero esta es la más simple en mi opinión.

Una vez instalados los modos, para activar una terminal juliana inferior solo hay que hacer M-x julia. Luego ya podemos abrir un archivo en la parte superior y jugar con opciones que nos da el modo ESS.

Llevo poco con el tema y solo he memorizado un par de combinaciones útiles (miento, no las he memorizado, las escribo aquí para mirarlas en el futuro):

  • C-c C-l: carga un archivo completo, lo que sería un include("archivo").

  • C-M-x: ejecuta (me encanta esta palabra) un trozo de código en el REPL.

  • C-c C-z: cambia del script al REPL o viceversa.

Hay también una pila de comandos para gestionar errores y para acceder a la documentación que algún día controlaré. O no. También me falta echarle un ojo a imenu anywhere para que me aparezcan opciones de autocompletado en cualquier lugar. Me lo dejo de deberes.

Curiosamente, lo que más trabajo me dio fue acostumbrarme a no darle a la flecha hacia arriba para repetir el último comando en el REPL. Aquí, como las combinaciones de GNU Readline están ya pilladas, hay que usar M-p y M-n (o C-↑ y C-↓) para moverse por la historia. Comint y cosas, ya sabéis, y si no, con hacer C-h b os enteráis.

Y hala, ya tengo un entorno para programar. Contadme qué usáis vosotros para que aprendamos todos, venga.

juliaEmacs

Referencias

Página oficial de Julia

Manual del modo ess

Julia en el modo ess

imenu anywhere en GitHub


Os dejo con un grupo cuyas canciones suelo berrear en los conciertos de las fiestas de los pueblos vecinos y que tiene el mérito de que no me quedase dormida encima del libro de física de primero de carrera. Era abrirlo y bostezar, oigan.

-1:-- Lo que he aprendido: Julia en Emacs (Post Ondiz)--L0--C0--August 08, 2019 12:54 PM

Jubilación Efectiva: Compilando Emacs en Debian Stretch.

Una de las últimas tareas que acometí en mi Debian, antes de pasarme al mundo de Antergos, fue la de compilar GNU Emacs, algo necesario para dispones de su última versión, dado el sistema de gestión de paquetes de esta distribución. La tarea me imponía algo de respeto, porque hacía muchos años que no me …

Compilando Emacs en Debian Stretch. Leer más »

La entrada Compilando Emacs en Debian Stretch. se publicó primero en Gestión del Conocimiento Personal.

-1:-- Compilando Emacs en Debian Stretch. (Post Antonio Simón)--L0--C0--April 18, 2019 01:00 PM

Onda Hostil: Lo que he aprendido: el buffer de paquetes de Emacs

Años usando Emacs y no ha sido hasta hace unos meses que he descubierto que el buffer de los paquetes, ese al que entramos con M-x list-packages es mucho más fácil de usar de lo que yo pensaba.

Resulta que si te posicionas en la línea de un paquete sin instalar y le das a la i lo marcas para instalar, si vas a uno instalado y le das a la d lo marca para eliminar (delete) y si le das a la U así en general, marca los paquetes que hay que actualizar con una I (upgrade). ¿Y ahora cómo hacemos efectivas estas órdenes? Pues dándole a la x. Así todo lo que queramos borrar se borrará, lo que queramos instalar se instalará y lo que queramos actualizar se actualizará.

En la imagen se ve la I mágica de la que hablo en la columna de la izquierda del todo.

paquetes

En fin, aquí lo dejo, por si hay otro genio como yo por ahí al que le resulta útil. A cuidarse.

Referencias

48.1 The Package Menu Buffer en el manual de Emacs


Solo del punk no se vive, hoy suenan trompetas.

-1:-- Lo que he aprendido: el buffer de paquetes de Emacs (Post Ondiz)--L0--C0--April 15, 2019 11:00 AM

MGallego: Introduccion a Emacs Lisp: Seteando Variables

Existen dos formas de setear una variable en Lisp:

Usando set

Imaginemos que queremos setear una variable que contenga una lista de lenguajes de programación. Podemos hacerlo de la siguiente manera:

(set 'lenguajes '(c python pascal php java erlang))

Esto setería una variable llamada lenguajes que contendría la lista '(c python pascal php java erlang)

Debemos fijarnos en un par de cosas, una de ellas ya la había explicado en el post anterior.

Si nos fijamos en la lista '(c python pascal php java erlang) podemos ver que la lista comienza con una comilla. Con esto lo que le estamos diciendo al intérprete es que la debe devolver tal y como está, sin evaluar nada.

Por otro lado vemos que hay una comilla simple delante del nombre de la variable. Esto es mas o menos lo mismo, no queremos que la evalúe, solo queremos pasar el elemento a la función set. Si no pusiésemos esa comilla el interprete devolvería un error al tratar de evaluarla.

De esta forma ya tenemos una variable lenguajes que al evaluarla fuera de paréntesis nos devolvería una lista de lenguajes de programación.

Usando setq

Setq es una forma un poco mas sencilla de crear una variable, aunque tampoco mucho mas, ya que lo que nos ayuda setq es en que no tenemos que poner la comilla en la variable que queremos crear. La creación de la variable anterior con setq sería de la siguiente manera:

(setq lenguajes '(c python pascal php java erlang))

La q de setq es de quoted.

Creando un contador sencillo.

Si usamos set o setq de nuevo sobre una variable que ya tiene un valor asignado este se sobrescribe, así que podemos ver un sencillo ejemplo de esto viendo como podemos definir una variable contador en emacs.

  (setq counter 0) ; inicializador
  (setq counter (+ counter 1)) ; incrementador

  counter ; resultado

El "inicializador" lo que hace como su nombre indica es crear la variable y setearla a 0. Inicializarla. El incrementador incrementa el valor de la variable en 1, así que cada vez que ejecutemos la expresión del incrementador el valor de la variable counter se aumentará en 1.

-1:-- Introduccion a Emacs Lisp: Seteando Variables (Post )--L0--C0--April 14, 2019 03:37 PM

MGallego: Introduccion a Emacs Lisp: Listas

He comenazado a leerme el manual de introducción a Emacs Lisp, el cual es gratuito y se puede leer online aquí o descargar desde la misma dirección.

Así que voy a ir apuntando por aquí un breve resumen de lo que vaya aprendiendo, aunque no me gusta demasiado como está organizado el libro y voy a intentar solo anotar las cosas que realmente me resulten interesantes o crea que pueden llegar a aportar algo realmente

Listas

Lisp está basado en listas, un ejemplo de lista es el siguiente

  '(rose
    violet
    daisy
    buttercup)

Átomos

Cada uno de los elementos de las listas, separados por espacios en blanco se llama "atom", átomo. En el caso anterior rose, violet, daisy y buttercup serían átomos de la lista. Como buen átomo que se precie no se puede dividir en ningún elemento mas pequeño.

Pocas veces los programadores llaman átomo a los átomos, ya que se suelen referir a ellos por el tipo de átomo que es, por ejemplo string: '("texto entre comillas dobles") el texto entrecomillado con comillas dobles es un átomo de tipo string.

Listas vacías

Así que una lista en Lisp no es mas que una serie de átomos encerrados entre paréntesis. Aunque también podemos tener listas sin átomos, como por ejemplo () . Esto se llama "lista vacía"

Expresiones simbólicas

La representación de átomos o listas es llamada representación simbólica, Symbol Representation también denominada s-expression

Espacios en blanco

Los espacios en blanco no son tenidos en cuenta dentro de una lista, solo se usan como separados de átomos, pero independientemente del número de ellos. Los ejemplos siguientes representan la misma lista:

  '(atom1 atom2 atom3)

  '(atom1
    atom2
    atom3)

  '(atom1          atom2   atom3)

Ejecución de código

Cualquier lista en Lisp es un programa que se puede ejecutar. En la jerga de Lisp: evaluar.

Al evaluar una lista de lisp pueden ocurrir tres cosas:

  1. No hacer nada salvo devolver la propia lista

  2. Devolver un error

  3. Tratar el primer símbolo de la lista como un comando que realiza algo

En los ejemplos en los que hemos visto antes ponía una comilla simple delante de la lista, de está manera: '(lista de elementos) con esto se le dice al intérprete que debe devolver la lista tal cual. En el caso de no poder la comilla el interprete lo que intenta hacer es ejecutar el primer elemento de lista como una función. Como por ejemplo: (+ 2 2) que lo que haría sería sumar 2 + 2, ya que el primer símbolo + es la función de suma en Lisp.

Evaluando expresiones en Emacs

Para evaluar algo en emacs, lo mas sencillo es poner el cursor justo detrás de lo que queremos evaluar y pulsar la combinación de teclas C-x C-e. si por ejemplo tenemos dos listas una dentro de otra o queremos evaluar solamente un elemento de la lista podemos hacerlo colocando el cursor en el punto justo donde deseemos evaluar.

Por ejemplo con la siguiente lista: (+ 2 (+ 3 4)) si evaluamos después del último cierre de paréntesis el resultado devuelto será 9 pero si lo colocamos detrás del penúltimo cierre, el interprete nos devolverá 7 ya que estaremos evaluando solamente la expresión (+ 3 4) . Es mas, si evaluamos justo después del 4 nos devolverá 4, ya que los números se devuelven a si mismo al evaluarse.

Generar mensajes de error

En el ejemplo anterior, si evaluásemos el símbolo + nos devolvería un error. Emacs abriría un nuevo buffer donde podríamos ver la descripción del error.

Variables

Para ver el contenido de una variable no debemos meterla dentro de una lista, se debe evaluar fuera de la lista, por ejemplo en el caso de la variable fill-column que viene ya definida en emacs, para ver el contenido deberíamos evaluarla así fill-column . En el caso de que la evaluemos de la siguiente manera: (fill-column) obtendríamos un error, ya que estaría intentando ejecutar fill-column como si se tratase de una función.

Un par de ejemplo de errores serían los siguientes:

Evaluar una variable como una función

(fill-column)

Esto devolvería un error del tipo:

---------- Buffer: *Backtrace* ----------
Debugger entered--Lisp error: (void-function fill-column)
(fill-column)
eval((fill-column) nil)
elisp--eval-last-sexp(nil)
eval-last-sexp(nil)
funcall-interactively(eval-last-sexp nil)
call-interactively(eval-last-sexp nil nil)
command-execute(eval-last-sexp)
---------- Buffer: *Backtrace* ----------

Se puede ver que dice algo así como que no es una función.

Evaluar una función como una variable

Este es justo el caso anterior, en el que intentamos evaluar una función fuera de una lista, como por ejemplo evaluar el símbolo +

+
---------- Buffer: *Backtrace* ----------
Debugger entered--Lisp error: (void-variable +)
eval(+)
elisp--eval-last-sexp(nil)
eval-last-sexp(nil)
funcall-interactively(eval-last-sexp nil)
call-interactively(eval-last-sexp nil nil)
command-execute(eval-last-sexp)
---------- Buffer: *Backtrace* ----------

Sería mas o menos que se intenta ejecutar una variable que no lo es o que no está declarada como tal.

Argumentos

Como en muchos lenguajes de programación, a cada elemento que se le pasa a una función se le llama argumento. El numero de elementos puede ser variable y el tipo de elemento también.

Si pasamos un número de elementos erróneo para una función está devolverá un error. Lo mismo pasará cuando el tipo de argumento no sea el correcto. En el caso del tipado el error devolverá el tipo necesario seguido de "-p", esa p viene de predicate. Por ejemplo si requiere una lista dirá "lisp" si debe ser zero nos dirá "zerop"

La función message

Hay una función en emacs llamada message que sirve para pintar en el buffer de echo del editor. Un ejemplo de su uso sería (message "texto a mostrar")

Conclusión

He decidido no publicar mas en este post, no tiene ni todo el capitulo 1 del libro. Personalmente me resulta un tanto caótico, ya que salta de unas cosas a otras y te mete cosas como por ejemplo la función message cuando está hablando de variables, cosa que no comprendo. Así que lo mismo intento publicar posts un poco mas cortos pero mas centrados.

-1:-- Introduccion a Emacs Lisp: Listas (Post )--L0--C0--April 14, 2019 02:41 PM

La Pipa Plena: Tutorial emacs

Entre un montón de elementos linuxeros hemos realizado una traducción del tutorial de emacs de: https://www.computerhope.com/unix/uemacs.htm Seguramente tiene bastantes deficiencias pero ahí queda para quien lo quiera usar. Lo hemos colgado en el apartado emacs de la cabecera i está en: http://lapipaplena.duckdns.org/emacs/emacs_tut.html M-x felices-orgasmos
-1:-- Tutorial emacs (Post la pipa plena)--L0--C0--March 24, 2019 05:15 PM

Podcast uGeek: Notas y Documentos en la nube para compartir, trabajar en equipo,...

Notas y Documentos en la nube para compartir, trabajar en equipo,...

Simplenote, es una aplicación de notas muy conocida de Software Libre, totalmente multiplataforma y gratuita...

Sigue leyendo el post completo de Notas y Documentos en la nube para compartir, trabajar en equipo,...

Visita uGeek Podcast

Visita uGeek Podcast

Suscribete al Blog de uGeek

Suscribete al Podcast de uGeek

-1:-- Notas y Documentos en la nube para compartir, trabajar en equipo,... (Post )--L0--C0--March 11, 2019 04:45 AM

Jubilación Efectiva: GTD con org-mode. Primer intento.

Bueno, pues aquí estamos. Tras la formación GTD, Nivel 1, que os comenté en esta entrada anterior me he encontrado con un sistema GTD funcionando, que hay que aprovechar y sobre el que hoy os quiero hablar. Me parece importante comenzar a explicar los ajustes que, seguro, iré haciendo a mi sistema GTD para ver …

GTD con org-mode. Primer intento. Leer más »

La entrada GTD con org-mode. Primer intento. se publicó primero en Gestión del Conocimiento Personal.

-1:-- GTD con org-mode. Primer intento. (Post Antonio Simón)--L0--C0--February 17, 2019 09:55 PM

Jubilación Efectiva: Adquisición de hábitos con ayuda de org-mode.

Introducción. Cuando hablamos de «mejora personal«, utilizar un sistema como GTD es fundamental para realizar un seguimiento de las acciones realizadas, lo que favorece la revisión y el análisis de nuestras buenas o malas prácticas. Dentro de estas acciones hay una serie de ellas, conocidas como hábitos, que son una base fundamental de nuestro día …

Adquisición de hábitos con ayuda de org-mode. Leer más »

La entrada Adquisición de hábitos con ayuda de org-mode. se publicó primero en Gestión del Conocimiento Personal.

-1:-- Adquisición de hábitos con ayuda de org-mode. (Post Antonio Simón)--L0--C0--January 27, 2019 07:45 PM

Podcast uGeek: GNU-Linux, Emacs,.. ¿porqué?

GNU-Linux, Emacs,.. ¿porqué?

GNU-Linux, Emacs,.. ¿porqué?...

Sigue leyendo el post completo de GNU-Linux, Emacs,.. ¿porqué?

Visita uGeek Podcast

Visita uGeek Podcast

Suscribete al Blog de uGeek

Suscribete al Podcast de uGeek

-1:-- GNU-Linux, Emacs,.. ¿porqué? (Post )--L0--C0--November 21, 2018 08:53 PM

Podcast uGeek: Sincronización Selectiva en Syncthing, Markdown en Emacs, Blog Jekyll, Escritorio i3

Sincronización Selectiva en Syncthing, Markdown en Emacs, Blog Jekyll, Escritorio i3

Sincronización Selectiva en Syncthing, Markdown en Emacs, Blog Jekyll, Escritorio i3...

Sigue leyendo el post completo de Sincronización Selectiva en Syncthing, Markdown en Emacs, Blog Jekyll, Escritorio i3

Visita uGeek Podcast

Visita uGeek Podcast

Suscribete al Blog de uGeek

Suscribete al Podcast de uGeek

-1:-- Sincronización Selectiva en Syncthing, Markdown en Emacs, Blog Jekyll, Escritorio i3 (Post )--L0--C0--October 29, 2018 07:06 PM

Podcast uGeek: Como gestiono Mis Notas Markdown

Como gestiono Mis Notas Markdown

Como gestiono Mis Notas Markdown...

Sigue leyendo el post completo de Como gestiono Mis Notas Markdown

Visita uGeek Podcast

Visita uGeek Podcast

Suscribete al Blog de uGeek

Suscribete al Podcast de uGeek

-1:-- Como gestiono Mis Notas Markdown (Post )--L0--C0--October 14, 2018 10:34 PM

Podcast uGeek: Podcast: Iniciándonos en Emacs y Org Mode de un Modo muy muy Fácil.

Podcast: Iniciándonos en Emacs y Org Mode de un Modo muy muy Fácil.

Podcast: Iniciándonos en Emacs y Org Mode de un Modo muy muy Fácil....

Sigue leyendo el post completo de Podcast: Iniciándonos en Emacs y Org Mode de un Modo muy muy Fácil.

Visita uGeek Podcast

Visita uGeek Podcast

Suscribete al Blog de uGeek

Suscribete al Podcast de uGeek

-1:-- Podcast: Iniciándonos en Emacs y Org Mode de un Modo muy muy Fácil. (Post )--L0--C0--October 09, 2018 10:26 PM

Jubilación Efectiva: Mis maestros: Drymer, el Emacs en castellano.

Cuando descubrí org-mode y, como consecuencia, me topé con Emacs, me sentía bastante inseguro como para  trabajar en inglés sobre todo ello, y al hacer la recopilación de recursos, que por cierto creo debiera reorganizar :(, el descubrimiento del sitio de Planet Emacses, a día de hoy inactivo, fue una auténtica alegría y se convirtió …

Mis maestros: Drymer, el Emacs en castellano. Leer más »

La entrada Mis maestros: Drymer, el Emacs en castellano. se publicó primero en Gestión del Conocimiento Personal.

-1:-- Mis maestros: Drymer, el Emacs en castellano. (Post Antonio Simón)--L0--C0--October 05, 2018 04:19 PM

nba - GNU's Rock: temax

sucede que haciendo una prueba con el vps conectado via ssh queria dejar corriendo un comando

> youtube-dl -f best -ciw -v 'https://www.youtube.com/channel/UCbGYYbuGLFC6wIsyKXXW4cQ'

y salir de la sesion, dejando al vps a su bola, p-e-r-o, p-e-r-o, p-e-r-o si sales de la sesion ssh, tu comando tambien se corta

y esto no se soluciona poniendo un & al final del comando, por que este (supongo y sin idea) “proceso” es un “hijo” de tu shell que es un hijo de tu sesion y si la sesion se muere, el padre mata a todo mundo. Ja, ja, ja, ha

Como solucionar esto? pues teniendo un shell que sea “hijo de un demonio😈” que ande a su bola, e invocarlo cuando nos venga en gana

y todo esto que suena tan complicado y misterioso, es mas facil de lo que parece (creo). Encima podemos hacerlo con emacs, aunque igual, segun la situacion podriamos recurrir a otros dos programitos habitualmente disponibles en cualquier distribucion

emacs

emacs tiene un modo demonio que sirve para dos cosas:

  • cargar emacs una vez y luego lanzar instancias que comparten la misma sesion pero se manifiestan a la velocidad del rayo

  • volver independiente tu sesion de una shell, fuera esta en ssh o en modo texto o grafico

primero, para activar el modo demonio lanzamos el siguiente comando

> emacs --daemon

esto no lanzara ningun emacs, simplemente colocara bajo las sombras una sesion con la que podremos contactar. Para hacer esto necesitamos un comando particular llamado emacsclient. Como la mayoria de las cosas, no es tan sencillo. Si lo lanzamos tal cual

> emacsclient
emacsclient: file name or argument required
Try 'emacsclient --help' for more information

nos dira que intentemos ver la ayuda. Si bien, esta ayuda es basta, podriamos simplificarla a dos opciones utiles

> emacsclient -c

que nos lanza emacs en el buffer scratch.

dejemos una marca en dicho buffer para identificar nuestros pasos. Colocando por ejemplo, la frase "hola soy emacsclient uno"

bien, terminemos emacs como se haria habitualmente C-x C-c e invoquemos de nuevo a nuestro emacs-demonio emacsclient -c -nw

hala, nuestro mensaje sigue hay!

ahora en nuestra terminal (tilix) dividida, lanzamos de nuevo emacsclient -c -nw

de nuevo lo mismo

y si cerramos uno o todos los emacsclient da igual, lo que en ellos hagamos permanecera mientras no se apague el sistema o cerremos el modo demonio

la otra forma en la que podemos lanzar emacsclient, consiste en indicar que ficheros abrir

> emacsclient fichero1 fichero2 ...

y ahora con esto, podriamos resolver el problema inicial. Abrimos una shell, ponemos el comando a ejecutar, salimos (C-x C-c), cerramos el ssh y regresamos cuando lo creamos conveniente. El demonio de emacs con todos sus buffers y demas cosas, seguira realizando su labor!

y ahora? pues para terminar con el modo demonio, desde un emacsclient

M-x server-mode

nos dira que actualmente hay un servidor con clientes, que si lo queremos terminar de todas maneras, a lo que diremos que si.

cosas

emacs es un entorno centrado en el texto, que puede dividirse, expandirse y adaptarse de formas inimaginables, sin embargo, una terminal pura donde ejecutar programas visuales e interactivos escritos cada uno en su lenguaje, con sus propias librerias y forma de entender sus combinaciones de teclado, igual y queda en otra liga mas alla de los fines de emacs

tambien, aunque emacs posee su propia terminal (tonta) eshell, lo mejor es lanzar programas no interactivos. Ademas eshell, sola hay una y solo una, Emacs no es multiproceso, o hace una cosa o hace otra, pero no dos al mismo tiempo. Si lo que necesitamos son varias shell reales, lo mas conveniente seria recurrir a otras herramientas

GNU Screen

esto es un multiplexor de terminal, que segun la wikipedia:

es una aplicación de software que puede utilizarse para varias sesiones de inicio de sesión independientes basadas en seudoterminales dentro de una única pantalla de terminal, una ventana de emulador de terminal, una consola de sistema de PC/puesto de trabajo o una sesión de inicio de sesión remota, o para separar y volver a adjuntar sesiones de un terminal. Es útil para tratar con múltiples programas desde una interfaz de línea de comandos, y para separar programas de la sesión de la shell de Unix que inició el programa, particularmente para que un proceso remoto continúe ejecutándose incluso cuando el usuario está desconectado.

pero que en resumidas palabras, podria resumirse en un “emacs” para las terminales o como “un entorno de escritorio para las terminales”

y que podemos hacer con esto? tras instalar gnu screen (buscarlo como screen en su distribucion) y lanzarlo por primera vez

> screen

nos resivira con un bonito mensaje

tras presionar espacio, aparecera el prompt de nuestra shell de siempre, donde lanzar los comandos de siempre

bien no? pues si… a-u-n-q-u-e, cuando salimos de la terminal, no salimos de la terminal, saldremos de la terminal en screen

[screen is terminating]

volvamos a lanzarla de nuevo y veamos como demonios (ja, ja, que cachondo) utilizar este invento

primero, screen tiene algunas influencias emacseras, y como este, tiene un prefijo para hacer cosas, que por defecto es C-a (Control y a al mismo tiempo) seguido por una (o mas) combinaciones que serian el comando en si, por ejemplo, si presionamos C-a d saldremos de screen pero sin cerrar screen, que seguira en “segundo plano” a su rollo, rollo al que podemos regresar

como hacer esto? no es tan sencillo, primero deberemos averiguar el nombre de nuestra “sesion” y re-enlazar a ella

mientras haciamos el C-a d nos lanzaba la siguiente salida

[detached from 6469.pts-3.tachikoma]

un dato similar podemos obtenerlo con el siguiente comando

> screen -ls
There is a screen on:
	6469.pts-3.tachikoma	(Detached)
1 Socket in /run/screens/S-nasciiboy.

donde el dato importante es ese que va luego del punto del numero, hasta el primer espacio, es decir (y en este caso particular) pts-3.tachikoma. Dicho valor nos servira para recuperar la sesion

> screen -x pts-3.tachikoma

bonito no? ehhhh, mas o menos. Salgamos sin cerrar e iniciemos una nueva sesion con un nombre mas sencillo

> screen -S mi-sesion

de nuevo, tendriamos otra terminal…

repitiendo el listado de sesiones

> screen -ls
There are screens on:
	7832.mi-sesion	(Detached)
	6469.pts-3.tachikoma	(Detached)
2 Sockets in /run/screens/S-nasciiboy.

guaaa, que emocionante…

para contactar a esta nueva sesion

> screen -x mi-sesion

y? pues ahora un par de cosas medio chulas, primero podemos dividir la pantalla ¡en dos! presionando C-a S

luego puedes saltar a esta nueva division con C-a TAB. Ver el cursor en esta nueva seccion, apretar los botones a lo loco y ver que no pasa nada

hasta que invoques una shell en este espacio con el comando magico C-a c

dividir nuevamente la ventana (ahora en vertical) C-a |, saltar a esta C-a TAB, nueva shell C-a c y sonreir locamente

ahora como cerrar este conjunto, si salimos de la shell (C-d o con exit) la seccion no desaparecera, seguira hay hasta que presionemos C-a X

si por alguna razor quisieramos cambiar el prefijo C-a por otro distinto, por ejemplo C-b, tenemos dos opciones crear un fichero .screenrc en nuestro home con el contenido

escape ^Bb

con lo que el comando prefijo quedaria fijado a C-b por siempre jamas, o bien, lanzar screen de la siguiente manera

> screen -e^bB

y pocas cosas mas puedo comentar sobre screen y sus fabulosas cualidades. Para mas informacion dentro de la misma sesion presionar c-a ? invoca a la ayuda. tambien podriamos ver la pagina del manual

tmux

y… tmux es mas o menos como screen, tambien va a su rollo y puede sobrevivir al cuelgue de una sesion ssh, tiene combinaciones “tipo emacs” y sirve de “entorno de escritorio para las terminales”, p-e-r-o, p-e-r-o, p-e-r-o, por defecto es algo mas amigable y 🌈moderno🌈 (1987 vs 2007) aunque ambos estan escritos en c

y cual escogeria screen o tmux? pues, tmux! aunque si hay necesidad, se usar los dos!

y ahora, como usarlo

> tmux

como vemos, a diferencia de screen, tmux se nos comera una fila al final de la pantalla, muy a lo emacs. Otra diferencia particular, empieza por el prefijo, que en lugar de ser C-a pasa a ser C-b (y encuentro mas comodo). Ademas de eso al dividir la pantalla en sus diferentes formas

  • C-b " division horizontal
  • C-b % division vertical

aparecera una shell sin hacer nada mas

podemos deambular por las “divisiones” con

  • C-b o saltar a la siguiente
  • C-b ← saltar a la derecha
  • C-b ↑ saltar arriba
  • C-b → saltar a la derecha
  • C-b ↓ saltar abajo
  • C-b C-← redimencionar hacia la derecha
  • C-b C-↑ redimencionar hacia arriba
  • C-b C-→ redimencionar hacia la derecha
  • C-b C-↓ redimencionar hacia abajo

tambien centrar la atension en la shell actual sin romper la distribucion de las ventanas con C-b z (zoom) y luego restaurar con otro C-b z

o incluso y mas locochon, hacer que las shells cambien de sitio con C-b C-o

o hacer aparecer un reloc ascii gigante con C-b t

u otras cosas mas chulas como agregar “nuevos escritorios” con C-b c

e ir y venir entre escritorios con

  • C-b n siguiente
  • C-b p anterior
  • C-b 0, C-b 1 C-b …, escritorio 0, escritorio 1, …

o C-b w, que nos permite elegir visualmente

salir de esta secion sin cerrarla con C-b d y recuperarla con tmux attach

tambien, podriamos no salir de dicha sesion e ingresar en ella desde otra terminal, repitiendo tmux attach

que hace una cosa muy chula; adaptarse y limitar lo que se ve en la sesion con las dimenciones de la mas pequeña. Ademas, como en screen podemos darle un nombre a una sesion y vincularnos a ella

> tmux new-session -s mi-sesion # lanzar
> tmux attach -t mi-sesion      # conectar
> tmux list-sessions            # listar sesiones

esto y muchas cosas mas que pueden o no ser de interes, empiezan consultando la ayuda incluida C-b ?, su pagina man o si se desea un librillo con comentarios

https://leanpub.com/the-tao-of-tmux/read

aunque creo que el nombre “the tao of” le viene grande, pues no enseñan un flujo o estrategia de trabajo. Solo comandos con imagenes, que puedes descubrir por tu cuenta, como el obscuro proceso para congelar la pantalla, seleccionar texto y pegarlo en donde se nos ocurra aun sin sesion grafica!

en fin, yo estoy utilizando tmux para dejar corriendo en el servidor comandos de prolongado tiempo y tambien para ejecutar weechat “acumulando logs” por dias y dias en salas de irc… mera investigacion de la fauna…

happy hacking!

-1:-- temax (Post )--L0--C0--September 20, 2018 07:03 PM

nba - GNU's Rock: elipo

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, tar, o bien visionar directamente en version web en ingles y español

“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!

-1:-- elipo (Post )--L0--C0--July 29, 2018 05:19 PM

nba - GNU's Rock: pwds

Por lo habitual, mi uso de Emacs va emparejado con una terminal y auxiliado por el navegador de ficheros (y firefox). Asi que lo mas conveniente seria poder sincronizar las rutas de trabajo entre Emacs, Tilix (terminal) y Nautilus (navegador grafico de ficheros) sin tener que escribir cada vez la ruta entera, o andar pinchando con el raton en botones visuales

la solucion (quitando el glamour de la frace “sincronizar las rutas de trabajo de …“) consiste simplemente en copiar la ruta actual de cada programa al portapapeles

tilix

la eleccion de este emulador de terminal (ademas de por su gnomero estilo y su personalizacion de atajos profunda) se encuentra fundamentada en incorporar marcadores de fabrica. Sin embargo, optener la ruta actual y copiarla directamente al portapapeles no es una de sus caracteristicas… y por ello la solucion puede aplicarse a cualquier emulador de terminal.

para saldar la limitacion usaremos el programa xclip (buscar en el repositorio de su distribucion), en conjuncion con pwd y tr (para eliminar el salto de linea producido por pwd)

pwd | tr -d '\n' | xclip -sel clip

el comando se explica por si mismo…

otro comando que tambien suelo utilizar habitualmente para “ajustar” las fechas en los post de este blog:

date --iso-8601=seconds | tr -d '\n' | xclip -sel clip

si bien, el recordar estos comandos a primera vista parece (y lo es) una meta imposible, ya que utilizo fish como interprete y como este se encuentra en modo historial permanentemente, solo tengo que ingresar o pwd o data y el solito se encarga de completar el comando. De esa forma evito crear un script especifico para copiar cosas entre el terminal y el resto del entorno grafico

nautilus

pues nada, aunque tiene sus marcadores, si se presiona la combinacion C-l nos muestra y selecciona la ruta actual… Copiar, modificar o pegar!

Emacs

los marcadores en emacs, ademas de diferenciarlo del resto de la “competencia” lo convierten en un asistente muy potente. La cuestion es como comunicar las rutas de trabajo con el portapapeles del entorno

La solucion mas sencilla es entrar en modo dired para seleccionar y matar la ruta actual, y como la ultima entrada en el anillo de la muerte tiene comunicacion directa con el cortapapeles, tendriamos resuelto el problema… pero, ya que emacs se puede adaptar a nuestras necesidades, extendamos su funcionalidad para que copie directamente en el clipboard tanto la ruta de trabajo, como la ruta del buffer actual

(defun pwd-to-kill-ring ()
  "Agrega la ruta actual al kill-ring."
  (interactive)
  (kill-new default-directory))

(defun buffer-path-to-kill-ring ()
  "Agrega la ruta del buffer actual al kill-ring."
  (interactive)
  (if (buffer-file-name)
      (kill-new (buffer-file-name))
    (message "El buffer actual no esta ligado a un fichero")))

(global-set-key "\C-cp" 'pwd-to-kill-ring)
(global-set-key "\C-cf" 'buffer-path-to-kill-ring)

listo! con unas modificaciones minusculas tenemos nuevas funcionalidades y atajos vinculados a estas. C-c p para optener el pwd y C-c f (si el buffer actual esta vinculado a un fichero) para optener la ruta absoluta a la fuente del buffer, o en su defecto un amigable mensaje “El buffer actual no esta ligado a un fichero”

(mencionar que emacs posee el comando cd con el que podemos modificar manualmente el pwd al que apunta, como tambien un comando nativo pwd. Este pwd cambia automagicamente segun el buffer en el que estemos)

ido-mode

como el shell fish tiene un sistema de autocompletado de rutas automagico (fusionado con el historial), emacs no podia ser menos y deberia proveernos ayuda con el autocompletado de las rutas.

el modo ido nos proporciona autocompletado con “busqueda difusa” de patrones y esta disponible para la busqueda de ficheros, directorios y buffers

de inicio, es un poco lioso y si presionas tap sin antes ver que es lo que hace ido puedes verte creando ficheros en rutas inesperadas. Uno llega a cogerle el truco, pero en ultima instancia es posible desactivar sus “ayudas”

ido forma parte de la distribucion estandar, asi que no tenemos que instalar nada, solo configurarlo un poco

(require 'ido)                    ; invocar a ido
(setq ido-enable-flex-matching t) ; activar busqueda difusa
(ido-mode t)                      ; activar ido

con esto (hasta donde he podido percatarme) ido usurpara el lugar de los comandos vinculados a C-x C-f, C-x d, C-x C-d, C-x i, C-x C-w y C-x b.

Para utilizarlo basta con escribir tap para completar automagicamente y usar las flechas derecha e izquierda para navegar entre las opciones.

No hara falta escribir el nombre preciso del siguiente elemento en la ruta, con escribir algunos caracteres, por ejemplo la extencion de lo que buscamos, seguramente sea suficente.

en caso de que queramos desactivar ido y regresar temporalmente al comando que este suplantando, basta con presionar C-f. Si con esto no es suficiente y se desea apagar ido pues M-x ido-mode, o siendo mas radical, (mientras nos habituamos) podemos vincular su activacion/desactivacion a un atajo

(global-set-key (kbd "C-c .") 'ido-mode)

compile

la mayoria de los programas que realizan algun tipo de inspeccion en un fichero, como pueden ser compiladores, exportadores de formatos o programas de busqueda de patrones, suelen lanzar resultados con el formato

ruta-de-fichero:linea: "cosas"

o

ruta-de-fichero:linea:columna: "cosas"

el comando compile de emacs, se aprovecha de esta convencion para permitirnos navegar entre los ficheros que indique nuestro programa, de una forma mas comoda de lo que seria buscar directamente a mano el fichero, su linea y columna.

cuando se invoca al comando compile (M-x compile) nos pedira un comando (del sistema) a ejecutar, este podria ser por ejemplo gcc mis-cosas.c, make o por que no, grep!

Para buscar todas las coincidencias en una ruta!

M-x compile RET grep -Rn patron [ruta-opcional]

(M-x compile RET grep -Rn package ~/nconf/emacsRocks/)

sorprendente!

para navegar, entre las coincidencias podemos cambiar entre ventanas (C-x o) y dar enters en las lineas resaltadas, o, presionar C-h m y averiguar que combinaciones trae por defecto compile.

ja, ja, ja, aunque la utilidad del comando es evidente, a los peresosos emacsers les da mas por laborar una vez y descanzar eternamente. Por ello tenemos dos modos disponibles para hacer busquedas “a lo grep”.

El primero viene incorporado y se llama occur, vinculado a M-s o. El inconveniente es que las busquedas se limitan al buffer actual.

El segundo, basa su funcionalidad en un (nuevo) comando del sistema llamado ag (The Silver Searcher) que es algo asi como un grep super rapido, configurado para actuar recursivamente por defecto

hay un modo para unir en armonia tanto a compile como a ag para ello (como recomiendan en su repositorio) tendriamos que clonar el fuente y agregar lo siguiente a nuestro init:

;; source: git clone https://github.com/philsnow/ag.el
(add-to-list 'load-path "~/ruta/a/carpeta/ag.el")
(require 'ag)
(setq ag-highlight-search t)

para utilizar el comando: M-x ag RET patron RET ruta

… y eso es todo, happy hacking!

-1:-- pwds (Post )--L0--C0--April 26, 2018 09:07 PM

nba - GNU's Rock: Keep Regexp

es muy vergonZoSo sentirse capaz y al enfrentar un reto quedarse congelado al borde del fracaso

El asunto es el siguiente, tenemos un fichero con correos (muchos correos, 79 exactamente). El fichero ademas de los correos incluye nombres y comas y la meta es obtener unicamene los correos.

Empece el reto substituyendo comas por saltos de linea, luego probe una complicada regexp para buscar los correos, pero tras muchos fallidos intentos, abandone la idea… ademas, que esperaba encontrando la regexp? no es como si la coincidencia colocara la region en la coincidencia y luego se pudiera “cortar” y “pegar”

Lo siguiente, fue utilizar el comando flush-lines para borrar las lineas que no coincidieran con el patron [^@], “obviamente” no funciono, auque en mi ignorancia culpe al patron… (risa histerica) y bueno, sucede que no te aclaras y hasta se te olvida utilizar la ayuda del emacs

un par de intentos mas tarde, termine por utilizar una poco elegante macro, que cumplia el objetivo chapuceramente

luego, tras ver la primer solucion, mas simple, conpacta, no del todo “segura”, pero para el caso efectiva

cat lista_correos.txt | tr " " '\n' | grep @ | xargs

e inmediatamente despues un vi-liever solucionaba el asunto con

:%s/  */^M/g
:v/@/d
:%join

como podia evitar la inminente culpa y herida en el orgullo klingon-emacsero?

intetentando superar la frustracion, dio inicio un aprendizage formal y profundo de las regexes en emacs y alguno que otro comando mas. Pero antes de pasar a ello, fue nesesario aminorar el trauma implementando una solucion en awk y otra en C….

# esto a un fichero, por ejemplo a.awk
1 {
    for( i=1; i<=NF; i++ )
        if( $i ~ /@/ ){
            printf( "%s\n", $i)
        }
}

# y luego ejecutar con:
# $ awk -f a.awk lista_correos.txt

aca la solucion con C. Compilar con gcc a.c regexp4.c y ejecutar con $ a.out lista_correos.txt

Un dia despues, con la agonia mental aun fresca, llego la solucion en emacs

M-<
M-x replace-regexp RET " +\|," RET C-o RET
M-<
M-x keep-lines RET "@" RET

(no conocia keep-lines si tu tampoco, te la presento. Ignorar las comillas son para delimitar la cadena de entrada)

ciertamente mas extensa que vi, pero consideremos que emacs no tiene una simbiosis con el comando sed, ni tampoco una implementacion de sus comandos de tal forma que puedan ejecutarse “en bloques”. No esta tan mal, supongo.

aqui es donde se podria iniciar una “guerra santa”. Pero bueno, la naturaleza extensible e ilimitada de emacs para un tema concreto puede ser menos eficiente, es cierto… aunque, nada impide que se implemente un comando interprete tipo sed e incluso otro para aplicar acciones por lineas y de manera global (sin recurrir a macros)

Supongo que los usuarios del modo maligno, han hecho algo asi, mas profanar emacs con tales paganismos, ni utilizar “modos” que fuerzan a presionar ESC de forma inconciente, son algo a contemplar por mi parte, las cosas “modales” son un dolor, ya es suficientemente modal tener que usar el firefox, o el navegador de ficheros y andar presionando ahi teclas de otros “modos”

o, por aca un semi-equivalente en elisp de la solucion

(defun emailtor ()
  "Separa los correos en lista_correos.txt"
  (interactive)
  (goto-char (point-min))
  (while (re-search-forward " +\\|," nil t)
    (replace-match "\n" nil nil))
  (goto-char (point-min))
  (delete-non-matching-lines "@"))

ha, no es lo mas fino, pero para el caso cumple

regexp

  • Conjunto []. Conjunto inverso [^]. Dentro de los conjuntos (con la syntaxis completa [[:clase:]]) se permiten las clases

    • [:alnum:] caracter alfanumerico
    • [:alpha:] una letra, incluidos caracteres unicode
    • [:blank:] espacio y tabulacion
    • [:cntrl:] caracteres ASCII de control
    • [:digit:] numeros ascii del 0 al 9
    • [:graph:] cualquier caracter visible, exepto espacios en blanco
    • [:print:] cualquier caracter visible, incluidos espacios en blanco
    • [:lower:] caracteres en minusculas
    • [:upper:] caracteres en mayusculas
    • [:punct:] signos de puntuacion
    • [:space:] espacios en blanco
    • [:word:]caracteres que formen parte de las palabras
    • [:xdigit:] caracteres hexadecimales (0-9, a-f y A-F)
    • [:ascii:] caracter ASCII
    • [:nonascii:] cualquier caracter no ASCII
    • [:multibyte:] caracteres unicode multibyte
    • [:unibyte:] caracteres codificados en un solo byte (basicamente todo ASCII)
  • punto .

  • metacaracter \

  • agrupacion y captura \(\)

  • coincidencia con la anterior captura \d. (Substituir d por el numero de captura)

  • agrupacion sin captura \(?:\)

  • alternativa \|

  • cuantificadores

    • ? cero o uno
    • * cero o mas
    • + uno o mas
    • \{n\} exactamente n
    • \{n,\} n o mas
    • \{n,m\} entre n y m
  • modificadores

    • $ coincidencia al fin de linea
    • ^ coincidencia al inicio de linea
    • \= coincidencia en la posicion del punto
    • \' coincidencia al final del buffer
    • \` coincidencia al inicio del buffer
  • fin o inicio de palabra \b

  • (deacuerdo al modo) un caracter que forme palabras \w o \sW

  • (deacuerdo al modo) un carac,ter que no forme palabras \W o \Sw

  • espacios \s- o \s (”\s”)

  • symbolos \s_

  • delimitador de apertura \s(

  • delimitador de cierre \s)

  • caracteres de puntuacion \s.

comandos de utilidad

  • (search-forward) busqueda de texto hacia adelante
  • (search-backward) busqueda de texto hacia atras

  • C-s (isearch-forward) busqueda de texto de forma interactiva hacia adelante

  • C-r (isearch-backward) busqueda de texto de forma interactiva hacia atras

  • (search-forward-regexp) busqueda de regexp hacia adelante

  • (search-backward-regexp) busqueda de regexp hacia atras

  • C-M-s (isearch-forward-regexp) busqueda de regexp de forma interactiva hacia adelante

  • C-M-r (isearch-backward-regexp) busqueda de regexp de forma interactiva hacia atras

  • M-s o (occur) listado interactivo de lineas que coinciden con la regexp

  • (replace-string) substitucion de texto

  • (replace-regexp) substitucion de regexp

  • M-% (query-replace) substitucion interactiva de texto

  • C-M-% (query-replace-regexp) substitucion interactiva de regexp

  • (highlight-lines-matching-regexp) resaltar cualquier linea que coincida con una regexp

  • (highlight-regexp) resaltar una regexp

  • (unhighlight-regexp) des-resaltar regexp

  • (flush-lines) eliminar lineas que coincidan con la regexp. (el patron ^$ eliminara todas las lineas en blanco)

  • (keep-lines) se eliminan las lineas que no coincidan con la regexp

  • (align-regexp) alinea (verticalmente la parte en varias lineas que coincida con la regexp

re-builder, isearch, isearch+

De entre las muchas cosas relacionadas con regexes, el modo re-builder es uno muy interesante, pues nos permite escribir y editar una regexp con suma facilidad y luego copiar el resultado.

Supongo que este modo, es una facilidad para los programadores de emacs, basandome en que la expresion esta entrecomillada y al copiar la regexp con el comando reb-copy (C-c C-w) incluye las comillas y ademas el formato de escape de caracteres esta dispuesto a la forma que requiere el codigo fuente en elisp.

Dicho escape de caracteres y metacaracteres, se debe a la naturaleza de las cadenas en C de hay que las cosas suelan requerir escapes para los escapes. Por defecto re-builder viene en modo de syntaxis read que es de la que hablo, pero tambien podemos cambiar a sintaxis string (la que utiliza isearch), bien presionando la combinacion C-c TAB y escribiendo string o directamente colocando lo siguiente en nuestra configuracion

;; re-builder
(setq reb-re-syntax 'string)

pese a la facilidad de edicion y creacion de regexes, me pregunto la razon de no vincular este modo con isearch. Mas adelante (o no) una posible razon y un par de soluciones.

los comandos basicos de utilidad

  • C-c C-w copiar regexp (comillas incluidas)
  • C-c C-q salir del modo
  • C-c TAP cambiar syntaxis de entrada
  • C-c C-r ir a coincidencia previa
  • C-c C-s ir a coincidencia siguiente

isearch en sus modalidades mas conocidas isearch-forward-regexp (C-M-s) e isearch-backward-regexp nos permiten buscar expresiones regulares hacia adelante y hacia atras del punto interactivamente, mas no dejeis que os engañen las funciones basicas de estos comandos, pues no son simples comandos, son modos por si mismos, podemos averiguar sus muchas posibilidades (ya dentro de isearch) presionando C-h m o con la documentacion de la funcion C-h f isearch-forward-regexp

quiza el comando mas conocido de las busquedas interactivas sea C-w que toma la entrada sobre y delante del punto como texto de entrada (dividida por palabras). Pero ademas de esa combinacion tenemos otras muy interesantes

  • M-s e para editar “con papeles” la regexp, aunque no interactivamente
  • C-M-y ingresar a la regexp el caracter del buffer sobre el que esta el punto
  • C-M-w borrar el ultimo caracter de la regexp
  • M-s C-e ingresar a la regexp el resto de la linea apartir de la posicion del punto
  • C-y traer ultima cadena del anillo de la muerte
  • M-y iterar sobre el contenido del anillo de la muerte
  • M-c cambiar la sensivilidad a las mayusculas-minusculas
  • C-s siguiente coincidencia
  • C-r anterior coincidencia

y muchas otras cosas misticas y confusas mas trae el modo. La cuestion problematica tiene que ver con la forma en que isearch incorpora el contenido del anillo de la muerte a la busqueda, pues si por ejemplo matamos la cadena \(group\)[set] al hacer el yank (C-y) en lugan de ingresar \(group\)[set] escapara los caracteres significativos en la regexp, dejando \\(group\\)\[set] lo que obligaria a editar de forma penosa la expresion

preguntando en reddit, el unico lugar donde aparecen respuestas prontas y en ociones con feliz resultado, oantolin proporcionaba el siguiente comando alternativo para hacer el yank con su contenido tal cual dentro de la expresion

(defun isearch-yank-kill-literally ()
  "Pull string from kill ring into search string literally."
  (interactive)
  (setq isearch-yank-flag t)
  (let ((string (current-kill 0)))
    (isearch-process-search-string
     string
     (mapconcat 'isearch-text-char-description string ""))))

(define-key isearch-mode-map (kbd "C-S-y") #'isearch-yank-kill-literally)

como puede verse, se sugiere la vinculacion al atajo Control-Super-y, pero en mi caso me es incompatible con otro comando… lo que sirvio fue suplantar directamente el comando yank de isearch dejando como nombre de la nueva definicion solamente isearch-yank-kill

cabe aclarar, que la copia tal cual del contenido del anillo de la muerte, no es una caracteristica considerada de inicio en isearch, por lo que al hacer un M-y, el demas contenido del anillo seguira siendo modificado con escapes. De hay que otro colega, 00-11, suguiriera el uso del modo isearch+, que si considero esta necesidad en su base

isearch+ (supongo) es una capa sobre el modo isearch que ademas de agregar la posivilidad de hacer yanks sin modificar el contenido, nos colorear la busqueda en secciones y proporciona varios comandos de utilidad extra. Todo esto manteniendo los atajos de isearch (casi) intactos

isearch+, no viene en el repositorio melpa, para instalarlo deberemos copiar directamente su codigo desde emacswiki a un fichero, y luego cargarlo “a mano”.

https://www.emacswiki.org/emacs/download/isearch%2b.el

En el mismo fichero proponen cargar el modo con el comando

(eval-after-load "isearch" '(require 'isearch+))

pero he preferido agregar lo siguiente en mi init

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; PACKAGE*: isearch+            ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; source: https://www.emacswiki.org/emacs/download/isearch%2b.el
(load-file "~/.emacs.d/plugins/isearch+.el")

vamos con la justificacion de utilizar isearch+, que era poder hacer yanks.

En la linea 2547, tenemos la variable customizable isearchp-regexp-quote-yank-flag que si la ponemos a nil, asi

    (defcustom isearchp-regexp-quote-yank-flag nil

nos dara el resultado que buscamos.

Si, se puede hacer el cambio de la varible en el init, pero ya que tenemos y vamos a cargar el codigo directamente, mejor dejarse de historias y hacer el cambio in-situ

(nota: al cargar isearch+ substituye automaticamente a isearch. He probado el modo con emacs 25 sin ninguna extencion y funciona sin problemas)

ahora si, despues de tener isearch+ configurado, podemos escribir nuestra funcion en re-builder (modo de syntaxis string) y copiar la regexp (manualmente) ignorando los parentesis, para luego “pegarlo” directamente en isearch(+) con un yank

Enlaces, fuentes y otras cosas

-1:-- Keep Regexp (Post )--L0--C0--April 08, 2018 04:50 PM

nba - GNU's Rock: The Holy War

Post original (04/12/2001) -> https://www.linux.com/news/emacs-vs-vi-endless-geek-holy-war

Author: JT Smith

Ahí van de nuevo. El presidente de nuestro grupo local de usuarios de Linux envió el mensaje de que el tutorial de la semana sería cancelado. El hecho de que el tutorial fuera sobre el uso del editor de texto vi fue suficiente para iniciar una nueva ronda de tiros de última hora.

Greg Menke disparó la primera salva. Usar vi? ¿Qué tan difícil puede ser? Envió por correo electrónico sus propios pasos para usar vi. Fueron estos:

  1. Adquirir un pecado, de cualquier tipo, longitud > 30 cm

  2. Congelarlo durante la noche

  3. Siéntese frente a la PC, ejecute vi

  4. Sosteniendo el pez por la cola, golpéelo repetidamente contra su frente hasta que decida darle una oportunidad a EMACS porque las escamas de pescado están volando alrededor de su cabeza y comienza a doler.

Menke, por supuesto, insinuaba que no sólo vi era insensatamente obstinado sino que los usuarios de vi también lo eran por negarse a admitir cómo se estaban infligiendo a sí mismos brutales golpes en la cabeza con un pescado congelado.

No tardó mucho para que los amantes de vi devolvieran el fuego. Uno sugirió a Menke que agregara esta línea a sus instrucciones: Escriba 'emacs' antes del paso 1, para que cuando el paso 4 esté hecho, finalmente haya terminado de cargarse.

¿Intentaba decir que EMACS es lento?

Al igual que los batallones fatigados por la lucha llegan a una tregua temporal pero se niegan a abandonar la guerra, los usuarios de vi y EMACS mantienen un intranquilo punto muerto en GNU/Linux, SAGE y muchas comunidades virtuales relacionadas con computadoras. Es el tipo de empate que puede permanecer inactivo durante meses, pero sólo se necesita una pizca de vaguedad de un lado para que una vez más las llamas se propaguen por los grupos de noticias y las listas de correo. Porque justo por debajo de su conducta civilizada, cada bando siente que el editor que usa es el mejor de todos los editores posibles y aquellos que usan cualquier otro editor, particularmente ese otro editor, son tontos que se daran cuenta de su erronea forma de pensar aunque sólo sea posible a base de muchas burlas.

Ahora, una escision sobre cual editor de texto en Unix es una construccion del mismisimo Dios puede no parecer significativa dados todos los problemas del mundo, un empate de Coca-Cola vs. Pepsi sin consecuencias, sin motivaciones más allá de la simple unión grupal (¡Vamos Equipo!).

Pero, ¿por qué esta diferencia de puntos de vista ha seguido siendo un divisor de la cultura de los programadores durante más de dos décadas? ¿Por qué ha permanecido intacta en el PC, luego de que las interfaces gráficas de usuario, el ratón, Internet y el código abierto han alteraron el panorama computacional?

Desde que tengo uso de razon, la población de hackers se ha dividido 50/50 [entre] EMACS [y] vi, escribe en un email Eric Raymond, quien tiene varios roles en las comunidades de software de código abierto y hackers como antropólogo observador y participante desde hace mucho tiempo. Pico, Joe, MicroEmacs, y otros editores han estado básicamente abajo en el ruido estadístico durante todo el período. Raymond puede datar personalmente la división vi/EMACS en 1985 y estipula que, con toda probabilidad, fue mucho antes de eso.

Ya en 1991, Raymond registro la guerra santa vi vs. EMACS en el Jargon File, quizás la colección definitiva de la terminología hacker.

Cuando se presiona, la mayoría de la gente familiarizada con ambos editores dirá que la diferencia entre los dos es de velocidad vs. flexibilidad, con los usuarios de vi señalando lo rápido que pueden moverse y los amantes de EMACS pregonando su inmenso número de opciones. Los usuarios de vi se burlan de EMACS por ser innecesariamente ostentosos; los usuarios de EMACS se burlan de vi por ser difícil de aprender y tener un alcance limitado.

Así que el gran debate del editor de textos de nuestro tiempo se reduce al equivalente técnico del gustos menos/o-mas relleno. Bueno, sí, más o menos. Pero como en todos los asuntos relacionados con la religion ––o la guerra––, cuanto más se profundiza, más oscuros se vuelven los temas.

Pero aqui hay algo significativo. Estos editores son la tabula rasa sobre la que se ha construido gran parte del ciberespacio. El hecho de que estas herramientas, cada una diseñada para ser transparente para el usuario final, estén sujetas a lealtades tan feroces y competitivas, revela algo acerca de algunas suposiciones primordiales que la gente tiene acerca de las mejores maneras de hacer las cosas.

Vi: ¿El editor que el tiempo olvidó?

A primera vista, los forasteros podrían ver a vi como el editor que el tiempo olvidó. No es sólo que tienes que abrir una ventana de terminal sólo para usar la cosa. Esa también es la mejor manera de conseguir EMACS. Pero incluso con VIM, la versión actualizada que la mayoría de los usuarios de vi emplean hoy en día, uno no puede evitar maravillarse (o frustrarse) por la falta de intuición sobre su funcionamiento.

Incluso el webmaster de la página de inicio de los Amantes de VI admite que la curva de aprendizaje es empinada. Vi no es mas veloz antes de conocer 25 comandos más o menos, escribe Thomer Gil, oriundo de Ámsterdam, que actualmente trabaja en un doctorado en ciencias de la computación en el Instituto Tecnológico de Massachusetts.

Gil ha sido comparado por sus compañeros de oficina con un cavernícola que blandía un hacha y un garrote por su uso de VIM.

De todas las deficiencias percibidas en vi, tal vez la más notable sea la necesidad de ingresar la tecla de inserción sólo para escribir cualquier cosa en la pantalla. Vi tiene dos modos: Uno es el modo insertar en el que se puede introducir texto. Se accede a este modo pulsando la tecla insertar del teclado. Pero también existe el modo de comando en el que no se puede introducir texto, sino comandos relevantes. Desde el modo de inserción puede llegar a este ultimo pulsando la tecla de escape.

Así que imagínese al usuario desprevenido escribiendo por primera vez y que accidentalmente presiona la tecla de escape, sólo para descubrir que no sólo no puede ingresar más texto, sino que sus pulsaciones envian extrañas instrucciones al programa .

El Jargon File observa secamente que esta característica de vi tiende a frustrar infinitamente a los nuevos usuarios, ya que no toma comandos mientras espera texto de entrada ni viceversa, y la configuración predeterminada no proporciona ninguna indicación del modo en el que se encuentra el editor.

Los múltiples modos asustan a la gente, admite Gil.

Vi fue escrito por Bill Joy en 1976, quien lo forjó a partir de dos herramientas de edición aún más primitivas, ed y ex. Vi significaba interfaz visual, que en 1976 estaba en la vanguardia de la informática, según una entrevista a Joy en la Linux Magazine.

Intentaba hacerlo utilizable con un módem de 300 baudios. Esa también es la razón por la que tienes todos estos comandos divertidos. Apenas funcionaba usar un editor de pantalla sobre un módem, dijo Joy, Así que el editor estaba optimizado para que pudieras editar y sentirte productivo cuando pintaba más lento de lo que pensabas.

En esa entrevista, Joy contrastó el entorno de desarrollo de vi con el de EMACS, dijo que fue escrito para sistemas con enlaces de canales de fibra y un monstruo PDP-10.

Así que podrían tener comandos divertidos con la pantalla brillando y todo eso, y mientras tanto, estoy sentado en casa en una especie de vivienda excedente de la Segunda Guerra Mundial en Berkeley con un módem y un terminal que apenas puede sacar el cursor de la línea de fondo, dijo Joy, tal vez sonando un poco envidioso. La gente no sabe que vi fue escrito para un mundo que ya no existe.

Sin embargo, aunque vi debería haber desaparecido a principios de los años 80 a medida que aumentaba la velocidad de la red y del procesador, ha florecido. Las VI Pages listan cerca de 30 clones vi desde elvis y VIM hasta obscuridades tales como WinVi y vigor.

Tim O'Reilly, autor intelectual de la editorial O'Reilly & Associates, señaló en la columna Ask Tim de su empresa, que su empresa vende el doble de libros de vi que de EMACS. Además, O'Reilly apoya un juego de pintura de vi vs. EMACS en alguna convención, invariablemente el doble de voluntarios se inscriben para defender el honor de vi sobre EMACS.

Entonces, ¿cuál es el atractivo? Esto se describe mejor en el Culto de VI, en el que John Arundel escribe: Al ver a un gurú de vi haciendo una edición intensa en un archivo, mientras sus dedos sobrevuelan las teclas y las transformaciones textuales barren la pantalla, uno podría creer que está en presencia de poderes sobrenaturales.

Gil publica algunos ejemplos de esta magia en su sitio web. Un concepto clave en vi es combinar una determinada acción (borrar, copiar a búfer, escribir en mayúsculas, etc. con un movimiento (ir a la línea 25, ir al final del documento, ir a la siguiente coincidencia de 'foo', ir a la segunda coincidencia del carácter 'x' en esta línea, etc.)).

¿Eh? Le envié un correo electrónico.

Gil devuelve un ejemplo: Si, por ejemplo, un documento contiene las líneas: 'a b c d e f g h' y el cursor está situado en 'b', luego puedo escribir d/f.

La primer d significa borrar, la / es una función de búsqueda, así que lo que hará este comando es borrar de b a f.

No se requieren circunstancias especiales para usar esto... Borrar palabras, oraciones. Vuelve a donde estaba antes. Oh, no, salta de nuevo. Deshacer lo que hice, rehacerlo, escribe Gil.

Gil estipula que también puedes hacer trucos como este en EMACS. Sin embargo, se requiere memorizar combinaciones de teclas apestosas Ctrl-X Ctrl-c Alt-F4 para su ejecución.

Otro truco que Gil revela es cómo VI permite a los usuarios moverse dentro de los ficheros. La manera estúpida es usar las teclas de flecha; hay muchas otras maneras más avanzadas de moverse, escribe Gil. Entre las formas avanzadas de movimiento que ofrece vi se encuentra la opción de saltar a los últimos saltos del cursor, o a la siguiente ocurrencia de una palabra en particular, o a la siguiente oración o párrafo.

Incluso la característica de modo dual se vuelve transparente para los usuarios. Hace un año entrevisté a Jon Lasser para escribir sobre su entonces reciente libro Think Unix, (cuyo manuscrito, me dijo, fue compuesto enteramente en vi). La conversación finalmente llegó a vi, y me quejé de los dos modos.

Lasser explicó que no veía ninguna diferencia entre trabajar en vi y en procesadores de texto como StarOffice o Microsoft Word. En Word, cuando mueve el puntero fuera del área de pantalla, no puede escribir texto. De hecho, pasar del modo de inserción al modo de comando. Es lo mismo, explica.

Como O'Reilly escribió sobre vi: Como muchas cosas sobre UNIX, sólo parece difícil.

Más es más con EMACS?

Cuando el lealista de vi O'Reilly escribió en Ask Tim que primero cambió de EMACS a vi sólo después de que su perfil personalizado de EMACS fue destrozado, fue uno de esos jabs sutiles que a los usuarios de vi les gusta usar en contra de EMACS.

EMACS contrasta con la prístina limitación de comandos de vi, con su personalización casi infinita. Sin embargo, dado que la naturaleza humana es lo que es, tal poder en manos de los usuarios puede no ser siempre lo mejor.

Como dice el Emacs-Beginner-HOWTO, EMACS puede ser un editor de texto, un cliente de correo, un lector de noticias, un procesador de texto, un editor de scripts y un entorno de desarrollo integrado para lenguajes de programación.

La clave para esto son los múltiples modos, cada uno con un conjunto de comandos único, que EMACS ofrece. ¿Quieres comprobar el correo electrónico? Sólo tienes que pasar al modo de correo electrónico. ¿Quieres escribir un programa en C++? Utiliza el modo C++. ¿Necesita crear algunas páginas Web? Salta dentro del modo html-helper.

Y además de todo esto, también puedes personalizar EMACS e incluso añadir nuevas funciones, normalmente modificando su código en Lisp.

Es por todo esto que muchos usuarios de vi lo ven como terriblemente presuntuoso para lo que se supone que es un simple editor de texto, sin mencionar que distrae al usuario. La broma en curso sobre EMACS es que es un sistema operativo con un editor de texto adjunto.

EMACS como tal comenzó como un proyecto de estándares, escribe Guy Steele, uno de los creadores de EMACS, junto con Richard Stallman, quien más tarde fundó la Free Software Foundation.

Tal y como recuerda Steele, Stallman mantuvo un primer editor para el PDP-10 llamado TECO, que significaba Text Editor and COrrector. A pesar de que ciertas pulsaciones de teclas realizaban comandos de edicion, Stallman creo una tabla programable por el usuario, de manera que cada pulsación de tecla realizaba una búsqueda en la tabla que describía qué hacer para esa pulsación, según dice Steele. Una opción era ejecutar una macro TECO especificada por el usuario.

Usando esta funcionalidad de macros, los usuarios estaban programando conjuntos personalizados de macros para ser vinculados a varias pulsaciones de teclas, pero esto se volvió problemático cuando los programadores comenzaron a colaborar en programas y descubrieron que tenían pocas pulsaciones de teclas comunes entre ellos.

La comunidad de usuarios se había fragmentado con respecto a las habilidades de edición de textos (y programas), escribe Steele. Así que Steele, junto con David Moon y Stallman, asumió el proyecto de integrar todas las ideas en un conjunto de comandos unificado.

Inventé una matriz en papel y corrí mucho de un lado a otro entre los implementadores y usuarios de los distintos paquetes de macros, dice Steele en un correo electrónico.

Recuerdo esto muy bien, recuerda Dan Weinreb, quien fue uno de los primeros alfa testers de EMACS. El tipo tenía un portapapeles con un pedazo de papel que mostraba todas los atajos, y recogió cuidadosa y diplomáticamente los comentarios de todo el mundo para unificarlos, en atajos estándar.

Después de unos meses, Steele, ocupado tratando de terminar su tesis de maestría, entregó la obra a Stallman. Y el resto es historia.

El hecho de que la flexibilidad se horneara desde el inicio le da a EMACS su ventaja, dicen los usuarios hardcore.

Pienso en EMACS como la navaja suiza de los editores, menciona en un correo electrónico a Debra Cameron, coautora de Learning GNU Emacs y presidenta de Cameron Consulting. Es un ambiente de trabajo completo, un microcosmos. Si piensas en algo que desearías que hiciera, probablemente descubrirás (después de mirar a tu alrededor) que ya lo hace. Si no lo hace, puedes extenderlo y hacer que haga lo que quieras que haga.

¿No podemos llevarnos todos bien?

Entonces, ¿cómo difiere EMACS de vi?

He visto a usuarios de vi muy hábiles hacer algunos trucos bastante ingeniosos, pero sigo pensando que vi es (sólo) un editor, incluso si para algunos es un gran editor, menciona Cameron. Siempre, siempre funciona de la misma manera. En este sentido, vi es como McDonald's; no importa a donde vayas, es exactamente lo mismo.

¿Quieres un editor que se adapte a tus necesidades y peculiaridades y que haga muchas, muchas cosas o simplemente quieres ser capaz de editar archivos rápidamente en cualquier máquina? pregunta ella. Para la gente que tiene que moverse de un ordenador a otro constantemente, esta consistencia puede ser una ventaja real.

En otras palabras, EMACS = flexibilidad, mientras que vi = uniformidad?

Aquí es donde las cosas se ponen turbias.

EMACS es ciertamente más complejo que vi, pero no creo que sea más poderoso de ninguna manera útil, porque vi fue diseñado para ser parte de un sistema UNIX e interactuar con esas herramientas, replica Jon Lasser.

Tenga en cuenta que, para Lasser, útil significa la forma en que vi le permite leer documentos directamente desde una tubería UNIX desde otro proceso, como lo haría en cualquier otra aplicación UNIX, explica. Así, la cadena arcana de pulsaciones de teclas <esc> :r !ls<enter> introducidas en vi (en modo comando, recuerde) lee en el búfer la salida del programa ls, o una lista de archivos del directorio actual. Y una tubería de cualquier otro programa UNIX también funcionaría.

En cuanto a la edición automática de un gran número de archivos en vi, Lasser dice que es por eso que tenemos sed, awk, y todas las demás herramientas de procesamiento de texto UNIX.

El procesamiento de texto es para lo que UNIX fue diseñado, y vi fue diseñado para ser parte de ese sistema, escribe Lasser.

Tal vez el problema subyacente entre EMACS y vi no es el de la uniformidad frente a la flexibilidad en absoluto. Después de todo, ambos editores ofrecen flexibilidad, es sólo que con vi, lo hace a través del propio UNIX, mientras que EMACS lo logra construyendo sobre el sistema.

Y, para el caso, el único punto de la flexibilidad es hacer que el trabajo vaya más rápido. Si desea un procesamiento de texto sencillo y sin complicaciones, puede optar por Pico, que ofrece sólo una pantalla en blanco y ninguna de las características de vi o EMACS que confunden a los novatos. Lo que ambos editores ofrecen son formas avanzadas de reducir la distancia entre la velocidad de los dedos en el teclado y la velocidad del cerebro del programador.

En otras palabras, ¿podría ser que estos editores ofrezcan lo mismo, pero exijan diferentes maneras de pensar a sus usuarios? Vi requiere la paciencia para aprender sus extravagantes formas, aunque una vez que las dominas, eres libre de llevar tu acto a cualquier sistema UNIX. EMACS te da la libertad de personalizar tu configuración como mejor te parezca, aunque si no eres cuidadoso, te convertirás en prisionero de tu propia configuración.

En algún momento durante la gran caminata de mejora de la auto-eficiencia que todos los buenos programadores toman, los usuarios de vi y EMACS se cruzan, cada uno viniendo de una dirección diferente. Y cuando se encuentran, normalmente se tiran piedras unos a otros.

Pero todo está bien.

No creo que haya una gran diferencia en la funcionalidad. Ambos editores hacen un buen trabajo y todo se reduce a lo que la gente aprende primero, escribe Gil. Ya que la mayoría de las personas conocen EMACS, les enseñarán a otros EMACS. Por lo tanto, la mayoría de la gente usa EMACS, etc.

Y así la disputa continuará...

(Nota: Las mayúsculas de EMACS, UNIX y vi pueden haber sido cambiadas en comillas a sus formas originales, excepto en los títulos directos de libros y páginas Web).

-1:-- The Holy War (Post )--L0--C0--April 08, 2018 03:35 PM