Dic 09

Org-mode : Hiperenlaces

Tag: basicadmin @ 1:45 am

Org permite guardar enlaces y que sean accesibles de forma click-able. El formato general es:

[[link][descripcion]        alternativa          [[link]]

Una vez todos los corchetes esten presentes, la descripcion sera mostrada, asi como el enlace. La forma que se usa para resaltarlos es mediante la variable org-link, que por defecto es subrayado. Es posible modificar tanto el link como su descripcion pulsando las teclas C-c C-l. Para borrar el enlace tan solo debemos poner el cursor al principio de la linea y pulsar BACKSPACE.

Enlaces internos

El link puede ser interno (y no una URL) para ello debemos crear identificadores y ser responsables de mantener un unico identificador diferente para cada enlace interno, por ejemplo si anadimos esta linea:

# <<<Mi objetivo>>>

Podremos referenciar a dicho enlace interno creando lo siguiente:

[[Mi objetivo]]

o bien

[[Mi objetivo]][[Buscar mi objetivo]]

Para acceder a los enlaces debemos presionar C-c C-o o bien hacer click con el raton. Tambien es posible exportarlos como enlaces HTML mediante HTML export (el cual comentaremos mas adelante).

Si el enlace no existe como tal, org buscara enlaces que comiencen por el mismo patron (es decir *Mi objetivo) y mostrara los resultados solo si coincide completamente, pudiendo acceder a cada uno de ellos o bien volviendo atras mediante C-c &.

Es posible crear enlaces usando botones de radio mediante (solo seran cargados cuando se cargue el fichero org la primera vez o bien pulsando C-c C-c):

<<<Mi objetivo>>>

Enlaces externos

Org permite enlazar a ficheros, webs, usenet, mails, entradas de bases de datos, e incluso conversaciones de irc o sus logs. Todos los enlaces externos comienzan por la palabra clave que identifica el tipo de enlace externo seguido por los dos puntos y el propio enlace, por ejemplo:

http://www.blackhats.es/    Una web
file:/home/overdrive/org.txt    Un fichero con PATH absoluto
/home/overdrive/org.txt        Igual que arriba
file:documentos/ultimo.pdf    Un fichero con PATH relativo
./documentos/ultimo.pdf        Igual que arriba
file:alguntexto::NNN        Una linea donde saltar dentro de un fichero
file:projects.org        Enlace a otro fichero org
file:projects.org::foo bar    Busqueda de texto en un fichero org
file.projects.org::*task bar    Busqueda de cabecera en un fichero org
id:B742456-2EAS-4FGHDF-345BZ    Enlace a un identificador
news:comp.emacs            Enlace a usenet
mailto:zoom@blackhats.es    Enlace a un correo
vm:carpeta            Enlace VM a una carpeta
vm:carpeta#id            Enlace VM a un mensaje
vm://yo@al.site.org/carpeta#id     Enlace VM a un identificador de una maquina remota
wl:carpeta            Enlace WANDERLUST a una carpeta
wl:carpeta#id            Enlace WANDERLUST a un id de una carpeta
mhe:carpeta            Enlace MH-E a una carpeta
mhe:carpeta#id            Enlace ME-E a un id de una carpeta
rmail:carpeta            Enlace rmail a una carpeta
rmail:carpeta#id        Enlace rmail a un id de una carpeta
gnus:grupo            Enlace gnus a un grupo
gnus:grupo#id            Enlace gnus a un id de un grupo
bbdb:R.*Stallman        Enlace BBDB con expresion regular (regexp)
irc:/freenode.net/#emacs/over    Enlace IRC
shell:ls *.org            Enlace a un comando shell
elisp:org-agenda        Enlace a un comando interactivo Elisp
elisp:(find-file-other-frame “elisp.org”)   Enlace a un formulario lisp a evaluar

Los enlaces deben ser cerrados con doble corchete y deben contener un texto descriptivo en lugar de mostrar la URL:

[[http://www.gnu.org/software/emacs/][GNU Emacs]]

Es posible poner como descripcion una URL o una imagen que luego puede ser mostrada inline. Ademas para evitar problemas con espacios o ciertas palabras reservadas es posible mediante el entrecomillado simple por ejemplo:

‘bbdb:Richard Stallman’

Administracion

C-c l : Si queremos insertar un enlace (ya sea para buffers, VM, rmail, Wanderlust, MH-E, gnus, navegadores como W3 o W3M, contactos BBDB, irc, agenda u otros ficheros).
C-c C-l : Inserta un enlace de forma interactiva sobre el cursor (permitiendo usar autocompletion con TAB)
C-u C-c C-l : Inserta un enlace usando fichero que sera insertado.
C-c C-o ó RET : Abre un enlace.
C-u C-u C-c C-o : Abre un enlace evitando emacs.
C-c % : Mete la posicion actual en el mark-ring.
C-c & : Salta a una posicion guardada.
C-c C-x C-n : Se desplaza al siguiente enlace en el buffer.
C-c C-x C-p : Se desplaza al enlace anterior en el buffer.

Se puede bindear a C-n y C-p anadiendo las siguientes lineas en nuestro .emacs:

(add-hook ‘org-load-hook
(lambda ()
(define-key ‘org-mode-map “\C-n” ‘org-next-link)
(define-key ‘org-mode-map “\C-p” ‘org-previous-link)))

Usando enlaces

Se pueden insertar las siguientes lineas en nuestro .emacs para acceder a los enlaces fuera de org:

(global-set-key “\C-c L” ‘org-insert-link-global)
(global-set-key “\C-c o” ‘org-open-at-point-global)

Abreviaturas

Se pueden usar abreviaturas para evitar tener que escribir mas de la cuenta, por ejemplo:

[[linkword:tag][descripcion]]

Donde ‘tag‘ es opcional y linkword debe ser un caracter alfanumberico o ‘_‘ o ‘‘. En lugar de tener que repetir dicha linea muchas veces podemos hacer cosas como:

(setq org-link-abbrev-alist
‘((“bugzilla” . “http://10.1.2.9/bugzilla/show_bug.cgi?id=”)
(“google”   . “http://www.google.com/search?q=”)
(“ads”         . “http://adsabs.harvard.edu/cgi-bin/nph-abs_connect?author=%s&db_key=AST”)))

Para el primer caso podemos enlazar un bug con [[bugzilla:129]], para el segundo caso podriamos usar [[google:OrgMode]] y para el ultimo caso podriamos usar [[ads:Dominik,C]] que reemplazara el contenido la cadena ‘%s‘ por el tag.

Para realizar abreviaturas para un fichero especifico podemos usar:

#+LINK: bugzilla http://10.1.2.9/bugzilla/show_bug.cgi?id=
#+LINK: google     http://www.google.com/search?q=%s

Ademas es posible usar completion para abreviaturas despues de escribir ‘[‘.

Opciones de busqueda

Los enlaces pueden contener cierta informacion a la hora de saltar en un enlace particular, como por ejemplo el numero de linea, una expresion regular, etc… por ejemplo:

[[file:~/codigo/main.c::255]]
[[file:~/xx.org::My objetivo]]
[[file:~/xx.org::*My objetivo]]
[[file:~/xx.org::/expresion_regular/]]

Busquedas personalizadas

Es posible modificar y personalizar las busquedas para buscar enlaces en ficheros con una extension particular hookeando variables como org-create-file-search-functions y org-execute-file-search-functions, tambien es interesante ver el mecanismo que usa org-mode para buscar en bases de datos BibTeX, para ello es posible ver la implementacion en org-bibtex.el.

Leave a Reply

You must be logged in to post a comment.