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: &quot;italian&quot;
% 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

Bad Daemons: Nikola.el v0.1 - Nikola desde emacs

Este es un anuncio del que es mi primer paquete para emacs, nikola.el. Ya escribí hace tiempo un articulo sobre org2nikola, paquete que sigo usando. Pero este paquete solo permite exportar de org-mode a html, no permite construir la web o desplegarla, tienes que hacerlo desde la terminal.

Ya desde el principio tenia unas cutre-funciones que me permitian hacer lo más básico desde emacs, pero decidí ponerlo bonito y desarrollarlo un poco más, y así ha salido este paquete. De momento está solo en mi repositorio, en un tiempo lo meteré en elpa.

En este momento, permite crear un sitio web, crear articulos y páginas, construir el sitio web, desplegarlo, iniciar/detener el servidor web y ejecutar ganchos (hooks). Y poco más que añadir. Para verlo en mayor profundidad, hay que visitar el Git.

-1:-- Nikola.el v0.1 - Nikola desde emacs (Post drymer)--L0--C0--February 20, 2017 07:30 AM

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.

Por eso, dentro de la configuracion de emacs tengo esta linea

(setq-default indent-tabs-mode nil)

su funcion es substituir los tabs por espacios, y en el modo go tenia esta modificacion

(add-hook 'go-mode-hook
          (lambda ()
            (setq tab-width 2)))

para que los tabs se representen como dos espacios en blanco.

Perfecto! subo un repositorio de codigo en go a github y por curiosidad veo el codigo ya en el repo… la indentacion es un jodido desastre! los tabs son tabs… pero, pero, si en el jodido modo go, todo se ve perfecto, que esta pasando es cosa de github o un problema interno?

paso a abrir el codigo en emacs y cambio a fundamental-mode para visualizar la realidad, resultado, el problema esta en go-mode, en efecto los tabs se visualizan como 2 espacios, pero en el fichero no se substituyen por espacios, siguen siendo tabs, donde esta el culpable?

paso a ver el codigo de go-mode, en busca de expresiones regulares y cosas como \t… no encuento el problema (y tampoco entiendo mucho de lisp)… entonces cambio la busqueda a cosas que contengan la palabra indent y aparece esta linea

  ;; Go style
  (setq indent-tabs-mode t)

(commit 5737e59cbac9bc480546766c9502c527fa2be26f, linea 985)

Su funcion es dejar los tabs como tabs y no como espacios, la solucion? cambiar t por nil directamente en el codigo de go-mode.el o en un hook en la configuracion.

(add-hook 'go-mode-hook
          (lambda ()
            (setq indent-tabs-mode nil)
            (setq tab-width 2)))

ahora, si abres tu codigo los cambios se realizan solo a las lineas que modifiques, no a las lineas ya existentes. Es necesario reeindentar todo y no funciona C-x h tab, hay que quitar la indentacion e indentar de nuevo, hice una macro que recorria todas las lineas eliminando los espacios al inicio, luego si seleccione todo + tab (C-x h tab).

Tabs y espacios en armonia!

-1:-- no mas tabs en go-mode (Post )--L0--C0--February 13, 2017 03:52 AM

Bad Daemons: Forzar el uso de atajos de teclado para moverse en el buffer

Hay unas cuantas combinaciones de teclas que funcionan en casi todos los editores de texto para moverse por el fichero (una excepción es vi, como no). Estos atajos están pensados para no tener que separar las manos de la parte del teclado en la que deberia estar, que es el centro. Pero se tiene cierta tendencia a ir a lo fácil y usar las flechas y otras teclas específicas.

Es habitual querer coger la costumbre de usar los atajos del centr del teclado para moverse y no usar las teclas específicas, por ello hardcore-mode resulta tan útil. Este modo te obliga a usar las combinaciones alternativas al desactivar las que estás habituado a usar. Dicho de otro modo, lo que hace es desactivar las teclas RET, BACKSPACE, flechas y cada vez que se presionen nos dirá la alternativa a usar en el minibuffer. "Solo" desactiva el uso de esas teclasas, pero como no me parece suficiente "hardcore", he añadido la desactivación de más teclas. Quedaria como se ve en la siguiente tabla:

Activo Inactivo
C-f Flecha derecha
C-b Flecha izquierda
C-p Flecha arriba
C-n Flecha abajo
C-ñ Backspace (la tecla de borrar)
C-m / C-j RET (la tecla de enter )
M-f C-flecha derecha
M-b C-flecha izquierda
M-p C-flecha arriba
M-n C-flecha abajo
C-h DEL (tecla de borrar)
F1 El prefijo de ayuda
C-v Av. Pág
M-v Re. Pág
C-a Inicio
C-e Fin
M-< Inicio del buffer (C-Inicio)
M-> Final del buffer (C-Fin)

Y la configuración sería así:

(use-package hardcore-mode
  :ensure t
  :config
  (global-set-key "\M-p" 'backward-paragraph)
  (global-set-key "\M-n" 'forward-paragraph)
  (define-key key-translation-map [?\C-h] [?\C-?])
  (global-set-key (kbd "<f1>") 'help-command)
  (define-key hardcore-mode-map
    (kbd "<C-up>") (lambda ()
                       (interactive)
                       (message "This key is disabled. Use M-p instead.")))
  (define-key hardcore-mode-map
    (kbd "<C-down>") (lambda ()
                       (interactive)
                       (message "This key is disabled. Use M-n instead.")))
  (define-key hardcore-mode-map
    (kbd "<C-left>") (lambda ()
                       (interactive)
                       (message "This key is disabled. Use M-b instead.")))
  (define-key hardcore-mode-map
    (kbd "<C-right>") (lambda ()
                       (interactive)
                       (message "This key is disabled. Use M-f instead.")))
  (define-key hardcore-mode-map
    (kbd "<prior>") (lambda ()
                        (interactive)
                        (message "This key is disabled. Use M-v instead.")))
  (define-key hardcore-mode-map
    (kbd "<next>") (lambda ()
                        (interactive)
                        (message "This key is disabled. Use C-v instead.")))
  (define-key hardcore-mode-map
    (kbd "<home>") (lambda ()
                        (interactive)
                        (message "This key is disabled. Use C-a instead.")))
  (define-key hardcore-mode-map
    (kbd "<C-home>") (lambda ()
                        (interactive)
                        (message "This key is disabled. Use M-< instead.")))
  (define-key hardcore-mode-map
    (kbd "<end>") (lambda ()
                        (interactive)
                        (message "This key is disabled. Use C-e instead.")))
  (define-key hardcore-mode-map
    (kbd "<C-end>") (lambda ()
                        (interactive)
                        (message "This key is disabled. Use M-> instead.")))
  (global-hardcore-mode))

Si solo se quiere ir a lo básico, hay que quitar todos los define-key de la sección :config. Lo único "malo" que tengo que decir de este modo es que la tecla de borrado pasa a ser C-h, que en la terminal es el estándar, pero en emacs ese prefijo es el de ayuda. Se remapea a F1, pero bueno, puede resultarle molesto a alguien.

-1:-- Forzar el uso de atajos de teclado para moverse en el buffer (Post drymer)--L0--C0--February 07, 2017 07:30 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

Bad Daemons: Hydras en gnu-social-mode

Que son las hydras? Son un animal mitólogico de muchas cabezas. Además, es un paquete de emacs que facilita la repetición de teclas. Para que quede más claro, y siguiendo el ejemplo de la página oficial, imaginad que queréis apretar C-n cinco veces para bajar cinco lineas más abajo. Lo normal seria simplemente presionar C-n cinco veces, pero con hydra podriamos presionar C-n nnnn. Es un ejemplo tonto, pero ved el gif siguiente:

hydra.gif

Este es un ejemplo simplificado del que se puede ver en su wiki, en la sección Movement. Pero no solo permite facilitar el movimiento, en cierto modo ofrece una interfaz gráfica, como veremos en breves. Este paquete tiene muchísimo potencial y yo apenas lo uso, solo de vez en cuando con ivy y con gnu-social-mode. Por ello, recomiendo echar un ojo a su wiki. Para ver ejemplos más prácticos.

A lo que vamos, la siguiente hydra es una adaptación simplificada de la de twittering-mode que sale en la wiki del paquete. Al fin y al cabo, gnu-social-mode es una versión actualizada de identica-mode, que a su vez es una adaptación de twittering-mode. Recordemos que ya vimos gnu-social-mode.

No voy a explicar demasiado el funcionamiento por que es bastante evidente, cada letra tiene asignada su propia función. Solo dejar claro que para activar esta hydra debe presionarse C-o en gnu-social-mode. Algunas puede que no funcionen, es cosa de gnu-social-mode, pero en general, todo va bien.

gnu-social-hydra.png

-1:-- Hydras en gnu-social-mode (Post drymer)--L0--C0--January 31, 2017 09:56 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).

que bueno… no? la devilidad de org esta en su diversidad, al no tener un proposito especifico, algunos aspectos no han sido resueltos, especialmente lo que respecta a ser un sistema de documentacion. Con todo, si no exiges demasiado vasta y sobra.

Imaginemos que no conoces org, odias html y tienes necesidad de generar contenido en formato html, listo?, de eso va esta entrada

Configuracion

Para comenzar a utilizar org solo hace falta abrir emacs y crear un fichero con terminacion .org o en su defecto agregar lo siguiente en la primer linea de cualquier fichero y recargar (C-x C-v)

-*- mode: org; -*-

org utiliza unas marcas especiales (opcionales) al inicio del documento, para establecer el titulo, autor, correo, encender y apagar algunas caracteristicas.

#+TITLE: Cosas de Emacs: org-mode
#+LANGUAGE: es
#+AUTHOR: nasciiboy
#+EMAIL: miCorreoCamello@aya.org
#+DATE: 2015-22-06
#+DESCRIPTION: experimento org-mode
#+KEYWORDS: emacs org-mode tutorial

supongo que se explican por si mismas…

Encabezados

Cualquier cosa que escribamos inmediatamente despues de la configuaracion, sera lo primero que aparezca dentro del documento, aunque, al igual que en html, tambien podemos agrupar el contenido dentro de secciones/encabezados segun convenga.

La sintaxis de un encabezado es muy simple:

* Encabezado principal
** Segundo nivel
*** 3er. nivel
    algo de texto
*** 3er. nivel
    mas texto

* Otro encabezado principal

Toda linea que inicia con uno o varios * seguido por al menos un espacio en blanco, es un encabezado.

El texto (en la misma linea) donde esta el o los * sera el titulo del encabezado.

El nivel del encabezado depende del numero de * al inicio de la linea, es decir

  • * == h1
  • ** == h2
  • *** == h3
  • **** == h4
  • ***** == h5

(en realidad, al exportar a html, los encabezados se desplazan en uno, el titulo del documento es el que se corresponde con h1, pero lo dejo asi para evitar esfuerzo mental)

A que encabezado pertenece el texto? al primero que aparezca por encima de el. Si no tiene un encabezado encima pertenece al titulo del documento

NOTA: en org no existe un limite en cuanto a el nivel que puede tener un encabezado. No es asi en html, segun recuerdo el encabezado de menor nivel que existe en html es h7

Un ejemplo mas extenso:

* Encabezado H1

  Primer parrafo del encabezado H1

  Segundo parrafo del encabezado H1

** Encabezado H2

   Algo,
   y algo mas (sin una linea en blanco no hay cambio de parrafo)

** Otro Encabezado H2

   Hey

*** Encabezado H3

    coloca algo aqui

**** Encabezado H4

     y aqui

***** Encabezado H5

      tambien aqui

* Otro Encabezado H1

como vez, he indentado el texto que pertenece a cada encabezado (no es necesario, pero a mi me gusta que se vea asi).

Por cierto como no podia ser de otra forma podemos crear encabezados haciendo uso de atajos de teclado.

Con M-Intro si no hay ningun encabezado, aparece uno de primer nivel, de otra forma, el nivel es igual al del encabezado anterior.

otros atajos interesantes

  • TAB sobre un encabezado, oculta o muestra el contenido

  • Shift-TAB En cualquier posicion, oculta o muestra el contenido de todos los encabezados

  • C-c C-n ir al siguiente encabezado

  • C-c C-p ir al encabezado anterior

  • C-c C-f ir al siguiente encabezado del mismo nivel

  • C-c C-b ir al encabezado anterior del mismo nivel

  • C-c C-u ir al encabezado padre

  • M-FlechaDerecha agregar un * al encabezado

  • M-FlechaIzquierda quitar un * al encabezado

  • M-FlechaArriba Si el encabezado superior es del mismo nivel, intercambia el lugar de los encabezados, es decir mueve el actual hacia arriba

  • M-FlechaAbajo Si el encabezado siguiente es del mismo nivel, intercambia el lugar de los encabezados, es decir mueve el actual hacia abajo

Listas

Como en html, disponemos de dos tipos de listas, ordenadas (numeradas) y no ordenadas, para las primeras colocamos un numero (el que sea) seguido de un punto y comenzamos a escribir

1. primer elemento de la lista
2. segundo elemento de la lista
3. tercer elemento de la lista
   con una linea adicional

   este parrafo tambien es parte del tercer elemento


este parrafo esta fuera de la lista

en este caso, el contenido que sea parte de un elemento de la lista, debe respetar cierta indentacion.

El numero que coloques al inicio de la lista, es irrelevante, org lo ignora por completo y lo substituye por un ol -> li al exportar.

Como en los encabezados, podemos generar-saltar al siguiente elemento con la combinacion M-Intro. Este atajo tiene un efecto secundario, org pasa de nuestro numero y reenumera la lista apartir de 1.

Para salir de la lista, dejamos una linea en blanco. Org tambien considera, de forma automatica que estamos fuera de un listado si dejamos dos espacios en blanco.

Si estamos dentro de un parrafo y alguna de sus lineas tiene apariencia de listado al exportar, org toma la linea y la considera una lista. No tengas lineas que inicien con algo similar a una lista.

El resto, asi son las listas ordenadas

1. elemento uno
2. elemento dos
3. elemento tres


1) elemento uno
2) elemento dos
3) elemento tres

listas no ordenadas

+ elemento uno
+ elemento dos
+ elemento tres


- elemento uno
- elemento dos
- elemento tres

Algunos comandos en listados

  • Shift-FlechaDerecha rotacion por el estilo del listado

  • M-FlechaIzquierda rotacion por el estilo del listado

  • M-FlechaDerecha convierte al elemento en un miembro del elemento superior

  • M-FlechaIzquierda convierte al elemento en un elemento de nivel superior

  • M-FlechaArriba si el elemento superior es del mismo nivel, intercambia el lugar de los elementos, es decir mueve el actual hacia arriba

  • M-FlechaAbajo si el elemento siguiente es del mismo nivel, intercambia el lugar de los elementos, es decir mueve el actual hacia abajo

Definiciones

Este elemento tiene las mismas reglas que una lista no ordenada, es decir, el contenido que forme parte de la definicion ha de tener indentacion.

+ Palabra :: definicion

- Palabra :: definicion

los dos puntos (::) que separan la palabra de la definicion tiene que estar en la misma linea que el signo - o +. La definicion puede extenderse en varias lineas, parrafos e incluir bloques varios.

Al igual que una lista, las definiciones terminan dejando dos linas en blanco.

Resaltado

  • *bold* ==> bold
  • ~code~ ==> code
  • +strike+ ==> strike
  • /italic/ ==> italic
  • =verbatim= ==> code
  • _underline_ ==> underline

tambien se pueden crear superindices

elemento^superinidice

el elemento y el superindice no deben tener espacios en blanco, por ejemplo

  • 2^30 ==> 230

en caso de los subindices

elemento_subinidice

el elemento y el subindice no deben tener espacios en blanco, por ejemplo

  • 2_30 ==> 230

finalmente podemos meter formulas LaTex dentro del texto (inline) con la sintaxis $formula$, por ejemplo

  • $ne^{123^{a}}$ ==> ne123a

Enlaces

[[prefijo:ruta][descripcion]]

la descripcion puede omitirse, quedando

[[prefijo:ruta]]

enlaces soportados

http://www.astro.uva.nl/~dominik          en la red
doi:10.1000/182                           DOI para un recurso electronico
file:/home/dominik/images/jupiter.jpg     fichero, ruta absoluta
/home/dominik/images/jupiter.jpg          igual que arriba
file:papers/last.pdf                      fichero, ruta relativa
./papers/last.pdf                         igual que arriba
file:/myself@some.where:papers/last.pdf   fichero, ruta a una maquina remota
/myself@some.where:papers/last.pdf        igual que arriba
file:sometextfile::NNN                    fichero, saltar al numero de linea
file:projects.org                         otro fichero Org
file:projects.org::some words             buscar texto en fichero Org[fn:35]
file:projects.org::*task title            buscar encabezado en fichero Org[fn:36]
file+sys:/path/to/file                    abrir via OS, como doble-click
file+emacs:/path/to/file                  fuerza apertura con Emacs
docview:papers/last.pdf::NNN              abrir en modo doc-view en la pagina
id:B7423F4D-2E8A-471B-8810-C40F074717E9   Enlazar con ecabezado por ID
news:comp.emacs                           enlace Usenet
mailto:adent@galaxy.net                   enlace Mail
mhe:folder                                enlace a carpeta MH-E
mhe:folder#id                             enlace a mensage MH-E
rmail:folder                              enlace a carpeta RMAIL
rmail:folder#id                           enlace a mensaje RMAIL
gnus:group                                enlace a grupo Gnus
gnus:group#id                             enlace a articulo Gnus
bbdb:R.*Stallman                          enlace BBDB (con regexp)
irc:/irc.com/#emacs/bob                   enlace IRC
info:org#External links                   enlace a nodo o indice Info
shell:ls *.org                            Un comando shell
elisp:org-agenda                          Comando Interactivo Elisp
elisp:(find-file-other-frame "Elisp.org") formate de evaluacion Elisp

Ademas podemos poner enlaces a secciones (encabezados) dentro de nuestro documento con la estructura

[[*Encabezado][descripcion]]

recuerda, la descripcion es opcional

Si te encuentras en el modo org, y deseas segir un enlace presiona C-c C-o. Para regresar a la posicion original C-c &.

Tambien puedes colocar una marca temporal C-c % y luego regeresar con C-c &. Esto es similar al comando C-u C-ESP que permite recorrer el circulo de marcas.

Para modificar la direccion de un enlace o su descripcion presiona C-c C-l

Por cierto, para colocar imagenes dentro del contenido que exportes simplemente coloca la direccion de la imagen, asi:

[[mi-imagen.png]]

Radio Targets

Los Radio Objetivos, son un metodo automagico de convertir una frace en un enlace a algun punto del documento, lo unico que tenemos que hacer es encerrar el objetivo entre tres pares de < > asi:

<<<Mi objetivo>>>

ahora todo el texto que coincida con Mi objetivo apunta al radio objetivo, no importa si esta separado por espacios (exepto nuevas lineas) o si esta en minusculas o mayusculas.

Codigo

Org tiene distintos tipos de bloques, todos con esta sintaxis

#+BEGIN_Tipo-Bloque algun-parametro
  contenido
#+END_TIpo-Bloque

donde Tipo-Bloque puede ser

  • EXAMPLE ejemplos (como <pre>)
  • HTML seccion de codigo a exportar tal cual
  • LaTex seccion de codigo a exportar tal cual
  • SRC bloque de codigo
  • QUOTE bloque de cita

hay un truco, que evita escribir a mano todo el bloque. En una linea vacia o con espacios en blanco escribimos < segudio por

  • e ==> EXAMPLE
  • h ==> HTML
  • l ==> LaTex
  • s ==> SRC
  • q ==> QUOTE

y mas un tab el bloque aparece!

Es necesario ahondar un poco en los bloques de codigo fuente

#+BEGIN_SRC c
  /* strlen: regresa la longitud de s */
  int strlen(char s[])
  {
    int i;

    i = 0;
    while (s[i] != '\0')
      ++i;
    return i;
  }
#+END_SRC

el lenguaje se especifica luego de #+BEGIN_SRC, en este caso, lenguaje c, tambien podemos hacer que el codigo aparesca numerado, si agregamos el parametro -n. Si se desea que la numeracion inicie a partir de un numero concreto colocamos -n numero.

Antes mencione que org nacio de, por y para emacs, pues resulta que esto se demuestra en los bloques de codigo. Sea cual sea el lenguaje que coloques delante de un bloque de codigo (digo, si esta soportado) al presionar C-c ' se abre un buffer con un modo para editar dicho lenguaje con resaltado, con teclas de emacs y funciones de emacs. Otro C-c 'te regresa al documento.

Puedes imaginar el colosal esfuerzo que requiere emular esta funcion en otro sitio que no sea emacs?

asi se ve org-mode en mi emacs

NOTA: a veces en versiones experimentales de emacs, la convinacion C-c ' abre un buffer de edicion para el bloque de codigo, pero al repetir el comando, este no se reconoce, si ocurre esa situacion, intenta con los comandos por su nombre directamente. Para entrar es org-edit-src-code y para salir org-edit-src-exit

Exportacion

En principio, exportar apartir de org es sencillo, presionamos C-c C-e.

Esto abre una interfaz de exportacion con opciones varias, por ejemplo para exportar a html (un fichero con el mismo nombre del documento pero con terminacion .html) el comando completo seria C-c C-e h h, o si estas ya en la interfaz Org Export Dispatcher, solo h h.

Pero antes de exportar vamos a modificar algunas cosas. En la configuracion del documento agrega estas lineas:

#+OPTIONS: toc:nil num:nil h:7 html-preamble:nil html-postamble:nil html-scripts:nil html-style:nil
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="worg-data/worg.css" />

#+HTML_HEAD: coloca alguna cosa dentro de la etiqueta head del html, para ser precisos, se indica la direccion de una hoja de estilo. Aqui encontraras la que utilizo.

cuando se exporta por defecto, se crea una tabla de contenidos, si no la quieres deja el toc:nil, tambien se numeran las secciones, como 1, 1.1, 2, 2.1.2 y asi, num:nil indica que no queremos numeracion.

h:7 indica cuantos niveles de encabezados deseamos exportar como Hs. Si hay encabezados que superen el nivel, seran incluidos, pero en forma de lista.

html-postamble:nil elimina una seccion al final del html que contiene el autor, fecha y correo(?), html-preamble-nil no se que haga pero tampoco lo quiero…

veras que org es generoso, nos regala una hoja de estilo y scripts html-scripts:nil y html-style:nil se las regresan… de buena forma… pero org insiste, pasa de nosotros y las coloca de todas formas (por lo general, como comentario)

por cierto, para mostrar las formulas LaTex en html, org coloca por su cuenta esta linea

<script type="text/javascript" src="http://orgmode.org/mathjax/MathJax.js"></script>

Colorear Codigo (al exportar)

Esto requiere algo de codigo (ha, ha, ha…), primero ve a tu carpeta de configuracion. En mi caso es

cd ~/.emacs.d/plugins/

luego

git clone https://github.com/emacsmirror/htmlize.git

y agrega esto en tu archivo de configuracion

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; PACKAGE: org-mode             ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; source: https://github.com/emacsmirror/htmlize.git
(load-file "~/.emacs.d/plugins/htmlize/htmlize.el")

;; esto activa el coloreado
(setq org-src-fontify-natively t)

;; por defecto se coloca el color en linea, descomenta
;; si quieres este comportamiento
;; (setq org-html-htmlize-output-type 'inline-css)

;; en mi caso prefiero tomar el estilo de una hoja css
;; comenta si eliges lo anterior
(setq org-html-htmlize-output-type 'css)

;; las siguientes lineas son para colocar o no un prefijo a
;; las etiquetas de codigo (todas son de tipo <span>)
;; (setq org-html-htmlize-font-prefix "") ;; default
(setq org-html-htmlize-font-prefix "src-")

podria interesarte saber que puedes convertir cualquier buffer de emacs, en una pagina html. El comando es htmlfontify-buffer.

Al parecer, htmlize es una vesion vieja del modo htmlfontify (incluido por defecto), a saber por que org requiere de htmlize

Cosideraciones adicionales

org, y otros lenguajes de marcas ligeros tiene carencias severas de base, no solo por utilizar signos comunes para el resaltado, lo que proboca que en ocaciones se interprete de manera inesperada el resaltado o simplemente no se interpreta. Tambien estamos limitados a 4-5 opciones de resaltado.

Segun el manual, podemos evitar comportamientos extraños escapando caracteres con \ peeeero esto no funciona del todo bien. Como alternativa se ofrece escribir simbolos al estilo LaTex \nombre-simbolo peeero esto tampoco funciona del todo bien.

en mi caso paso del resaltado y lo desactivo con la opcion *:nil, para eliminar la interpretacion de (super|sub)indices ^:nil

para poner etiquetas html directamente

@@html:lo-que-sea@@texto@@html:lo-que-sea@@

por ejemplo

@@html:<b>@@texto@@html:</b>@@

je, je, je… que comodo!

Si estas creando un documento en partes para incluir las secciones, coloca esta linea en la posicion donde debe aparecer el contenido de otra seccion

#+INCLUDE: "~/my-book/chapter2.org" :minlevel 1

Para terminar Org tiene muchos atajos, la mayoria con prefijo C-c que supuestamente es el espacio donde el usuario (y los modos) define(n) sus propios comandos. Como resultado tus comandos seran ignorados. La solucion? pues yo pase mis comandos a s-c (Super-c).`

Recursos, Enlaces y Fuentes

Org es amplio, tanto que tiene un manual-libro incluido dentro de emacs en el modo info, date una vuelta que no muerde

-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)

bien, un rss, no es mas que un fichero de texto plano formateado en xml, es decir, etiquetas que <abren> y etiquetas que </cierran>. Este fichero almecena un resumen del contenido de un sitio o cosa, por ejemplo titulo de entradas, fechas de publicacion, resumen de la entrada, autor, enlace y demas… luego si tenemos un programa que sea capas de analizar dichos ficheros, podemos enterarnos de los cambios realizados en el sitio de nuestro interes.. y ya esta, no hay magia, javascript ni tecnologias web awesome y eso es bueno!

te estaras preguntando, ¿como puedo yo, resivir los beneficios de estos ficheros de texto plano? Emacs!. que? gnus de nuevo, no, gracias que es muy raro, intente con eso y fracase… espera, no abandones, hay otro modo desarrollado para gente sencilla como tu y como yo, su nombre es elfeed

Instalar elfeed

Para instalar elfeed puedes utilizar el gestor de paquetes de emacs (repositorio melpa), o seguir el siguiente metodo apto solo para romanticos de manos inquietas.

desde la terminal vamos a la ruta donde tengamos nuestros complementos para emacs, en mi caso es

cd ~/.emacs.d/plugins/

luego descargamos el codigo

git clone https://github.com/skeeto/elfeed.git

ahora abrimos emacs, vamos a nuestro fichero de configuracion y agregamos esto

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; PACKAGE: elfeed               ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; source: https://github.com/skeeto/elfeed.git
(add-to-list 'load-path "~/.emacs.d/plugins/elfeed/")
(require 'elfeed)

;; aqui van los feeds que nos interesen
(setq elfeed-feeds
      '(
        "http://blog.chuidiang.com/feed/"
        "http://blog.desdelinux.net/feed/"
        "http://blogubuntu.com/feed"
        "http://cucarachasracing.blogspot.com/feeds/posts/default?alt=rss"
        "http://elarmarioinformatico.blogspot.com/feeds/posts/default"
        "http://es.xkcd.com/rss/"
        "http://feeds.feedburner.com/diegocg?format=xml"
        "http://feeds.feedburner.com/Esbuntucom?format=xml"
        "http://feeds.feedburner.com/GabuntuBlog"
        "http://feeds.feedburner.com/ramonramon"
        "http://feeds.feedburner.com/teknoplof/muQI?format=xml"
        "http://feeds.feedburner.com/Ubunlog?format=xml"
        "http://feeds.feedburner.com/UnBrutoConDebian?format=xml"
        "http://fernand0.github.io/feed.xml"
        "http://humanos.uci.cu/feed/"
        "http://lamiradadelreplicante.com/feed/"
        "http://linuxmanr4.com/feed/"
        "http://misnotaslinux.blogspot.com/feeds/posts/default"
        "http://nasciiboy.github.io/index.xml"
        "http://planet.emacsen.org/atom.xml"
        "http://quijotelibre.com/feed/"
        "http://radioela.org/spip.php?page=backend"
        "http://ranchoelectronico.org/feed/"
        "http://red-orbita.com/?feed=rss2"
        "http://rufianenlared.com/feed/"
        "http://softwarelibre.deusto.es/feed/"
        "http://totaki.com/poesiabinaria/feed/"
        "http://www.blackhats.es/wordpress/?feed=rss2"
        "http://www.kdeblog.com/feed/"
        "http://www.lapipaplena.net/feed/"
        "http://www.linuxadictos.com/feed"
        "http://www.linuxhispano.net/feed/"
        "http://www.maxxcan.com/feed/"
        "http://www.muylinux.com/feed/"
        "http://www.portallinux.es/feed"
        "http://www.tomatesasesinos.com/feed/"
        "http://www.tomatuordenador.net/feed/"
        "http://www.ubuntizando.com/feed/"
        "https://asm86.wordpress.com/feed/"
        "https://autodefensainformatica.radioalmaina.org/feed/"
        "https://birrasybits.wordpress.com/feed/"
        "https://blog.adrianistan.eu/feed/"
        "https://cartaslinux.wordpress.com/feed/"
        "https://colaboratorio.net/feed/"
        "https://comunicatelibremente.wordpress.com/feed/"
        "https://daemons.cf/rss.xml"
        "https://diariodeunalinuxera.com/feed/"
        "https://elbinario.net/feed/"
        "https://eliasbrasa.wordpress.com/feed/"
        "https://elpinguinotolkiano.wordpress.com/feed/"
        "https://elzorrolibre.noblogs.org/feed/"
        "https://enekoamieva.com/blog/feed/"
        "https://gutl.jovenclub.cu/feed/"
        "https://h4ckseed.wordpress.com/feed/"
        "https://jummp.wordpress.com/feed/"
        "https://jvare.com/feed/"
        "https://kernelpanicblog.wordpress.com/feed/"
        "https://lasindias.blog/feed"
        "https://leninmhs.wordpress.com/feed/"
        "https://lignux.com/feed/"
        "https://linuxgnublog.org/es/feed"
        "https://mierda.tv/feed/"
        "https://miguelpinia.wordpress.com/feed/"
        "https://ondahostil.wordpress.com/feed/"
        "https://otroespacioblog.wordpress.com/feed/"
        "https://pfctelepathy.wordpress.com/feed/"
        "https://picodotdev.github.io/blog-bitix/index.xml"
        "https://radioslibres.net/rss/"
        "https://victorhckinthefreeworld.com/feed/"
        "https://vidaembebida.wordpress.com/feed/"
        "https://www.atareao.es/blog/feed/"
        "https://www.linuxito.com/?format=feed&type=rss"
        "https://www.ochobitshacenunbyte.com/feed/"
        "https://xkcd.com/rss.xml"
        ))

evaluamos el codigo, y ya tenemos nuestro leector rss. Para modificar o añadir nuevos feeds modifica las cadenas de la variable elfeed-feeds

para hacer mas comodo el asunto, agreguemos un par de accesos directos a nuestro leector

(global-set-key [f7] 'elfeed)
(global-set-key [f8] 'elfeed-update)

al presionar F7 se abre el lector, con F8 actualizamos los feeds

para ver la entrada, colocamos el cursor sobre esta y damos un enter

si presionamos b o nos posicionamos en el enlace + un enter, la entrada se abrira en el navegador del sistema! Tambien podemos copiar la ruta de enlace pulsando y

para regresar a las entradas presionamos q y para marcar una entrada como leeida r

elfeed + eww

ver la entrada en el navegador esta muy bien, pero no me gustan el javascript, los anuncios ni las cosas modernas, que puedo hacer? Emacs incorpora un navegador de texto plano eww, podemos abrir los enlaces desde el visor de entradas de elfeed:

  • primero colocamos el cursor en el enlace y presionamos M-x eww,

  • veras que aparece el enlace como el parametro por defecto, damos enter o colocamos una direccion distinta + un enter

para salir de eww y regresar a elfeed pulsamos q

hagamos mas sencilla la operacion agregando algunos atajos para eww en nuestra configuracion

(global-set-key [f5] 'eww)
(global-set-key (kbd "C-x w o") 'eww)
(global-set-key (kbd "C-x w b") 'eww-add-bookmark)
(global-set-key (kbd "C-x w l") 'eww-list-bookmarks)
(global-set-key (kbd "C-x w f") 'eww-open-file)

ahora para abrir los enlaces, colocamos el cursor en el enlace y pulsamos F5 o C-x w o

Listo, vive la web en texto plano, el tiempo extra lo puedes utilizar para ver porno, escribir un blog o lo que sea… ¯\_(ツ)_/¯

-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

Quijote Libre: Aprendiendo GNU Emacs y el modo org (III)

Esquema GTD de Joaquín LacalleEsquema GTD de Joaquín Lacalle

Vamos a comenzar a introducirnos en el modo org a ver si es posible conseguir llegar a gestionar una agenda útil tal y como nos demuestra el amigo @drymer en su estupendo sitio y poder montar un sistema GTD con él.

Para saber a donde vamos os dejo el mejor resumen gráfico que  tengo de GTD y lo mejor será empezar a escribir un documento en este modo.

Activación

Lo primero, las tres formas básicas de activar el modo org de Emacs.

1. Abrir un fichero de texto con extensión .org

2. Mediante el mandato:

M-x org-mode

3. Indicando en cualquier fichero de texto, aunque no tenga la extensión citada, que se trata de un texto en ese formato mediante una sentencia, del tipo “-*- mode: org; -*-“.

A modo de ejemplo la primera linea de mi fichero de notas sobre org-mode incluye:

#+TITLE: NOTAS SOBRE Emacs org-mode  -*- mode: org; -*-

Cómo veis esto ya nos da una primera posibilidad al organizar nuestros archivos, permitiendo agruparlos por extensiones ;), algo que por el momento no recomiendo a nadie, ya que multiplicar las extensiones de los archivos con criterios no estándar puede ser una fuente de líos.

Para mi aprendizaje estoy usando el fichero org del curso completo de “La Pipa Plena” que podéis descargar aquí, documento quizás no muy adecuado, ya que solo usa encabezados de nivel 1, pero su revisión me sirve a dos fines, consolidar mi uso de Emacs y ver algunas posibilidades del modo org orientadas a la publicación.

Para aprender sobre la agenda y el uso los aspectos de gestión personal,  uso esta estupenda lista de vídeos (en inglés) y lo complemento con el manual de org-mode y este sitio en el que se puede ver el fichero .org original de las páginas, junto al que considero el mejor artículo para estas cosas: “Organiza tu vida en texto plano” de Bernt Hansen.

Estructura del documento

Lo primero de todo será ver como escribir un documento en formato org.

Esquema

Como ya dije en algún post anterior  el modo org de Emacs  no es más que un “Modo Mayor” que se ha credo extendiendo otro modo mayor llamado “Outline“, algo así cómo modo esquema, un modo que permite identificar niveles de cabecera en un documento de forma jerárquica, es decir la forma más clásica de estructurar la información.

Para esto se utiliza un sistema similar a como se marcan las cabeceras en Markdown mediante la siguiente regla:

Para indicar el nivel de cabecera de un texto se inicia la línea uno o varios asteriscos dependiendo del nivel que queramos asignar.

Por ejemplo:

* Encabezado de nivel 1 :: La línea comienza con un asterisco
** Encabezado de Nivel 2
*** Encabezado de Nivel 3 :: y así sucesivamente
Estilos de fuentes

Dentro del texto podemos marcar diferentes tipos de escritura con estas reglas:

Negrita :: Se encierran las palabras entre asteriscos: *una frase en negrita*
Cursiva :: Se encierran las palabras entre barras inclinadas: /una frase en cursiva/
Subrayado :: Se encierran las palabras entre guiones bajos: _una frase subrayada_
Tachado :: Se encierran las palabras entre símbolos de suma: +una frase tachada+
Código Fuente :: Se encierran las palabras entre símbolos de igualdad: =una frase en código fuente=
Cita :: Se encierran las palabras entre tildes: ~una cita~
Teclas

Para manejarnos en el documento utilizamos unas pocas teclas, con una regla básica:

Todas las teclas funcionan cuando el cursor está sobre el título. No lo intentes en otro lugar porque ¡tendrás un resultado desastroso o te decepcionarás!

Las teclas son:

Tabulador :: ¡El texto no se borra! Oculta/muestra el contenido del título, según esta secuencia:

         -> Título -> Esquema -> Todo ->
        |                               |     
         <---------------<-------------<
 
S - Tabulador :: Lo mismo que el anterior pero sobre todos los títulos

M - flecha derecha :: Aumenta la prioridad del título (de título tres a título dos, y así sucesivamente)

M - flecha izquierda :: Disminuir la prioridad del título (de título uno a título dos, y así sucesivamente)

M - flecha arriba :: Subir el título y lo sitúa antes del título anterior. ¡El contenido también se mueve!

M - flecha abajo :: Baja el título y lo pone después del título siguiente. ¡El contenido también baja!

Es importante tener en cuenta que los títulos nunca pueden sobrepasar el nivel superior, es decir si muevo un título ** hacia arriba o abajo se coloca antes o después del que corresponda del mismo nível si ssobrepasar nunca el título * en que este.

Para hacer el movimiento anterior debemos “cortar” el título y pegarlo en su nueva ubicación.

Para cortar, copiar y pegar títulos utilizamos las combinaciones estándar de Emacs con el prefijo “C – c“.

Con todo esto ya tenemos las nociones básicas para organizar un fichero en modo org.

Continuará …

-1:-- Aprendiendo GNU Emacs y el modo org (III) (Post Quijote Libre)--L0--C0--January 16, 2017 04:57 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. Para salir del buffer calendario presiona q.

Si cometes algun error y necesitas iniciar emacs sin cargar el archivo de configuracion, puedes iniciar emacs desde el terminal con este comando:

emacs --no-init-file

sintaxis

La funcion para definir atajos es

(define-key map COMBINACION 'FUNCION)

donde map es un mapa de combinaciones, o por decirlo de alguna forma, un prefijo que precede a la combinacion en si

  • ctl-x-map con prefijo C-x
  • ctl-x-4-map con prefijo C-x 4
  • ctl-x-5-map con prefijo C-x 5
  • ctl-x-r-map con prefijo C-x r
  • esc-map con prefijo ESC
  • help-map con prefijo C-h
  • global-map (sin prefijo) para cualquier combinacion. Esta ultima tiene una funcion dedicada y en ella centraremos la explicacion
(global-set-key COMBINACION 'FUNCION)

La COMBINACION de teclas puede ser cualquiera de estas 3 formas

  • "letra". Una unica letra de a-z o 1-9 dentro de comillas

  • [nombre]. nombre, se substiye por el nombre interno o por el codigo que emacs asigna a cada tecla, la combinacion puede contener mas de una tecla pero siempre se efectua en un solo paso, por ejemplo [s-left] es presionar la tecla super + la tecla fecha izquierda, [s-kp-5] es presionar la tecla super + la tecla 5 del pad numerico.

  • (kbd "sequencia"). sequencia es cualquier combinacion del teclado colocada entre parentesis, esta puede separarse en varios pasos si se coloca un espacio en blanco entre los nombres de las teclas. Dentro de la cadena, para hacer referencia a la tecla control, colocamos C, para meta/esc M, y para super s, las tres siempre van en conjunto con alguna otra tecla siguiendo el formato C-tecla, M-tecla o s-tecla. Finalmente podemos hacer referencia al nombre interno de una tecla, al colocarlo entre mayor que y menor que, por ejemplo (kbd "<f8>") sera la tecla F8

este es el nombre interno de algunas teclas

  • backspace retroceso
  • return enter
  • delete suprimir
  • up flecha arriba
  • down flecha abajo
  • right flecha derecha
  • left flecha izquierda
  • f1..f35tecla de funcion de F1 a F35
  • home Inicio
  • end Fin
  • help Ayuda
  • kp-0.. kp-9 numeros del pad numerico
  • kp-subtract menos del pad numerico
  • kp-add mas del pad numerico
  • kp-enter enter del teclado numérico
  • kp-decimal punto decimal del teclado numérico
  • next AvPag
  • prior RePag

ejemplos

(global-set-key [s-left]  'windmove-left)
(global-set-key [s-right] 'windmove-right)
(global-set-key [s-up]    'windmove-up)
(global-set-key [s-down]  'windmove-down)

(global-set-key (kbd "C-c <left>")  'windmove-left)
(global-set-key (kbd "C-c <right>") 'windmove-right)
(global-set-key (kbd "C-c <up>")    'windmove-up)
(global-set-key (kbd "C-c <down>")  'windmove-down)

(global-set-key (kbd "C-c o") 'recentf-open-files)
(global-set-key (kbd "C-x C-b") 'ibuffer)

(global-set-key [return] 'backward-char)
(global-set-key (kbd "<return>") 'backward-char)
(global-set-key (kbd "<f7> <f8>") 'calendar)

Conocer el comando ligado a un atajo

Si invocamos a describe-key (C-h k) y, a continuacion, se presiona un atajo, emacs mostrara el comando al que esta ligado.

Por ejemplo, supongamos que deseamos conocer el comando ligado a C-M-g. Primero se llama a describe-key, luego se presiona la combinacion de teclado, entonces emacs imprimira C-M-g is undefined. Esto significa que puedes utilizar (kbd "C-M-g") para representar una combinacion de teclas en codigo lisp.

Combinaciones a evitar

Emacs tiene sus caprichos. Es mejor no definir las siguientes combinaciones, a menos que sepas lo que estas haciendo.

  • C-cualquierLetra. Dada la forma en que emacs esta implementado utiliza la sintaxis “C-letra” para un monton de atajos preestablecidos

  • F1 o C-h. Emacs utiliza esta combinacion para el sistema de ayuda de emacs y tiene un estado especial en el sistema de comandos de emacs.

  • ESC o C-[. Esta combinacion por si misma tiene un significado complicado, dependiendo de cauntas veces se presione

  • C-Shift-letra. Algunos terminales no pueben dintingur las versiones de la combinacion con Shift de la version sin Shift

Buenas opciones

Emacs tiene unos siete mill comandos. De forma predeterminada, 800 de ellos tiene un atajo. Si defines tus propios atajos sin cuidado es posible que muchos modos primarios o secundarios anulen tus combinaciones, ya que estas tiene prioridad.

En la documentacion oficial de emacs, Las combinaciones libres para el usuario son de F5 a F9 y C-c letra.

Las siguientes combinaciones son buenos puntos de partida para tus propias definiciones, y no causan ningun problema en la practica

  • F5, F6, F7, F8, F9, F12. Puden combinarse sin problemas con Ctrl. Asegurate que no los utilize el sistema operativo.

  • Super o Hyper. Cualquier combinacion con estas es buena, pero es posible que el terminal no reconosca las teclas Super o Hyper.

fuentes

buena parte del articulo es una pseudo-traduccion de

http://ergoemacs.org/emacs/keyboard_shortcuts.html

otra, es una invencion no contrastada con el manual

-1:-- Definir atajos en Emacs (Post )--L0--C0--January 07, 2017 03:38 PM

Quijote Libre: Disponible manual GNU Emacs 25.1

Logo GNU EmacsDesde mi experiencia el manual de GNU Emacs no es el mejor modo de aprenderlo, si existiese algo así yo diría que el camino sería:

  1. Practicar con el tutorial básico que incluye para aprender a moverse por él
  2. Realizar alguno de los cursos básicos que ya os presenté en la página de referencias mientras se va trabajando con él tratando de resolver las tareas concretas que nos encontremos.
  3. Empezar con Elisp

A pesar de ello su manual es siempre una referencia básica y ya ha actualizado algunas de sus versiones a la edición 25.1 de GNU Emacs cómo podéis ver aquí.

-1:-- Disponible manual GNU Emacs 25.1 (Post Quijote Libre)--L0--C0--January 01, 2017 08:28 PM

nba - GNU's Rock: first theme

Crear un Tema en Emacs

un poco de historia

Cuando comence a utilizar emacs (hace unos pocos años) para establecer un tema se utilizaba un paquete llamado color-theme parte del paquete emacs-goodies-el de Debian. Al parecer desde la version 24 de emacs se desaconseja su uso, pese a todo en mi instalacion se mantuvo en servicio hasta la version 26.0.50 sin generar inconvenientes.

para la posteridad y los viajeros en el tiempo, dejo aqui el paquete en forma de zip (con un tema personalizado de regalo color-theme-nascii)

asi es como se utilizaba

(add-to-list 'load-path "~/ruta-a/color-theme-6.6.0")
(require 'color-theme)
(color-theme-initialize)

;; para cargar un tema en especifico
;; (color-theme-nombreDelTema)
(color-theme-nascii)

establecer el tema por defecto

apartir de emacs version 24 podemos cambiar el tema sin instalar nada con el comando customize-themes

para cambiar el tema se mueve el cursor al tema y se presiona enter

para guardar el cambio colocamos el cursor en el “boton” Save Theme Setting + un enter, accion que colocara automagicamente unas lineas de codigo extra en nuestro init.el.

No te van las cosas automagicas? puedes establecer la carga de un tema directamente en el fichero de configuracion init.el con

(load-file "~/RUTA/A/miTema-theme.el")

Si queremos que el menu de seleccion cargue un tema automaticamente, tiene que estar en nuestro directorio de configuracion ~/.emacs.d/nombreTema-theme.el

crear un tema

Los temas se crean en base a la configuracion actual, pero tambien podemos crear un tema a partir de cero segun indiquemos al comando customize-create-theme.

en el recuadro Theme Name damos nombre al tema, en el recuandro Description dejamos la fecha de creacion o en su lugar colocamos una descripcion del tema, por ejemplo "nascii-theme un tema obscuro mas..."

establecemos las variables a gusto y guardamos el tema con C-x C-s o con un intro sobre el recuadro Save Theme. Regresamos a customize-themes y automagicamente nuestro tema estara disponible.

Nota: Si creamos el tema apartir de la configuracion actual y queremos compartirlo con los demas habitantes de la red, debemos evitar incluir algunas variables especificas de nuestro sistema en el codigo fuente del tema, por ejemplo, el tipo de tipografia.

ver los cambios “al vuelo”

Vamos al codigo fuente del tema C-x C-f ~/.emacs.d/miTema-theme.el, modificamos el parametro de interes (los colorines se encuentran entre comillas en formato nombre o en formato hexadecimal de 3 o 6 digitos), luego evaluamos el buffer con el comando eval-buffer.

Para hacer un poco menos lioso el asunto asignamos eval-buffer a una tecla

(global-set-key [f9] 'eval-buffer)

con esto tenemos asignado el comando a la tecla de funcion F9, asi podemos recargar los cambios estilo navegador web.

nascii-theme

;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.

;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;; GNU General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with this program.  If not, see <http://www.gnu.org/licenses/>.

;; ---------------------------
;;
;; nascii: Another dark theme
;;
;; ----------------------------

(unless (>= emacs-major-version 24)
  (error "requires Emacs 24 or later."))

(deftheme nascii
  "Another dark theme")

(custom-theme-set-faces
 'nascii
 '(default ((t (:weight normal :slant normal :underline nil :overline nil :strike-through nil :foreground "white" :background "black" :stipple nil :inherit nil))))
 '(cursor ((t (:background "yellow"))))
 '(escape-glyph ((((background dark)) (:foreground "cyan")) (((type pc)) (:foreground "magenta")) (t (:foreground "brown"))))
 '(minibuffer-prompt ((((background dark)) (:foreground "cyan")) (((type pc)) (:foreground "magenta")) (t (:foreground "medium blue"))))
 '(highlight ((t (:background "darkolivegreen"))))
 '(region ((t (:background "#222" :foreground "#87cefa"))))
 '(shadow ((((class color grayscale) (min-colors 88) (background light)) (:foreground "grey50")) (((class color grayscale) (min-colors 88) (background dark)) (:foreground "grey70")) (((class color) (min-colors 8) (background light)) (:foreground "green")) (((class color) (min-colors 8) (background dark)) (:foreground "yellow"))))
 '(secondary-selection ((t (:background "darkslateblue"))))
 '(trailing-whitespace ((t (:background "red"))))
 '(font-lock-builtin-face ((t (:foreground "LightSteelBlue"))))
 '(font-lock-comment-delimiter-face ((default (:inherit (font-lock-comment-face)))))
 '(font-lock-comment-face ((t (:foreground "OrangeRed"))))
 '(font-lock-constant-face ((t (:foreground "Aquamarine"))))
 '(font-lock-doc-face ((t (:foreground "LightSalmon"))))
 '(font-lock-function-name-face ((t (:foreground "LightSkyBlue"))))
 '(font-lock-keyword-face ((t (:foreground "Cyan"))))
 '(font-lock-negation-char-face ((t nil)))
 '(font-lock-preprocessor-face ((t (:inherit (font-lock-builtin-face)))))
 '(font-lock-regexp-grouping-backslash ((t (:inherit (bold)))))
 '(font-lock-regexp-grouping-construct ((t (:inherit (bold)))))
 '(font-lock-string-face ((t (:foreground "LightSalmon"))))
 '(font-lock-type-face ((t (:foreground "PaleGreen"))))
 '(font-lock-variable-name-face ((t (:foreground "LightGoldenrod"))))
 '(font-lock-warning-face ((t (:weight bold :foreground "Pink"))))
 '(button ((t (:inherit (link)))))
 '(link ((((class color) (min-colors 88) (background light)) (:underline (:color foreground-color :style line) :foreground "RoyalBlue3")) (((class color) (background light)) (:underline (:color foreground-color :style line) :foreground "blue")) (((class color) (min-colors 88) (background dark)) (:underline (:color foreground-color :style line) :foreground "cyan1")) (((class color) (background dark)) (:underline (:color foreground-color :style line) :foreground "cyan")) (t (:inherit (underline)))))
 '(link-visited ((default (:inherit (link))) (((class color) (background light)) (:foreground "magenta4")) (((class color) (background dark)) (:foreground "violet"))))
 '(fringe ((t (:background "grey10"))))
 '(header-line ((t (:box nil :foreground "grey20" :background "grey90"))))
 '(tooltip ((t (:foreground "black" :background "lightyellow"))))
 '(mode-line ((t (:box (:line-width -2 :color nil :style released-button) :background "black" :foreground "white"))))
 '(mode-line-buffer-id ((t (:weight bold))))
 '(mode-line-emphasis ((t (:weight bold))))
 '(mode-line-highlight ((((class color) (min-colors 88)) (:box (:line-width 2 :color "grey40" :style released-button))) (t (:inherit (highlight)))))
 '(mode-line-inactive ((default (:inherit (mode-line))) (((class color) (min-colors 88) (background light)) (:background "grey90" :foreground "grey20" :box (:line-width -1 :color "grey75" :style nil) :weight light)) (((class color) (min-colors 88) (background dark)) (:background "grey30" :foreground "grey80" :box (:line-width -1 :color "grey40" :style nil) :weight light))))
 '(isearch ((t (:foreground "brown4" :background "palevioletred2"))))
 '(isearch-fail ((((class color) (min-colors 88) (background light)) (:background "RosyBrown1")) (((class color) (min-colors 88) (background dark)) (:background "red4")) (((class color) (min-colors 16)) (:background "red")) (((class color) (min-colors 8)) (:background "red")) (((class color grayscale)) (:foreground "grey")) (t (:inverse-video t))))
 '(lazy-highlight ((((class color) (min-colors 88) (background light)) (:background "paleturquoise")) (((class color) (min-colors 88) (background dark)) (:background "paleturquoise4")) (((class color) (min-colors 16)) (:background "turquoise3")) (((class color) (min-colors 8)) (:background "turquoise3")) (t (:underline (:color foreground-color :style line)))))
 '(match ((((class color) (min-colors 88) (background light)) (:background "yellow1")) (((class color) (min-colors 88) (background dark)) (:background "RoyalBlue3")) (((class color) (min-colors 8) (background light)) (:foreground "black" :background "yellow")) (((class color) (min-colors 8) (background dark)) (:foreground "white" :background "blue")) (((type tty) (class mono)) (:inverse-video t)) (t (:background "gray"))))
 '(next-error ((t (:inherit (region)))))
 '(query-replace ((t (:inherit (isearch))))))

(provide-theme 'nascii)

para cargar el tema, copiar y guardar en "~/.emacs.d/nascii-theme.el", luego se puede cargar/probar ejecutando

(load-file "~/.emacs.d/nascii-theme.el")

o mediante customize-themes

referencias

https://www.gnu.org/software/emacs/manual/html_node/emacs/Creating-Custom-Themes.html#Creating-Custom-Themes

tambien puede acceder directamente al manual dentro de emacs. Copia esto

[[info:emacs#Creating%20Custom%20Themes]]

pegalo en algun buffer, cambia a modo-org, coloca el cursor sobre el texto y presiona C-c C-o

-1:-- first theme (Post )--L0--C0--December 28, 2016 11:17 PM

Bad Daemons: Ver documentación usando Ivy

No es raro necesitar consultar documentación mientras se está programando. Como siempre, es mejor buscarla y verla desde emacs. Hay un modo de hacerlo usando los archivos de Dash, que es un programa para buscar documentación offline.

El modo que veremos a continuación es counsel-dash, que de hecho está basado en helm-dash, un programa muy molón. La diferencia que hay entre counsel-dash y helm-dash es la obvia, la primera usa counsel y la segunda helm. El problema de counsel-dash es que aún no está muy refactorizado y sigue necesitando que se instale helm, pero no es muy terrible ya que no se usa y además hay intención de quitar la dependencia.

Antes que nada hay que instalar sqlite en la distribución que se use. En Debian el paquete se llama sqlite o sqlite3. Luego, se puede instalar mediante el-get o mediante elpa. Yo he usado el primer método. La configuración es la siguiente:

(add-to-list 'el-get-sources '(:name counsel-dash
                                     :description "counsel-dash"
                                     :type github
                                     :pkgname "nathankot/counsel-dash"))

(if (not (el-get-package-installed-p 'counsel-dash))
  (progn
    (package-install 'helm)
    (package-install 'dash-functional)
    (package-install 'helm-dash)
    (el-get 'sync 'counsel-dash)))

(use-package counsel-dash
  :load-path "el-get/counsel-dash"
  :init
  (setq counsel-dash-docsets-path "~/.emacs.d/docsets")
  (setq counsel-dash-common-docsets '("Bash" "Emacs Lisp" "HTML" "Markdown" "Nginx" "Python 3" "Docker" "Font_Awesome" "LaTeX" "MySQL" "Python 2" "SQLite"))
  (setq counsel-dash-browser-func 'eww))

La variable counsel-dash-docsets-path define la ruta en la que estaran los docsets (veremos luego como instalarlos), counsel-dash-common-docsets son los docsets que se quieren usar y la última linea establece que para ver la documentación se usará eww, el navegador de Emacs.

Ahora veremos como instalar los docsets. Para ver una lista, se puede ir a esta dirección o se puede simplemente ejecutar counsel-dash-install-docset. Como a mi me gusta que se auto-instalen las cosas que no tengo instaladas, he escrito el siguiente código de elisp para que instale los docsets que me interesan:

(setq local_docsets counsel-dash-common-docsets)
(while local_docsets
  (setq docs (car local_docsets))
  (if (string-match "Python" docs)
      (setq docs (replace-regexp-in-string " " "_" docs)))
  (if (string-match "Emacs Lisp" docs)
      (setq docs (replace-regexp-in-string " " "_" docs)))
  (if (not (file-exists-p (concat counsel-dash-docsets-path "/" (car local_docsets) ".docset")))
      (counsel-dash-install-docset docs))
  (setq local_docsets (cdr local_docsets)))

No tengo ni idea si el código es muy "correcto", pero dado que funciona y solo deberia usarse una vez cada mucho, valdrá. Lo que hace es un bucle pasando por todas las cadenas de texto de la lista counsel-dash-common-docsets, comprueba si existe el docset en la ruta especificiada en counsel-dash-docsets-path y si no está instalado, lo instala.

A continuación una captura del print de Python.

counsel-dash.png

-1:-- Ver documentación usando Ivy (Post drymer)--L0--C0--December 20, 2016 07:30 AM

Bad Daemons: Calfw: ver la agenda en modo calendario

Esto fue lo primero que busqué cuando empecé a usar la agenda hasta que me di cuenta de que no tenia. Me sorprendió bastante al principio, hasta que entendí que org-mode está pensado para gestionar listas y hacer búsquedas, no dar una visión general. Que ojo, eso va muy bien, pero hay veces que se prefiere el formato clásico del calendario. Y buscando, encontré calfw.

Este paquete muestra un calendario simple, sin misterio. Permite 4 tipos de fuentes:

  • howm
  • ical
  • org-mode
  • diary-mode

Solo veremos como usar el de org-mode, que es el que uso yo. La configuración necesaria es mínima:

calfw

Paquete para ver las tareas de org-mode en un formato de calendario más típico. Los arrays son sólo traducciones. Si el paquete no está instalado, lo instala mediante el-get.

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

  (use-package calfw
    :config
    (require 'calfw-org)
    (setq cfw:org-overwrite-default-keybinding t)
    (setq calendar-week-start-day 1)
    (setq calendar-month-name-array
          ["Gener" "Febrer" "Març" "Abril" "Maig" "Juny" "Juliol" "Agost" "Septembre" "Octubre" "Novembre" "Desembre"])
    (setq calendar-day-name-array
          ["Diumenge" "Dilluns" "Dimarts" "Dimecres" "Dijous" "Divendres" "Dissabte"])
    :bind ("C-c f" . cfw:open-org-calendar)
    )

Como se puede ver, lo he instalado mediante el-get. Se puede instalar mediante package.el, por eso. Respecto al resto de la configuración:

  • cfw:org-overwrite-default-keybinding: establece los atajos de teclado de la agenda de org-mode, bastante práctico si es la que se suele usar.
  • calendar-week-start-day: al establecerla en 1, la semana empieza el lunes.
  • calendar-month-name-array: la traducción de los meses al catalan.
  • calendar-day-name-array: la traducción de los días al catalan.

Y ya. Respecto a los atajos de teclado, al activar los de org-mode pasan a ser los siguiente:

Tecla Función
g Actualiza la agenda
j Salta a fecha indicada
k org-capture
x Cierra calfw
v d Vista diaria
v w Vista semanal
v m Vista mensual

Para abrir el buffer del calendario, hay que ejecutar cfw:org-calendar-buffer o, si se usa el bind que tengo establecido, C-c f. Se ve así:

calfw.png

Más información en el repositorio git del proyecto.

-1:-- Calfw: ver la agenda en modo calendario (Post drymer)--L0--C0--December 11, 2016 07:30 AM

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

Quijote Libre: Gestión de paquetes en Emacs: ELPA, MELPA, MARMELADE

Pues sí, Emacs también tiene su gestión de paquetes, y aunque ya habíamos visto algo de el en este post al instalar la nueva versión de org-mode – por cierto ya es la 9.01 cómo se puede ver en su página -, he tenido que verlo un poco por un ajuste de mi equipo.

Todo comenzó al intentar ajustar mi tema a un fondos oscuro, que veo mejor, y encontrarme que los temas por defecto tienes un color de fuentes demasiado suaves par mi vista.

Buscando por Internet encontré este tema Dark Mint Theme que parece ajustarse a lo que mejor me va y resulta se  instala desde MELPA, así que vamos con ello.

Paquetes en Emacs

Lo primero dejar claro que para entender este tema me he basado en  esta página de ErgoEmacas y un repaso al manual y otras cosillas.

Desde la versión 24.1 de junio de 2012, según puede verse en la información del lanzamiento de la misma, se incluyó en Emacs esta característica:

New packaging system and interface (M-x list-packages) for
downloading and installing extensions. A default package archive is hosted by GNU and maintained by the Emacs developers.

Todos estos paquetes están disponibles en el repositorio ELPA (Emacs Lisp Package Archive), mantenido por el proyecto GNU.

Lo primero hago una comprobación con el comando que se indica:

M-x list-packages          // Lista los paquetes disponibles

En este listado me aparecen 238 paquetes.

Repositorios de paquetes

Aparte de este repositorio la comunidad ha añadido un par de repositorios más con lo que se dispone en total de tres repositorios:

  • ELPA http://elpa.gnu.org/: El que ya he citado , repositorio oficial y por defecto en todas las instalaciones, en el que cada paquete esta firmado por la Free Software Foundation.
  • MELPA http://melpa.org/ MELPA.: Un repositorio puesto en marcha el 16 de enero de 2016 que se actualiza de forma diaria, con muchos más paquetes, el que me ha traído a este tema y vamos a instalar.
  • MARMALADE http://marmalade-repo.org/ : El que mayor número de paquetes incluye.  No le he mirado mucho pero las noticias parecen algo obsoletas.

Instalando MELPA

La página que he citado los pone fácil ya que me deja el código a incluir en mi .emacs, hasta hoy inmaculado, salvo lo que ha instalado al incluir el paquete org-mode,  y que tras la incorporación del código queda así:

.emacs tras instalar repositorio MELPAhot_20161126_101253La ejecución de “M-x list-packages” tras incorporarlo da un total de 3.658 paquetes!.

Instalar y seleccionar el tema

Esto es fácil y sólo, ya que lo vimos al instalar org-mode, elegimos el paquete  e instalacmos:

Tras hacerlo pulsadomo F10 para acceder al menu y vamos a Options -> Customize Emacs -> Custom Themes, donde elegimos el tema recienen instalado y nos cambia el aspecto al del típo terminal de fósforo verde:

dark-mint-instalado

 

-1:-- Gestión de paquetes en Emacs: ELPA, MELPA, MARMELADE (Post Quijote Libre)--L0--C0--November 26, 2016 10:51 AM

Quijote Libre: Mis carpetas vistas con GNU Emacs

  • Actualizado: 23 de noviembre de 2016

Gracias al comentario de nasciiboy me he dado cuenta del imperdonable error de no tener en cuenta este capitulo del curso de “La Pipa Plena” que hace referencia, y mucho mejor, a este mismo tema no os lo perdáis.

El fin de semana ha sido muy familiar ;), lo que unido a mis dolores de cabeza con KDE, me ha dejado poco tiempo para seguir metiéndome Emacs en vena.

Aún así, quiero dejar este pequeño retazo de cómo he aprendido a moverme en mis carpetas con Emacs.

Lo primero decir que como siempre Emacs dispone de un modo mayor el modo Dired – DIRectory EDitor, dedicado a la gestión de directorios.  Es decir no sólo podemos navegar, sino gestionar nuestras capetas desde Emacs.

Viendo nuestras carpetas

Para activar este modo disponemos de dos opciones, la más clásica, es la forma normal de llamar a un modo, mediante un comando directo

M-x dired

La segunda se activa automáticamente si al abrir un archivo – recordad C-x C-f – ponemos en su lugar un nombre de una carpeta, por ejemplo un simple:

C-x C-f ENTER~

Normalmente en ambos casos debemos encontrar el contenido de nuestro /home, en mi caso:

listado home -alComo se puede ver un poco liado con tanto fichero oculto y tanta historia, pero por supuesto ajustable mediante este comando:

C-u s

que nos presenta el valor de una variable del entono que ajusta el formato:

C-u s en el minibuffer

Si quitamos la “a” ocultamos todos los fichero ocultos y si lo hacemos con la “l“, oculta los dato del fichero lo que nos deja algo cómo esto:

home en dired mode sin -al

En fin esto da para mucho más y llegará pero tendré que retomar el orden si no quiero perdeme.

Si deciros que para mi aprendizaje estoy usando, de manera libre, la estupenda información que Sacha Chua da en su serie guia visual de Emacs que presenta, de forma simple,  los conceptos básicos para aprender Emacs y org-mode.

En la próxima entrada crearemos un sencillo fichero en formato org con estos documentos para dejar fijada la guía de aprendizaje.

-1:-- Mis carpetas vistas con GNU Emacs (Post Quijote Libre)--L0--C0--November 20, 2016 06:07 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

Quijote Libre: Camino a GTD con GNU Emacs

Mis notas en org-modeMis notas en org-mode

En esta semana los problemas con KMail me han absorvido y lo urgente se ha impuesto a lo importante, desviandome de mis objetivos.  Aparte que ya os contaré cómo consigo arreglarlo, si es que lo hago, se hace necesario una reflexión paralela a la que ha hecho  Ondiz en el post “Porque uso Emacs“.

En ese post hace referencia a un link de Charle H. Schulz que tenía guardado para postear por su reflexión inicial, por la cantidad de ideas que me aportó al leerlo, y por que en su párrafo inicial dice más o menos esto:

Como sabes, me gusta la idea de vivir en Emacs en la mayor medida posible. Para mí, ese es un proceso continuo muy parecido a un jardín japonés: un proceso que está siempre buscando la perfección pero que nunca está completo.

Esta frase refleja claramente la concepción de “mejora continua” en la vida, y las habiliddes de cada uno, que profeso, y no se me ocurre mejor forma de describir mi rendición ante GNU Emacs, un proceso que ha llevado varias fases.

El descubrimiento

Esto lo conté, más o menos, en mi post Descubriendo GNU Emcas y su org-mode.  Pero alguna cosa quedó en el tintero, una cosa que es importante y me ha recordado Jess en su post “Palabra de Stallmanista, no de tuxlibana“.  En el se incide en un punto para mi fundamental que es la diferencia entre un seguidor de Richard Stallman y el movimiento del Softawre Libre que lidera, y un usuario de Linux, lo escribo asi conscientemente, ya que a gran cantidad de usuarios de este sistema el Softawre Libre les preocupa más bien poco.

Cuando comencé el plan de migración uno de mis puntos débiles era mi gran dependencia de Evernote, Pocket y Feedly, dos herramientas que he venido usando de forma masiva durante años, en las que estaban fundamentados mis procesos de Recopilación, Revisión Semanal y Archivo.

Tengo que reconocer que a las dos últimas aún no ni planteado una alternativa libre, pero en el caso de Evernote, la primera de ellas, la clara respuesta de los responsables del producto sobre su falta de interés en desarrollar un cliente para GNU/Linux, libre y eficiente, la pobreza de los que he probado respecto al de Windows y la falta de agilidad y funciones del entorno Web me llevó a buscar alternativas en la Web con toda urgencia, lo que me hizo descubrir org-mode, que parece podría cumplir mis espectativas y no me desvia del uso de Softare Libre, aunque no facilite el trabajo de forma inicial.

La decisión

En la fase de recopilación de información de Emacs encontré esta página “Emacs un Sistema operativo” que tambien cita Ondiz en su post que me impactó por su frase inicial:

“Emacs es un refugiado de la cultura muerta de la las máquinas Lisp, es un refugio buscado por la cultura Unix”

 

Tened en cuenta que en mis años de programación he tenido oportunidad de trabajar en sistemas Unix, Xenix y Minix, unid a eso  las referencias sobre el uso de org-mode con GTD, entre las que destacanlos artículos de Charles Cave de 2006 y 2009.

No hay que olvidar que 18 años de mi vida profesional han estado relacionados con la producción de libros en Braille, proceso en el que la gestión del texto es fundamental y donde he podido comprobar  continuamente como la evolución cada vez más multimedia de nuestra cultura se convierte en una barrera más para los afectados por la ceguera y la ddeficiancia visual, lo que hico que registrase hace tiempo como una de mis visiones este concepto:

almacenar recursos como texto sin formato facilita su visualización, mantenimiento, aumenta su longevidad y / o facilita el intercambio de información con múltiples idiomas y sistemas.

texto que recogí de está página, en su primer párrafo.

Unidle a todo esto que mi movimiento hacia el Software Libre  me ha implicado:

  • Reparender a manejarme en un sistema tipo UNIX y conocer mi GNU/Linux Debian
  • Aprender WordPress para poder mantener este Blog

y os será fácil entender que simplificar mi flujo de trabajo en una sóla herrmienta, flexible y extensible, me ha parecido un idea más que aceptable.

Las dificultades

Coincido con Ondiz en que el manejo elemental de GNU Emacs no lleva más de un rato, cómo podéis ver por la imágen inicial del artículo yo ya lo hago, incluso en modo org, y con prácticar un par de veces su tutorial básico se esta en condiciones de editar un simple fichero.  A pesar de eso el exceso de información y de ambiación al querer abarcar demasiadas cosas a la vez me llevo al error de, sin conocerlo, intentar hacer cosas con él paras las que aún no estoy preparado lo que me llevó al problema al actualizar a org-mode 9 que os conté en este post.

Eso me ha hecho parar y centrame un poco partiendo de un GNU Emacs limpio como podeís ver en mi único fichero de configuración el fichero .emacs:

;; Added by Package.el.  This must come before configurations of
;; installed packages.  Don't delete this line.  If you don't want it,
;; just comment it out by adding a semicolon to the start of the line.
;; You may delete these explanatory comments.
(package-initialize)

(custom-set-variables
 ;; custom-set-variables was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(package-selected-packages (quote (org))))
(custom-set-faces
 ;; custom-set-faces was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 )

Es decir no tengo ahora mismo absolutamente nada, así que a partir de aquí esta todo el camino por andar.

Conclusión

Para resumir, si tengo que aclarar porque he decidido hacer un uso extensivo de GNU Emacs yo diría que hay dos tipos de razones.

Razones filosóficas

Me siento comprometido con el Software Libre y quiero liberar mi equipo y mi flujo de trabajo, a pesar de las dificultades que suponga, y GNU Emacs

  • Es un Software totalmente libre, avalado por el propio RMS y la FSF
  • Se adapta a mi filosofia de las ventajas de trabajar con ficheros de texto plano
  • Permite, al menos en teoria, reducir la herramientas necesarias en un flujo de trabajo
Razones prácticas

Una vez visto que se adapta a la filosafia que me he autoimpuesto, esto debe reflejarse en mi flujo de trabajo y estos  son los aspectos del mismo que por lo leido hasta ahora podrían ser cubiertos por este entorno.

De forma urgente

Org-Mode: Mi uso fundamental, tengo que aprenderlo y diseñar en el mi flujo de trabajo, así cómo la recopilación en mis dispositivos móviles.

Blog y edición de texto: Este es el uso en que ya le estosy dando, para muchas cosas y para preparar los borradores de los posts, aunque aún me falta aprender e implementar org2Blog que descubrí aquí.

Programación: Uno de mis objetivos es retomas la programación y los scripts Bash, Elisp y Python son la lista obvia de tareas ahora mismo y en todas esas facetas GNU Emacas me encaja.

En un futuro

IRC: No uso con frecuencia IRC en especial por mi poca soltura con el inglés, pero creo es una herramienta a utilizar en mi idea de colaborar en proyectos de Software Libre y de la FSF, auqne sólo sea cómo traductor.

Manejo de ficheros y documentos: Existe  Dired una conocida serie de herramientas de Emacs destinadas a este fin que debiera ver.

Uso del terminal: me encanta trabajar con la terminal de GNU/Linux y me resulta mucho más fácil que el uso del ratón dada mi deficiencia visual.  Ya he hecho algún pinito de ejecutar comandos de la terminal desde Emacas y parece que es una forma fácil de acceder a ella sin salir de tu entrono de trabajo.

RSS feeds: Esta es una idea que debo valorar ya que hago un uso extensivo de este medio e incluirlo en mi entorno de trabajo sería útil pero tiene el peligro de acercar las distracciones lo que es un peligro productivo.

Seguro que tengo más por descubrir y ¿a tí que se te ocurre?

-1:-- Camino a GTD con GNU Emacs (Post Quijote Libre)--L0--C0--November 13, 2016 05:02 PM

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

La Pipa Plena: Curso de emacs todo junto

Todo el curso emacs está disponible en http://www.lapipaplena.org/emacs/ Y el correspondiente archivo org puede bajarse de http://www.lapipaplena.org/emacs/curs_emacs.org
-1:-- Curso de emacs todo junto (Post templix)--L0--C0--October 06, 2016 04:31 PM

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