nba - GNU's Rock: Por que GNU Emacs?

Si el tiempo antes de precindir de interfaces para interactuar con los computadores se extiende lo suficiente, Emacs, terminara por ser un sistema operativo autosuficiente coloca una pista de sonido, relajate y disfruta de este post al estilo “lo que otros IDEs no quieren que sepas”, “la increible historia de emacs, no podras creer el final”, “Emacs el editor que no esperabas”, … 〜( ̄△ ̄〜) he, pero es que yo utilizo (vim|VS|atom|eclipse|nano|…) y no necesito un editor viejuno y raro!
-1:-- Por que GNU Emacs? (Post )--L0--C0--July 02, 2017 05:26 PM

Bad Daemons: Ansible en emacs

Ultimamente he estado toqueteando bastante Ansible. Para quien no lo conozca, Ansible es un gestor de configuraciones. Permite instalar y configurar programas y configuraciones en un ordenador o en 1.000. Por eso se usa en el ámbito de la Integración Contínua. Pero bueno, ya hablaré más en profundidad de ello en otro articulo.

Por ahora hablaré de lo que uso para editar playbooks. Uso yaml-mode, ansible-doc y ansible-vault-mode. Por suerte los playbooks de Ansible se escriben en el maravilloso formato Yaml, muy cómodo para editarlo. El modo no ofrece mucho más que la indentación y los colores, pero tampoco hace falta mucho más:

(use-package yaml-mode
  :ensure t)

ansible-doc lo que hace es ofrecer el comando de línea ansible-doc pero desde emacs, con helm o ivy si se usa alguno. La primera linea de la sección config enlaza el ansible-doc-mode al yaml-mode, por lo que cuando se edite yaml, solo hay que ejecutar C-? y se accederá a los docs. Por defecto la primera vez que se lo llama tarda bastante en responder, por que guarda la respuesta para que las siguientes veces sea más rápido. Yo lo que he hecho es añadir la segunda línea, que hace que este cacheo se produzca al iniciar emacs. Tarda más en arrancar semacs, pero dado que solo lo arranco una vez cada muchas semanas, no me resulta un problema.

(use-package ansible-doc
  :ensure t
  :config
  (add-hook 'yaml-mode-hook '(lambda () (ansible-doc-mode)))
  (progn
    (save-window-excursion (ansible-doc "a10_server"))
    (kill-buffer "*ansible-doc a10_server*")))

Y por último, ansible-vault. Este paquete es otro wrapper de su equivalente de terminal. Para quién no lo sepa, vault es la forma de gestionar variables sensibles en ansible. Se puede usar de dos formas, con una contraseña genérica o una por proyecto. Para lo primero, solo hay que crear un fichero ~/.vaut_pass. Para lo segundo, hay que hacer uso del fichero .dir-locals.el. Este fichero permite concretar variables por directorio, como su nombre indica. Es algo propio de emacs, no de ansible-vault. Por lo tanto, en ese fichero habria que poner algo como esto:

((yaml-mode
  (ansible-vault-pass-file . "~/.ansible-vault/custom_vault_pass")))

La configuración del modo en si es la siguiente:

(use-package ansible-vault
  :ensure t
  :config
  (defun ansible-vault-mode-maybe ()
    (when (ansible-vault--is-vault-file)
      (ansible-vault-mode 1)))
  (add-hook 'yaml-mode-hook 'ansible-vault-mode-maybe))

Con esto, se hace mucho más facil y cómodo editar playbooks de Ansible. Y si además queremos visitar la página de la documentación oficial, siempre se puede usar counsel-dash.

-1:-- Ansible en emacs (Post drymer)--L0--C0--June 06, 2017 06:16 PM

Quijote Libre: Aprendiendo GNU Emacs y org-mode (VIII)

“Capturar” en org-mode

Una de las principales facilidades que me he encontrado en GNU Emacs, y en particular en org-mode, es la sencillez de almacenar la información en texto plano.

Así que para intentar quitarme el mono y recuperar ritmo vamos hoy a ver una importante funcionalidad de org-mode, sin profundizar demasiado en ella eso sí.

Se trata de “Capture” la funcionalidad,  de la que este modo dispone, para recopilar información interrumpiendo al mínimo el flujo de trabajo.

Introducción

Cómo ocurre casí siempre en este programa, Capture esta muy inspirado en un paquete anterior, en concreto en el paquete remember.el de John Wiegley.

Hasta la versión 6.36, org se desarrolla usando una configuración especial del paquete remember.el.  A partir de esa versión reemplaza este fichero por un nuevo org-remember.el fichero que desaparece desde la versión 8.0 en que es reemplazado, iba a decir que definitivamente, pero eso es mucho decir por org-capture.el.

Aunque lo que he leído por la Web deja claro que hay, cómo siempre con esta joya, mil posibilidades de configuración, en esta entrada me limito a dejar nota de los primeros pasos para un uso sencillo y dejar registro de algunas referencias con las que profundizaré más adelante.

Configurar Capture

El uso de capture implica incluir simplemente dos líneas en nuestro fichero de configuración (.emacs).

Con ellas indicamos donde queremos almacenar la información capturada y con que combinación de teclas activamos dicho modo, en mi caso:

(setq org-default-notes-file (concat org-directory "/GTD_Recopilar.org"))
 (define-key global-map "\C-cc" 'org-capture)

Usando Capture

Con esas dos simples líneas ya tenemos Capture listo para ser invocado mediante la simple combinación:

C-c c

Lo que nos presenta la siguiente pantalla:

En ella vemos las opciones por defecto para recopilar en el fichero indicado, por ejemplo al pulsar la tecla t tendríamos:

En la que vemos cómo incluir una nueva acción a realizar, en la que nos incluye la fecha y hora de la nota y la referencia al fichero desde el que se ha tomado.

Cómo vemos en la pantalla anterior tenemos tres opciones principales:

C-c C-c

Una vez finalizada la toma de notas cierra el modo Capture y devuelve el punto al lugar desde el que se llamó.

C-c C-w

Finaliza el proceso de captura almacenando esta en otro lugar, un proceso que aún no controlo, pero que por lo leido resultará útil (ver en el manual).

C-c C-k

Aborta la toma de notas y vuelve al punto anterior.

Plantillas

El último aspecto a tener en cuenta es la posibilidad de diseñar diferentes plantillas, lo que permite a Capture recopilar distintos tipos de notas en formatos diferentes.

Esto es algo que aún no me atrevo a abordar y dejaré para una entrada posterior.

Referencias

Por último. mi agradecimiento a Eduteka por la imagen inicial de esta entrada y os dejo algunos de los enlaces con los que trabajo para este tema:

 

-1:-- Aprendiendo GNU Emacs y org-mode (VIII) (Post Quijote Libre)--L0--C0--June 03, 2017 12:24 PM

Bad Daemons: Ejecución asíncrona de bloques babel en org-mode

En el articulo sobre la programación literaria para sysadmins se pudo ver que los bloques de babel en org-mode son muy útiles. Lo malo que tiene ejecutar estos bloques es que se bloquea emacs. El dichoso tema de la concurrencia de nueva. Pero como siempre, se puede trampear.

Se puede abrir un proceso paralelo de emacs para que ejecute el bloque sin que bloquee el proceso de emacs principal. Me estaba pegando con ello justo cuando descubrí que alguien ya lo habia hecho mejor. Veamos un ejemplo. Primero un ejemplo síncrono, que no tiene mucho sentido pero es gratis:

no-async-babel.gif

async-babel.gif

Muy fácil de usar, como se puede ver. Lo único malo que tiene es que no se puede usar la variable :session, por lo tanto se pierde la idempotencia. Se puede usar :noweb, pero cada bloque ejecutará todo lo anterior, lógicamente. Pero bueno, no me suele afectar demasiado para lo que uso. Para instalar el paquete que habilita este parámetro hay que añadir esto al archivo de configuración de emacs:

(add-to-list 'el-get-sources '(:name ob-async
                                     :type github
                                     :pkgname "astahlman/ob-async"))

(if (not (el-get-package-installed-p 'ob-async))
    (el-get 'sync 'ob-async))

(use-package ob-async
  :load-path "el-get/ob-async/"
  :config
  (add-to-list 'org-ctrl-c-ctrl-c-hook 'ob-async-org-babel-execute-src-block))

Una vez instalado y configurado, se puede usar como cualquier otro parámetro de bloque. Se puede establecer en el propio bloque, como se puede ver en el segundo gif, o se puede establecer como una propiedad en un árbol.

-1:-- Ejecución asíncrona de bloques babel en org-mode (Post drymer)--L0--C0--May 28, 2017 09:23 AM

Bad Daemons: Que tecla iba ahora?

Cuando empiezas a usar un modo de emacs lo más habitual es intentar aprender los atajos. Siempre es algo complicado, al menos para mi, que tengo la memoria de un pez. Lo que hacia hasta ahora era mantener la página del proyecto abierta en el navegador o apuntarme los binds. O simplemente presionar M-x, escribir la función que quiero ejecutar, ver que atajo de teclado tiene asignado (ivy te lo muestra) y presionarlo por eso de la memoria muscular. Pero hace poco descubrí which-key.

Lo que hace es mostrar los posibles atajos de teclado cuando se ha apretado el inicio de una combinación. Por ejemplo, si presiono C-c me mostrará todas las combinaciones que empiecen por C-c. Se verá más claro en esta imagen.

which-key.png

Y la configuración es muy simple:

(use-package which-key
  :ensure t
  :config
  (which-key-mode))
-1:-- Que tecla iba ahora? (Post drymer)--L0--C0--May 22, 2017 06:48 PM

Quijote Libre: Aprendiendo GNU Emacs y org-mode (VII)

“Tareas” en org-mode

Todo sistema de productividad tiene una función, que no es otra que ayudarnos a “hacer” aquellas cosas que tenemos, queremos y podemos hacer, a las que generalmente llamamos “Tareas”.

Ya hemos visto que esta denominación es excesivamente genérica para un sistema GTD y creo todos hemos experimentado que a veces una lista de “Tareas” acaba convirtiéndose en un enorme batiburrillo de “cosas” que nos recuerdan algo, aunque no sepamos muy bien qué.

Aunque  explicaré más adelante como organiza GTD estas listas para hacerla eficientes y los conceptos de “Proyecto” y “Acción” que estarían englobados dentro de esta denominación genérica, vamos en primer lugar a ver como org-mode nos permite confeccionar estas listas.

Introducción

Lo primero que hay que entender es que org-mode no gestiona las listas de tareas como documentos independientes, sino que las tareas forman parte de un fichero de notas.

Obviamente podríamos crear un fichero exclusivo de lista de tareas, pero esto nos haría perder la ventaja básica de este sistema que nos permite mantener las acciones en su contexto con lo que facilita enormemente los procesos de revisión imprescindibles en GTD.

La forma que utiliza org-mode para definir una “Tarea” es simplemente añadir una marca específica una entrada de cualquier nivel, cómo hace con etiquetas y fechas.

Funcionamiento básico

Cualquier entrada de un esquema de org-mode se considera una “Tarea” cuando comienza con la palabra “TODO” es decir en este texto:

* Mi Blog

** TODO Escribir entrada sobre "Tareas"

“Escribir entrada sobre “Tareas” sería recogido en nuestra agenda como una “Tarea” por hacer.

Lógicamente esto es GNU Emacs y no podría faltar la combinación de teclas que nos convierta una entrada en tarea, y esta no es otra que:

C-c C-t

Esta combinación funciona de forma cíclica sobre cualquier entrada haciéndola pasar por los siguientes estados:

-> (sin marca) -> TODO -> DONE  -
|                                |
<---------------<---------------<

Cómo veis más sencillo imposible, aún sí tenemos otras dos posibilidades de movernos en ese mismo ciclo que son:

S-(flecha derecha)
S-(flecha izquierda) que lo recorre de forma inversa

Ampliar nuestro Workflow

Obviamente esto nos permite gestionar una lista de “Tareas” muy sencilla, ¿pero que ocurre si necesitamos que nuestras tareas contenga algunos estados intermedios?.

Lo primero que hay que decir es que org-mode nos permite definir un flujo personalizado para tareas delegadas que sería:

-> (sin marca) -> DELEGAR -> REVISAR -> HECHO ->
|                                              |
<---------------<---------------<-------------<

Podemos definir este flujo mediante la siguiente linea en nuestro fichero de org-mode:

#+TODO: DELEGAR REVISAR | HECHO

La clave “#+TODO:” es equivalente a “#+SEQ_TODO:”.

El signo “|” sirve para que la agenda  distinga los estados “pendientes de hacer” de los “finalizados” ya que podríamos por ejemplo usar secuencias cómo esta:

#+TODO: DELEGAR REVISAR | HECHO CANCELADO

Podemos ir un paso más allá estableciendo flujos paralelos de esta forma:

#+TODO: HACER | HECHO
#+TODO: DELEGAR REVISAR | FINALIZADO
#+TODO: | CANCELADO

Estas definiciones que hemos realizado en nuestro fichero podemos personalizarlas de forma general para todos nuestros ficheros, como siempre con un poco de ELisp en nuetro fichero .emacs.

Importante tener en cuenta que cada vez que modifiquemos estas sentencias deberemos pulsar

C-c C-c

Con ello se refrescarán los estados en nuestro fichero

Por ejemplo el caso anterior se incluiría con una sentencia de esta forma:

(setq org-todo-keywords
      '((sequence "HACER" "|" "HECHO")
        (sequence "DELEGAR" "REVISAR" "|" "FINALIZADO")
        (sequence "|" "CANCELADO")))

Obviamente moverse en esta estructura con las teclas antes definidas es algo más complejo pero podemos utilizar la combinación:

C-u C-c C-t

Esta combinación nos pedirá en la línea del minibuffer el estado que queremos asignar y bastará con teclearlo.

Asignando teclas a los estados

Aún así para facilitar más las cosas org-mode nos permite asignar teclas a cada estado de esta forma:

#+TODO: HACER(h) | HECHO(t)
#+TODO: DELEGAR(d) REVISAR(r) | FINALIZADO(f)
#+TODO: | CANCELADO(c)

o en el fichero .emacs

(setq org-todo-keywords
      '((sequence "HACER(h)" "|" "HECHO(t)")
        (sequence "DELEGAR(d)" "REVISAR(r)" "|" "FINALIZADO(f)")
        (sequence "|" "CANCELADO(c)")))

Con ello conseguimos que la combinación

C-c C-t

nos presente en el minibuffer las opciones posibles con una sóla pulsación de la tecla asignada, como vemos en esta pantalla:

Tareas recurrentes

Un caso especial de “Tareas” son aquellas que se repiten en el tiempo y por supuesto org-mode provee una forma de gestionarlas.

La forma es tan sencilla cómo asignar a la entrada una “Etiqueta temporal” del estilo de las definidas en la entrada anterior pero con un formato especial.

Las repeticiones no son más que “Etquetas Temporales” del tipo activo con un indicador que indica su periodicidad, y pueden ser diarias(d), semanales(w), mensuales(m) o anuales(y), y se indican con el siguiente formato:

<2007-05-16 Wed 12:30 +nx>

Donde n indica el intervalo entre entre repeticiones y x el tipo de repetición por ejemplo:

<2007-05-16 Wed 12:30 +1w>

Dejo cómo consulta a los entendidos, para incluirlo más adelante, porque yo aún no lo pillo, si hay forma directa de insertar este tipo de etiquetas, yo lo hago insertando una activa y modificando, y cómo se gestionan los estados de workflow en las diferentes repeticiones.

Tareas dependientes

En algunos casos puede ser útil establecer una dependencia en las “Tareas” de otras menores lo que gracias a la estructura de niveles de org-mode resulta sencillo.

Vemos un ejemplo, aunque sea muy simple:

* TODO Preparar viaje de vacaciones 
** DONE Seleccionar destino
*** TODO Comprobar presupuesto
***** TODO Ver opción A
***** TODO Ver opción B
** TODO Elegir transporte
** TODO Preparar equipaje
**** TODO Elegir maleta

En casos como este lo normal es que un nivel superior no pueda marcarse cómo realizado hasta haberlo hecho con los inferiores.

Esta opción puede forzarse mediante la inclusión de la propiedad ORDERED de la siguiente forma:

* TODO Preparar viaje de vacaciones
       :PROPERTIES:
       :ORDERED: t
       :END:
 ** DONE Seleccionar destino
*** TODO Comprobar presupuesto
***** TODO Ver opción A
***** TODO Ver opción B
** TODO Elegir transporte
** TODO Preparar equipaje
**** TODO Elegir maleta

De forma inversa podemos desactivar la propiedad con esta propiedad:

       :PROPERTIES:
       :NOBLOCKING: t
       :END:

Esto nos permite incluir en cada nivel superior las etiquetas marcas del tipo [/] o [%] para ver el avance de la tarea como en este caso:

* TODO Preparar viaje de vaciones [1/3] 
       :PROPERTIES:
       :ORDERED: t
       :END:
** DONE Seleccionar destino
*** TODO Comprobar presupuesto [50%]
***** DONE Ver opción A
***** TODO Ver opción B
** TODO Elegir transporte
** TODO Preparar equipaje
**** TODO Elegir maleta

Para actualizar el avance basta situarse sobre la marca y pulsar:

C-c C-c

Cuando veamos la agenda veremos algún aspecto más de estas características.

CheckBox

La última forma de gestión de tareas para casos más imples es una simple lista de checkbox de la forma:

* TODO Organizar una fiesta [1/3]
- [ ] comprar la comida
- [-] Avsar a los invitados [2/3]
  - [ ] Pedro
  - [X] Juan
  - [X] Luis
- [X] Elegir la música

Las teclas básicas para gestionarlos son:

M-S-ENTER -> añade un elemento de lista con CeckboxC-c C-C   -> cambia el estado de un ChekBox

Por último recomiendo revisar el Capitulo 5 del manual de org-mode  y el mismo en la Guía de org-mode en los que podréis encontrar detalles más profundos de lo aquí descrito, ya que me he limitado a incluir los elementos básicos necesarios para construir un sencillo sistema GTD.

Hasta pronto y no olvidéis comentar y aportar para mejorar estas entradillas de novato ;-).

 

 

 

 

-1:-- Aprendiendo GNU Emacs y org-mode (VII) (Post Quijote Libre)--L0--C0--May 01, 2017 10:09 AM

Bad Daemons: Abrir un fichero con sudo automáticamente en emacs

Es una de estas cosas que a primera vista parece que deba ser algo simple, pero es algo más complejo cuando empiezas a mirarlo. Ya hace tiempo que encontré una función para hacerlo en local en la fantástica web de emacsredux:

(defun sudo-edit (&optional arg)
  "Edit currently visited file as root.

With a prefix ARG prompt for a file to visit.
Will also prompt for a file to visit if current
buffer is not visiting a file."
  (interactive "P")
  (if (or arg (not buffer-file-name))
      (find-file (concat "/sudo:root@localhost:"
                         (ido-read-file-name "Find file(as root): ")))
    (find-alternate-file (concat "/sudo:root@localhost:" buffer-file-name))))

El funcionamiento es: abrir un fichero y luego ejecutar M-x sudo-edit RET. No es la fiesta, pero funciona bien. El problema es que yo suelo editar muchos ficheros en remoto y por desgracia esta función no funciona, ya que tiene hardcodeado el hostname localhost. Intentando arreglar esto, me fijé en que el sitio del que habia sacado esta función tenia una segunda opción que deseché simplemente por que no la entendia:

(defadvice find-file (after find-file-sudo activate)
  "Find file as root if necessary."
  (unless (and buffer-file-name
               (file-writable-p buffer-file-name))
    (find-alternate-file (concat "/sudo:root@localhost:" buffer-file-name))))

Ahora que ya entiendo un poco más de emacs lisp, se que defadvice sirve para añadir la ejecución de una función o macro antes de otra, una suerte de before-hook. Y en este caso, esta función hace que find-file intente abrir el fichero con sudo si detecta que no tiene permisos para modificarlo. Es posible que esto diése problemas si se tiene la costumbre de modificar los atributos de los ficheros, pero es muy poco habitual.

Como eso no me servia para editar ficheros en máquinas remotas, he modificado la función anterior para que detecte automáticamente si se intenta abrir un fichero en la máquina local o en una remota y si es lo segundo, que modifique la ruta para que pueda hacerlo:

(defadvice purpose-find-file-overload (after find-file-sudo activate)
  "Find file as root if necessary."
  (unless (and buffer-file-name
               (file-writable-p buffer-file-name))

    (let* ((buffer-file (buffer-file-name))
           (coincidence (string-match-p "@" buffer-file))
           (hostname)
           (buffer-name))
      (if coincidence
          (progn
            (setq hostname (substring buffer-file (+ coincidence 1)
                                      (string-match-p ":" buffer-file      (+ coincidence 1))))
            (setq buffer-name
                  (concat
                   (substring buffer-file 0 coincidence) "@"
                   (replace-regexp-in-string ":" (concat "|sudo:" hostname ":")
                                             buffer-file nil nil nil (+ coincidence 1))))
            (find-alternate-file buffer-name))
          (find-alternate-file (concat "/sudo:root@localhost:" buffer-file))))))

En mi caso se modifica la función purpose-find-file-overload, que es la que tengo asignada a C-x C-f, pero se puede cambiar por ido-find-file, find-file o la que sea.

La ruta correcta para abrir un fichero remoto con permiso de superusuario seria así: /ssh:drymer@daemons.it|sudo:root@daemons.it:/. Esto último lo he sacado de este post de Stack Overflow.

-1:-- Abrir un fichero con sudo automáticamente en emacs (Post drymer)--L0--C0--April 25, 2017 04:00 PM

Quijote Libre: Aprendiendo GNU Emacs y org-mode (VI)

“Etiquetas temporales” en org-mode

En el manual de org-mode apartado 8 se hace referencia a un concepto especial de etiquetado que llama “timestamp” termino que traduciré por “Etiqueta temporal” ya que tiene un tratamiento muy similar al que se usa con las etiquetas (ver entrada anterior), siendo en realidad una “etiqueta” con un formato específico, que en general se asociará a una entrada concreta del calendario.

Con esta entrada nos vamos acercando al final del repaso a los elementos básicos necesarios para implantar un sistema GTD sobre org-mode para lo que si todo va cómo pienso sólo nos quedan dos entradas más una dedicada a las “Acciones” – no pongo tareas de forma consciente – y otras a algunos temas de formato como listas, tablas y presentación.

Vamos al lio …

Cómo insertar “Etiquetas temporales”

Al igual que las etiquetas estas se asocian a un nivel del esquema del documento org-mode y pueden aparecer en la propia cabecera o dentro de la misma.

Para  que org-mode reconozca este tipo de marcas estas se crean en un formato especifico, formato que puede ser personalizado según indica el apartado 8.2.2 del manual , no obstante y visto las consecuencias que esto parece tener en la agenda por el momento descarto este tema y nos ceñiremos al formato estándar.

Vamos con lo útil , así trabajaremos con las fechas:

C-c .

Abre la pantalla de “selección de fechas” en la fecha actual para elegir la fecha que inserta en el formato <2017-04-20 Thu> al pulsar INTRO

C-c !

Realiza la misma operación que la anterior pero en formato [2017-04-20 Thu]

La diferencia entre ambos formatos es que la primera se considera una marca “activa” por lo que se incluirá en la agenda y  aparecerá en las revisiones de la misma, mientras que la segunda es “inactiva” y funciona sólo a efectos informativos.

C-u C-c .
C-u C-c !

Son similares a la anteriores, pero incluyen la hora en la marca es decir generan este tipo de marca:

  • <2017-04-20 Thu 12:33>
  • [2017-04-20 Thu 12:34]
C-c C-c

aplicada sobre una marca corrige el nombre del día

S-right/left

Aumenta o disminuye un día a la marca sobre la que se ejecuta

S-arriba/abajo

Aumenta o disminuye el valor de la marca sobre el que se ejecuta, si el punto esta sobre el año aumenta o disminuye este, si esta en los minutos lo hace sobre ellos

Dos funciones especiales son:

C-c < (org-date-from-calendar)

Inserta directamente una marca “activa” con la fecha actual del calendario.  Sería el equivalente al primer caso que hemos visto, sin pasar por la pantalla de “selección de fecha”

C-c > (org-goto-calendar)

Abre el calendario en la fecha que figure en la marca de la linea en que estemos

Por último y sólo cómo adelanto ya que esto necesitará una entrada exclusiva:

C-c C-o

Abre la agenda de la fecha sobre la que se pulse.

La pantalla de “Selección de fechas”

Cuando pulsamos cualquier combinación para introducir una fecha nos aparece en el “mini buffer” un calendario con el punto sobre la fecha actual del la siguiente forma:


Nuestra deformada mente visual nos impulsara a tirar de ratón para buscar la fecha que deseamos pero la realidad es que la entrada es mucho más fácil, basten estos ejemplos que os recomiendo probar:

     +0            ⇒ Hoy
     .             ⇒ igual que el anterior
     +4d           ⇒ 4 días a partir de hoy
     +4            ⇒ igual que el anterior
     +2w           ⇒ 2 semanas a partir de hoy
     +2tue         ⇒ segundo martes desde hoy
     -wed          ⇒ último miércoles

Cómo vemos formas muy simples de incluir una fecha concreta.

Hay que tener en cuenta que org-mode interpreta por defecto las fechas cómo posteriores a la actual, por lo que asumiendo que hoy es 22-04-2017 podemos hacer entradas del tipo:

   apr 15        ⇒ 20018-04-15
   feb 15        ⇒ 2018-02-15
   sep 12 9      ⇒ 2009-09-12
   may 5         ⇒ 2017-09-12

Como veis bastante sencillo.

La gestión del tiempo en GTD

Por último no quiero cerrar sin hacer alguna salvead al uso de fechas en eĺ  sistema GTD, en el cual las fechas son utilizadas en dos áreas diferente, en la agenda y cómo recordatorio, al hacer presente algún asunto aplazado en una fecha concreta.

Digo esto porque desde mi llegada a GNU/Linux he vistos en la diferentes aplicaciones de gestión de tareas que he revisado y muy especialmente en org-mode una pasión por el registro de tiempos, que puede ser útil en determinados ámbitos industriales, pero en entornos de gestión actuales esta muy obsoleto.

Baste cómo o ejemplo que si yo hubiese controlado el tiempo dedicado a esta entrada, entre lecturas, pruebas y borradores esa sería una información que aportaría muy poco al hecho de si la he publicado o no, que es de lo que al final se trata, ya que podría seguir en esas tareas eternamente y sólo la decisión de darla por cerrada y publicarla ha sido lo que ha hecho posible que llegue a vosotros.

Por si no queda claro podéis recordad esta “Ley de Parkinson” que dice:

“El trabajo se expande hasta llenar el tiempo de que se dispone para su realización”

Esto suele ser así cómo consecuencia de la falta de atención a la tarea a realizar, normalmente derivada de una mala revisión y una falta de compromiso personal con la misma.

Por mi parte he visto tantos fallos de “fechas previstas” sin que normalmente se haya hundido el mundo que no veo ningún sentido a estos enfoques y deje de usarlos hace mucho, utilizando en mis listas de acciones el enfoque de Michel Linenberger en su libros “Master Your Now (MYN)” y “The One-Minute To-Do List (1MTD)” y que implica dos cosas:

  • Registrar la fecha de creación de una tarea y/o la fecha de la última revisión de la misma
  • Cuando haya una fecha tope realmente ineludible se registra en la propia descripción de la tarea

Este enfoque resulta muy útil porque ayuda a valorar el compromiso real con una tarea, mirad vuestra lista de tareas y seguro tenéis alguna creada hace … – poned el tiempo que queráis – y sigue ahí sin avanzar sin que se  os haya caído el cielo encima.   ¿Por qué?,  pué parece claro que o no esta bien definida, no os interesa, o no es necesaria por eso sigue ahí.

Que quede claro que uso el termino “tarea” de forma genérica para hacer referencia a “algo por hacer” sin entrar a distinguir conceptos diferentes cómo son los “Proyectos” y  “Acciones” según la terminología de GTD, cómo veremos más adelante.

En cualquier caso cómo adelanto tengamos siempre presente que un “Proyecto” – que es un conjunto acciones para logra un objetivo – en GTD nunca tiene fecha de compromiso, y de existir este sería sólo aplicable a la última “Acción” (paso) de dicho proyecto.

No me lio más y os dejo dos referencias magistrales al respecto:

Para saber más de este tema os recomiendo ller con atención estos dos posts de jerónimo Sánchez:

Por todo esto obviaré los puntos del manual a partir del 8.4 ya que están más orientados al control de tiempo, sin descartar que en algún momento por necesidades muy específicas haya que hablar de ellos.

-1:-- Aprendiendo GNU Emacs y org-mode (VI) (Post Quijote Libre)--L0--C0--April 22, 2017 09:49 AM

Bad Daemons: Sprunge.el - Enviar texto a un paste

Hace ya un par de años cuando quiero compartir texto desde la terminal, ya sea código o un fichero de configuración, uso https://sprunge.us. Tengo un alias hecho:

alias paste="torify curl -F '\''sprunge=<-'\'' http://sprunge.us"

Esto se añade al ~/.bashrc o al ~/.zshrc, se ejecuta algo como cat ~/.bashrc | paste y ale, a volar. Y evidenetemente, se puede hacer lo mismo en emacs con el paquete equivalente, sprunge.el. Provee dos funciones, sprunge-buffer y sprunge-region, para enviar el buffer o la región selecionada a sprunge, respectivamente. Se instala y configura tal que así:

(add-to-list 'el-get-sources '(:name sprunge
                                     :type github
                                     :pkgname "tomjakubowski/sprunge.el"))

(if (not (el-get-package-installed-p 'sprunge))
    (el-get 'sync 'sprunge))

(use-package sprunge
  :init
  (use-package request :ensure t)
  :load-path "el-get/sprunge")

No tiene mucho misterio, solo tiene la dependencia de request, que está incluido en la sección de :init.

-1:-- Sprunge.el - Enviar texto a un paste (Post drymer)--L0--C0--April 19, 2017 02:16 AM

Quijote Libre: Aprendiendo GNU Emacs y org-mode (V)

Lo cierto es que la vuelta al trabajo esta siendo dura y mis últimos años laborales se presentan díficiles lo que me esta dejando el ánimo por los suelos, pero aún así sigo intentando avanzar y hoy os voy a presentar un apartado fundamental para implementar un GTD en org-mode que no es otro que la Etiquetas.
Vamos a ello …

Etiquetas

Uno de los temas fundamentales, a la hora de organizar cualquier información es el uso de Etiquetas – por ahí se usa Tags pero cómo siempre huyo de anglicismos, aunque sean técnicos -.

Las etiquetas sirven para utilizarse como filtros que nos permiten limitar la información que manejamos en cada momento, es decir, entre otras funciones, cumplen  perfectamente el objetivo marcado en GTD a los Contextos concepto que podréis entender perfectamente con las lecturas de artículos de jerónimo Sánchez que os dejo en las referencias.

Es importante este concepto como aclara muy bien Jerónimo ya que el contexto hace referencia no śolo al lugar físico cómo he visto en algunas interpretaciones de GTD, sino a los medios disponibles en cada momento para poder abordar una tarea.

Una vez hechas estas aclaraciones vamos a ver como usa org-mode las Etiquetas.

Reglas básicas

Lo priomero de todo los conceptos fundamentales que podemos resumir en estos puntos:

  • Las Etiquetas se asignan a una cabecera
  • Estas se introducen al final de la cabecera
  • Las etiquetas son palabras formadas por letras, números y los signos ‘_’ y ‘@’
  • Se indican precediendo y terminando la palabra con dos puntos, por ejemplo, :@Recados:
  • Una entrada puede tener varias etiquetas, por ejemplo :@Reunión:Juan:

Con estas simples reglas ya podemos etiquetas nuestros ficheros, pero hay más.

Herencia de etiquetas

Hay que destacar que las Etiquetas se heredan a todas las ramas inferiores de un Esquema, por ejemplo:

* Crear página Web                                     :MiBlog:
 ** Diseñar la cabecera                                :Diseño:
 *** TODO Crear mi Logotipo                            :Cecilia:

En el caso anterior la última cabecera tiene en realidad no sólo la suya, sino también las dos de las cabeceras superiores.

Definición de etiquetas

Las etiquetas pueden asignarse manualmente, con lo que org-mode construirá de forma dinámica una lista de etiquetas, pero tambien podemos usar listas de etiquetas personalizadas a dos nivles:

  • General: Lo incluimos en nuestro fichero .emacs por medio de una linea del tipo:
(setq org-tag-alist '(("@trabajo" . ?t) ("@casa" . ?c) ("portatil" . ?p)))
  • Particular: Sólo para un fichero, incluyendo en el mismo una línea del tipo:
#+TAGS: @trabajo(t)  @casa(c)  @futbol(f)  servidor(s)  pc(p)
Comandos de etiquetas

Aunque las Etiquetas se pueden escribir manualmente hay una serie de combinaciones de teclas que facilitan el trabajo, de las que sólo os dejaré la que considero más útil, ya que en las referencia podréis encontrar más:

C-c C-q -> Asigna Etiquetas a la entrada actual con autocompletado

Es importante señalar que en las configuraciones que hemos marcado en el punto anterior se ha asignado a cada etiqueta una letra minúscula que facilitará su inserción.

Las etiquetas se alinean a la columna definida en la variable org-tags column o en función de lo que indiquemos mediante la combinación “C-u nº” de forma previa a la combinación indicada anteriormente.

Propiedades

Aunque no se trata propiamente de Etiquetas las Propiedades son una serie de palabras clave asociadas a un fichero o entrada del equema.

Se agrupan en un apartado especial bajo el epígrafe  PROPERTIES.

Cada propiedad se especifica en una única línea indicando su nombre entre dos puntos, cómo las etiquetas,  y detrás su valor, por ejemplo:

* Biblioteca
** Clásicos
*** El Quijote
   :PROPERTIES:
   :Título: El Ingenioso hidalgo Don Quijote de la Mancha
   :Autor:  Miguel de Cervantes
   :Género: Novela
   :Año: 1605
   :END:

Podemos definir Se pueden definir los valores permitidos para una propiedad particular ‘:X:’ asignandole la propiedad ‘:X_ALL:’.

Esta definición es heredable, por lo que si la incluimos en el principio de un fichero o en una entrada de tipo uno será heredada por los niveles inferiores.

la ventaja de estas definiciones es que facilitan la entrada de datos y la hacen menos propensa a errores.

Por ejemplo sobre el caso anterior podríamos definir:

* Biblioteca
 :PROPERTIES:
 :Género_ALL: Novela Teatro Poesía
 :END:

o globalmente usando org-global-properties, o para todo un fichero indicando al principio de este:

#+PROPERTY:  :Género_ALL: Novela Teatro Poesía

Para manejar las propiedades podemos usar estas convinaciones de teclas:

C-c C-x p - Asigna una propiedad. Nos pediráun nombre y un valor para la propiedad.

C-c C-c d - Borra una propiedad de la entrada actual.
Referencias

Para la construcción de este artículo he consultado bastante, aunque básicamente el manual de org-mode, pero no puedo dejar de citar estos artículos:

Sobre contextos en GTD

Dos artículos de Jerónimo Sánchez que hace tiempo forman parte de mis referencias fundamentales de GTD:

Sobre Etiquetas en org-mode

Hasta pronto, espero.

-1:-- Aprendiendo GNU Emacs y org-mode (V) (Post Quijote Libre)--L0--C0--March 26, 2017 12:00 PM

Quijote Libre: Recursos de Org y Emacs

Irreal es uno de los sitios que siempre me aporta información interesante sobre Emacs y en uno de su últimas entradas ha hecho referencia a Ben Elijah de Ink and Ben que ha publicado una página con una muy interesante lista de recursos para conocer org-mode y Emacs.

Si bien la lista esta muy orientada a org-mode también incluye algunos recursos básicos de Emacs.

Dado su interés y simplicidad la incluyo en el apartado de enlaces importantes de este sitio.

-1:-- Recursos de Org y Emacs (Post Quijote Libre)--L0--C0--March 12, 2017 08:26 AM

La Pipa Plena: Curso emacs 23. Presentaciones con beamer

En esta entrada veremos como crear una presentación con beamer a partir de un archivo org. Para no andar dejando archivos esparcidos por cualquier parte, creamos un directorio de trabajo y en su interior colocamos el archivo presentacion.org: $ mkdir beamer $ touch beamer/presentacion.org Para hacer lo mismo también puedes emplear dired: M-x d RET
-1:-- Curso emacs 23. Presentaciones con beamer (Post templix)--L0--C0--March 05, 2017 04:37 PM

La Pipa Plena: Curso emacs 22. Personalizar la linea de modo y el minibuffer

En esta entrada veremos como personalizar un poco la linea de modo y el minibuffer. Sin ningún tipo de modificación, la linea de modo puede lucir más o menos así: Añadiendo a nuestro archivo de configuración .emacs las siguientes lineas: (setq-default mode-line-format (list " %2 " mode-line-modified " %2 %f %4 [%l:%p] " " %4
-1:-- Curso emacs 22. Personalizar la linea de modo y el minibuffer (Post templix)--L0--C0--February 24, 2017 03:42 PM

Onda Hostil: Lo que he aprendido: variables locales en Emacs

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

Con variable local me refiero a una variable que solo afecta a un documento. Es decir, marcamos el documento de tal manera que le diga a Emacs cómo lo tiene que tratar. Estas variables pueden indicar el modo en el que Emacs debe abrir el documento, el idioma del corrector, la anchura de texto, …

Hay dos maneras de incluir variables locales. Podemos añadir una línea al principio del documento dentro del comentario correcto para nuestro tipo de archivo (que Emacs nos pone muy amablemente con M-;).

La línea en cuestión tiene esta pinta (habría que comentarla con la marca de comentario que corresponda):

-*- variable1: valor ; variable2:valor -*-

En mi caso, la variable a establecer es ispell-local-dictionary. Como estaba escribiendo en Markdown, la línea quedó así:

<!-- -*- ispell-local-dictionary: "italian"; -*- -->

La otra opción es hacer una lista de variables locales al final del documento. La lista tiene esta pinta:

Local Variables:
variable1: valor
End:

Al igual que antes, debemos comentar estas líneas como corresponda, por ejemplo, si estuviese escribiendo en LaTeX lista para el idioma del corrector quedaría así:

% Local Variables:
% ispell-local-dictionary: "italian"
% End:

Nada más, hoy entrada corta para compensar el tocho de ayer 😉

Referencias

How to set spelling dictionary on the fly in Aquamacs

51.2.4.1 Specifying File Variables en el manual de Emacs

Local variables en EmacsWiki

Go Gnu por Uosɐɾ Mcarthur vía Attribution Engine. Licencia CC BY.

-1:-- Lo que he aprendido: variables locales en Emacs (Post Ondiz)--L0--C0--February 22, 2017 06:41 PM

La Pipa Plena: Curso emacs 21. Postámbulos y algo sobre imágenes en org-mode

Por defecto, el postámbulo que aparece en un html que ha sido exportado de un archivo org, coge los datos del sistema y consta del nombre del autor (author), la fecha (timestamp), las versiones de emacs y org-mode (creator) y el link de validación del código. Si queremos especificar más datos de las mencionados o
-1:-- Curso emacs 21. Postámbulos y algo sobre imágenes en org-mode (Post templix)--L0--C0--February 18, 2017 06:22 PM

Onda Hostil: Lo que he aprendido: escribir en WordPress desde Emacs

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

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

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

M-x load-file RET ubicación

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

(require 'weblogger)

Podemos configurar para siempre las opciones haciendo:

M-x customize-group RET weblogger RET

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

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

Para empezar una nueva entrada hacemos:

M-x weblogger-start-entry

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

A continuación, veremos algo con esta pinta:

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

Donde podemos escribir alegremente.

Para gestionar las entradas tenemos los siguientes comandos:

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

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

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

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

Referencias

Weblogger Mode en GitHub

Weblogger mode en Emacs Wiki

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

-1:-- Lo que he aprendido: escribir en WordPress desde Emacs (Post Ondiz)--L0--C0--February 15, 2017 08:00 AM

nba - GNU's Rock: no mas tabs en go-mode

Go tiene una ridicula guia de estilo para formatear codigo que no me agrada, de no seguir algunas reglas el compilador/interprete simplemente se niega a hacer nada. Otras reglas, son menos rigurosas, como la indentacion o colocar o no espacios, en algunos sitios. La indentacion oficial del lenguaje, tiene tabs equivalentes a 4 espacios en blanco y eso, eso, es algo que no puedo soportar, como tampoco tener tabs, porque cada editor los despliega como le viene en gana.
-1:-- no mas tabs en go-mode (Post )--L0--C0--February 13, 2017 03:52 AM

La Pipa Plena: Curso emacs 20. Gráficos con org-mode (ditaa y plantuml)

En esta entrega veremos como crear gráficos con org-mode para que al exportar a html se vean aparentes. En primer lugar, caso de no tenerla instalada, instalamos la aplicación ditaa (apt-get install ditaa), aplicación que transforma caracteres ascii en mapas de bips. Una vez instalado en el sistema, abrimos emacs y visualizamos su página man:
-1:-- Curso emacs 20. Gráficos con org-mode (ditaa y plantuml) (Post templix)--L0--C0--February 05, 2017 03:07 PM

nba - GNU's Rock: org mode

org-mode es un lenguaje de marcas ligeras nacido de, por, y para emacs y como emacs, org tambien tiene aplicaciones varias, puede ser una agenda, una lista de pendientes, hoja de calculo, blog de notas, sistema de documentacion e investigacion reproducible, todo junto y revuelto, encima da la posibilidad de exportar el contenido a pdf, latex, html, markdown, odt y groff (algunas opciones vienen por separado y requieren configuracion).
-1:-- org mode (Post )--L0--C0--January 31, 2017 08:40 PM

Maxxcan's Site: Qué hacer después de instalar Emacs (3ª parte)

Qué hacer después de instalar Emacs (3ª parte) Seguimos con la última parte de nuestra introducción a …
-1:-- Qué hacer después de instalar Emacs (3ª parte) (Post admin)--L0--C0--January 24, 2017 01:35 PM

nba - GNU's Rock: Emacs web y noticias en modo texto

Eso de los rss parece ser mas bueno que encontrar un billete de alta denominacion, almenos esa es la impresion que tenia, ya que (casi) todas las paginas incluyen el icono naranja con unas barras. Cierto es que intente utilizarlo un par de veces, solo que lo encortre muy complejo… asi pues he pasado cerca de cinco años abriendo todos los dias los marcadores del firefox en manada, hasta que hace unos pocos dias descubri como es esto de los rss (pese a que este blog los genera automagicamente)
-1:-- Emacs web y noticias en modo texto (Post )--L0--C0--January 18, 2017 03:29 PM

Onda Hostil: Lo que he aprendido: configurando Aspell para Emacs

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

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

Instalar diccionarios

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

aspell dump dicts

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

Instalación desde los repositorios

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

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

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

Instalación manual

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

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

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

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

Y a continuación:

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

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

Configurar Emacs

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

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

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

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

(setq ispell-dictionary "castellano")

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

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

Más

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

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

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

-1:-- Lo que he aprendido: configurando Aspell para Emacs (Post Ondiz)--L0--C0--January 17, 2017 02:50 PM

nba - GNU's Rock: Definir atajos en Emacs

En emacs, tu puedes crear cualquier atajo de teclado para cualquier comando Por ejemplo, si deseas [F7] para el calendario, coloca en tu archivo de configuracion de emacs (global-set-key (kbd "<f7>") 'calendar) Si estas experimentando y no deseas reiniciar emacs cada vez que intentas definir un nuevo atajo, puedes colocar el cursor al final del ultimo parantesis e invocar a (M-x) eval-last-sexp (comando ligado a C-x C-e). El atajo se activa de inmediato.
-1:-- Definir atajos en Emacs (Post )--L0--C0--January 07, 2017 03:38 PM

La Pipa Plena: Curso emacs 19. impatient-mode, writeroom-mode, capturas y memoria en uso.

En esta ocasión veremos algunos paquetes interesantes que, en determinadas circunstancias, pueden sernos útiles. En ciertas ocasiones queremos compartir un buffer de emacs en nuestra red local y que además todos vean lo que estamos tecleando en tiempo real. Una forma fácil de realizar estas proezas es con la extensión impatient-mode. Este paquete precisa simple-httpd
-1:-- Curso emacs 19. impatient-mode, writeroom-mode, capturas y memoria en uso. (Post templix)--L0--C0--November 28, 2016 06:00 PM

Onda Hostil: Lo que he aprendido: recuperar archivos en Emacs

Hoy traigo truco rápido de Emacs: cómo se recuperan los archivos cuando Emacs muere. Os habréis fijado que si nosotros estamos editando un archivo foo.txt Emacs crea un #foo.txt# y un foo.txt~. El primero de ellos, el de las almohadillas, es el archivo de autoguardado, solo está si tenemos cambios sin guardar. El segundo es la copia de seguridad, Emacs antes de que modifiquemos un archivo crea una copia de seguridad del mismo. Así, si la liamos siempre podemos regresar a un mundo anterior (es muy sabio Emacs).

A nosotros en este caso nos interesa el #foo.txt# porque Emacs se ha roto, se ha ido la luz antes de que guardásemos o demás cosas locas que pasan. Cuando abramos el archivo que no nos ha dado tiempo a guardar Emacs nos dirá que el archivo de autoguardado es más moderno y que podemos recuperarlo con M-x recover-file. Le obedecemos y nos aparecerán listados en un buffer el archivo sin guardar y el guardado automáticamente cada uno con sus tiempos de guardado. Si queremos recuperarlo le decimos que sí, que recupere. No tiene más.

Espero que os sea útil

Más

If Emacs crashes, how can I recover the file I was editing?

Recovery After a Crash en el manual

Backup Files en el manual

GNU Emacs backup files


-1:-- Lo que he aprendido: recuperar archivos en Emacs (Post Ondiz)--L0--C0--November 16, 2016 07:00 AM

Onda Hostil: Por qué uso Emacs

Muchas veces me preguntan por qué uso Emacs, teniendo en cuenta que soy ingeniera industrial (o de la carrera de la piedra y el palo como la llamo yo) no debería aportar mucho a mi trabajo. La verdad es que empecé a usar Emacs por curiosidad y por llevarle la contraria a mi hermano, fans absoluto de Vim, pero tengo que reconocer que no recuperaría mi rutina de trabajo pre-Emacs.

¡Centrémonos! Ahí van mis razones para usar un editor que así de primeras parece anticuado y raruno.

Libertad

Empecemos por la ideología. Emacs es software libre y como tal respeta la libertad de sus usuarios. Puedo ver cómo está escrito, modificarlo y compartir mi versión. Si no fuera así, no existirían cosas como Spacemacs ni tantísimos modos que me hacen a mí muy feliz.

Emacs tiene la ventaja añadida de que fue escrito por mi muy amado Richard Stallman.

Eficacia

Yendo ya a temas más productivos, valoro especialmente que Emacs me abra archivos de texto de megas al momento y sin cascar (como Matlab) o paralizarse (como el Bloc de Notas). Bastante útil cuando manejas inputs de Abaqus de sistemas de un par de millones de grados de libertad.

Versatilidad

Suelo escribir en Markdown y Latex, programar en Matlab y algo en Python, leo resultados de programas diversos y, últimamente, escribo unos minimakefiles. Todos estos archivos tienen en común que son texto plano. Emacs puede abrirlos todos, cada uno con su sintaxis resaltada correspondiente y sus funciones específicas.

Abrir todo tipo de archivos en un mismo programa me permite no volverme loca con la posición de los botoncillos y usar los mismos atajos de teclado en todos los casos.

Configuración

Puedo adaptar Emacs a mis gustos en lugar de adaptarme yo a los gustos de Emacs (saludos, Word). Muchas cosas se pueden cambiar desde el customizador sin necesidad de programar Lisp y para las que no, siempre podemos encontrar unos trocillos de código que copiar y pegar en Internet. Además, el código Lisp es bastante claro y fácil de adaptar aunque no sepamos apenas programar (como es mi caso).

Por otra parte, el tener la configuración centralizada en un archivo me permite que mi Emacs sea igual allá donde esté, mantengo el archivo (o la carpeta) de configuración bajo control de versiones y tengo todas las modificaciones bajo control, nunca mejor dicho.

Interfaz

Parece que para usar Emacs hace falta aprenderse cinco mil millones de combinaciones de teclas pero dejadme que os diga algo: no es necesario. Yo uso Emacs igual que puedo usar Writer o el Paint, con la GUI y su ratoncillo y tal. Sí que es verdad que intento limitar mi uso del ratón, especialmente porque tengo ambas muñecas lesionadas, pero no me chino. No hay por qué ser un nazi de la terminal.

Los comandos que sí me sé:

  • C-g : para salir de un berenjenal en el que me he metido
  • C-x C-c: para cerrar
  • C-x C-s: para guardar
  • M-x: para ejecutar cosas
  • C-x C-f: para abrir o crear archivos
  • C-s: para buscar

Ya veis que son poquitos. Además, excepto C-g y M-x, todos los demás tienen su botoncillo equivalente así que en sí ni son necesarios. Poco a poco me voy aprendiendo algunos más pero con tranquilidad. Así le hago currar un poco al cerebro, todo son ventajas.

Integración

Hay gente que considera Emacs un sistema operativo y yo casi casi les doy la razón. Se puede hacer todo desde Emacs si te empeñas. Yo valoro especialmente su integración con git y el terminal y poder compilar directamente desde Emacs.

Productividad

He dejado para lo último mi motivo (pragmático) principal: Emacs me hace ser más productiva. En primer lugar porque tener abierto un solo programa hace que me centre mejor. Además, puedo hacer fácilmente cosas que con otro editor más simple no podría o me llevarían mucho más tiempo. Unos ejemplos:

En realidad lo que más me gusta es que siempre hay una manera más fácil y más loca de hacer las cosas en Emacs, siempre hay cosas nuevas que aprender.

Bonus: frikez

Siguiendo con lo anterior, me encanta que una herramienta que uso a diario me sorprenda cada día. Gracias a Emacs tengo que leer código y manuales y eso me ayuda a pensar mejor y más rápido. Me he animado incluso a escribir mi propio modulillo, que no hace gran cosa pero me siento superorgullosa de él.

Además, ¡siempre hay modos interesantes que encontrar! De hecho, buscando un cómic de xkcd para ilustrar esta entrada he descubierto que hay un modo de Emacs para leer xkcd. Casi me quedo muerta :O

NOTA: Me inspiró para escribir esta entrada este link que me offtopic-eó victorhck por ahí en alguna entrada 😉


-1:-- Por qué uso Emacs (Post Ondiz)--L0--C0--November 08, 2016 07:00 AM

Maxxcan's Site: Qué hacer después de instalar Emacs (2ª Parte)

Si no has visto la 1ª Parte la tienes aquí 1 Algunos paquetes interesantes 1.1 Ido mode Ido Mode …
-1:-- Qué hacer después de instalar Emacs (2ª Parte) (Post admin)--L0--C0--July 19, 2016 03:20 PM

Maxxcan's Site: Qué hacer después de instalar Emacs (1ª Parte)

1 Introducción Si acabamos de instalar Emacs por primera vez y hemos visto los artículos anteriores …
-1:-- Qué hacer después de instalar Emacs (1ª Parte) (Post admin)--L0--C0--July 13, 2016 09:29 PM

Maxxcan's Site: Introducción a Emacs (2ª Parte)

Introducción a Emacs (2ª parte) //
-1:-- Introducción a Emacs (2ª Parte) (Post admin)--L0--C0--June 12, 2016 08:23 PM

Maxxcan's Site: Introducción a Emacs. 1ª Parte

1 Introducción Emacs es mucho más que un editor pero como por algún lado hay que …
-1:-- Introducción a Emacs. 1ª Parte (Post admin)--L0--C0--June 02, 2016 10:46 PM