Sep 01 2024

Configuración de org-mode: TODO + agenda + imágenes + notificaciones

Tag: advancedadmin @ 8:08 am

Con esta configuración de org-mode para emacs podremos movernos de manera más conveniente en org-mode. Definimos algunos keybidings típicos así como activamos el sistema de logs para guardar el accountability de las tareas así como su timestamp. Además guardaremos el estado de las mismas conectándolo con el fichero en tasks.org y activando un sistema de checklist de org-mode. Por último incluiremos los diccionarios de babel, que nos permitirán mostrar imágenes inline, y sintaxis para interpretar los múltiples lenguajes:

;; ---------------------------------------------------------------------------
;; Org-mode configuration
;; ---------------------------------------------------------------------------

(setq org-log-done 'time)
(define-key global-map "\C-cl" 'org-store-link)
(define-key global-map "\C-ca" 'org-agenda)
(setq org-log-done t)

;; Connect agenda with org files
(setq org-agenda-files (list "~/zsync/tasks.org"))

(add-to-list 'load-path (expand-file-name "~/.emacs.d/ch/"))
(require 'org-checklist)

;; Show images inline when opening an org file
(add-hook 'org-babel-after-execute-hook 'org-display-inline-images)
(add-hook 'org-mode-hook 'org-display-inline-images)

Keybindings para manejar tareas:

  • C-c C-c para finalizar una tarea simple
  • C-c C-t para finalizar un set complejo de tareas
  • C-c a t para marcar como tarea a realizar y marcarla como ‘TODO’

Keybindings para manejar prioridades en las tareas:

  • C-c , to set tasks priority (priority must be on the top of org file)
  • C-c , + para incrementar la prioridad de una tarea
  • C-c , – para decrementar la prioridad de una tarea

Keybindings clave para la agenda:

  • C-c C-d para insertar una fecha limite para un set de tareas (deadline)
  • C-c C-s para añadir al backlog o hacer schedule de un set de tareas (schedule)
  • Una vez haya sido seleccionado la tarea deseada, presiona enter acto seguido C-c a a para org-agenda Now pres ‘l‘ (lower case L) to set log mode on

Keybindings para tiempos sobre tareas:

  • C-c / d para comprobar tareas con una fecha limite (deadlines)
  • C-c / b para comprobar tareas pendientes y deadlines (backlog)
  • C-c / a para comprobar tareas pasadas deadlines (after)

Keybindings para cambiar formas de visualización en tareas:

  • C-c – Cambia la numeración (se debe evitar usarlo sobre los títulos, ya que aquí se ignoraría el TODO)

Después de esto podemos añadir más funcionalidades, como limpiar todos los reminders de la agenda para el día de hoy y volver a construirlos de cero y activar todas las notificaciones de nuevo. Además podemos hacer que esta tarea se ejecute automaticamente después de medianoche.

;; ---------------------------------------------------------------------------
;; Reminders
;; ---------------------------------------------------------------------------

; Erase all reminders and rebuilt reminders for today from the agenda
(defun bh/org-agenda-to-appt ()
(interactive)
(setq appt-time-msg-list nil)
(org-agenda-to-appt))

; Rebuild the reminders everytime the agenda is displayed
(add-hook 'org-finalize-agenda-hook 'bh/org-agenda-to-appt 'append)

; This is at the end of my .emacs - so appointments are set up when Emacs starts
; This line is currently failing, need more investigation
;(bh/org-agenda-to-appt)

; Activate appointments so we get notifications
(appt-activate t)

; If we leave Emacs running overnight - reset the appointments one minute after midnight
(run-at-time "24:01" nil 'bh/org-agenda-to-appt)

Por último podemos cambiar el ciclo de tareas por defecto para tener un TODO-INPROGRESS-WAITING(opcional)-DONE y poder emplear atajos o shortcuts de teclado para ello.

(setq org-todo-keywords
'((sequence "TODO(t!)" "INPROGRESS(i!)" "WAITING(w!/!)" "|" "DONE(d!)")
))

Dic 13 2015

Simbolos

Tag: advancedoverdrive @ 10:39 pm

Es posible, que dependiendo del tipo de escritura que realicemos en GNU/Emacs necesitemos escribir distintos grupos de simbolos. Es obvio que para escribir formulas matematicas usemos por ejemplo LaTeX o simplemente TeX. Sin embargo, cuando escribimos notas en org-mode o directamente en texto plano, quiza deseemos anadir formulas quimicas, el cual necesitaremos anadir simbolos como subindices o superindices, o letras como alfa, beta o delta. Tambien puede ser que nos interese escribir simbolos como copyright, trademark, registered, etc. En otros casos es posible que queramos escribir en otros idiomas directamente o poder usar todo el superset de UTF8.

Empezaremos a mostrar las distintas formas de incluir simbolos segun el interes que tengamos, por ejemplo, para la parte quimica de indices, superindices, y simbolos basicos como alfa, beta o delta (usados tambien en quimica):

  • C-x 8 _ <numero o letra> : inserta como subindice la letra o simbolo dado.
  • C-x 8 ^ <numero o letra> : inserta como superindice la letra o simbolo dado

Para incluir la letras como alfa, beta o delta, existen distintas formas, la primera y no mas facil seria:

  • C-x 8 <RET> <CODIGO UNICODE o HEXADECIMAL> : introduce un simbolo en UTF-8 por su nombre o dado su codigo hexadecimal:
    • <TAB> mostrara todas las posibles opciones
    • GREEK CAPITAL LETTER ALPHA <RET> : insertara la letra alpha griega en mayusculas.
    • GREEK SMALL LETTER ALPHA <RET> : insertara la letra alpha griega en minusculas.
    • ALCHEMICAL SYMBOL FOR COPPER ANTIMONIATE <RET> :
    • OLD PERSIAN NUMBER HUNDRED <RET> :

Existen al menos unas 40.000 letras distintas disponibles que se pueden insertar, ya sea por su nombre o por su codigo.

Selection_002

  • M-g <letra en griego> : Insertara directamente letras griegas o definidas en nuestro .emacs. De esta forma podremos por ejemplo insertar rapidamente letras en griego:

;; Greek letters
;; by default can be done with C-c C-x \ GREEK_LETTER (use TAB)
(global-set-key (kbd «M-g a») «α»)
(global-set-key (kbd «M-g b») «β»)
(global-set-key (kbd «M-g g») «γ»)
(global-set-key (kbd «M-g d») «δ»)
(global-set-key (kbd «M-g e») «ε»)
(global-set-key (kbd «M-g z») «ζ»)
(global-set-key (kbd «M-g h») «η»)
(global-set-key (kbd «M-g q») «θ»)
(global-set-key (kbd «M-g i») «ι»)
(global-set-key (kbd «M-g k») «κ»)
(global-set-key (kbd «M-g l») «λ»)
(global-set-key (kbd «M-g m») «μ»)
(global-set-key (kbd «M-g n») «ν»)
(global-set-key (kbd «M-g x») «ξ»)
(global-set-key (kbd «M-g o») «ο»)
(global-set-key (kbd «M-g p») «π»)
(global-set-key (kbd «M-g r») «ρ»)
(global-set-key (kbd «M-g s») «σ»)
(global-set-key (kbd «M-g t») «τ»)
(global-set-key (kbd «M-g u») «υ»)
(global-set-key (kbd «M-g f») «ϕ»)
(global-set-key (kbd «M-g j») «φ»)
(global-set-key (kbd «M-g c») «χ»)
(global-set-key (kbd «M-g y») «ψ»)
(global-set-key (kbd «M-g w») «ω»)
(global-set-key (kbd «M-g A») «Α»)
(global-set-key (kbd «M-g B») «Β»)
(global-set-key (kbd «M-g G») «Γ»)
(global-set-key (kbd «M-g D») «Δ»)
(global-set-key (kbd «M-g E») «Ε»)
(global-set-key (kbd «M-g Z») «Ζ»)
(global-set-key (kbd «M-g H») «Η»)
(global-set-key (kbd «M-g Q») «Θ»)
(global-set-key (kbd «M-g I») «Ι»)
(global-set-key (kbd «M-g K») «Κ»)
(global-set-key (kbd «M-g L») «Λ»)
(global-set-key (kbd «M-g M») «Μ»)
(global-set-key (kbd «M-g N») «Ν»)
(global-set-key (kbd «M-g X») «Ξ»)
(global-set-key (kbd «M-g O») «Ο»)
(global-set-key (kbd «M-g P») «Π»)
(global-set-key (kbd «M-g R») «Ρ»)
(global-set-key (kbd «M-g S») «Σ»)
(global-set-key (kbd «M-g T») «Τ»)
(global-set-key (kbd «M-g U») «Υ»)
(global-set-key (kbd «M-g F») «Φ»)
(global-set-key (kbd «M-g J») «Φ»)
(global-set-key (kbd «M-g C») «Χ»)
(global-set-key (kbd «M-g Y») «Ψ»)
(global-set-key (kbd «M-g W») «Ω»)

  • C-c C-x \ <TAB> : Dentro de org-mode, si lo activamos, podremos escribir directamente simbolos usando una contrabarra seguido de su nombre, por ejemplo:
    • \alpha : escribe la letra griega alfa.
    • \beta : escribe la letra griega beta.
    • \delta : escribe la letra griega delta.
    • \omega : escribe la letra griega omega.
    • \leftarrow : escribe una flecha a la izquierda.
    • \rightarrow : escribe una flecha hacia la derecha.
    • ^numero : escribe el numero elevado o en superscript.
    • _numero : escribe el numero subscript.
    • \copy : pone copyright.
    • \reg : pone registered.
    • \trade : pone trademark.
    • \check : pone un tick o check.

Esta es una lista mas extensa de las distintas opciones de simbolos que podemos anadir: http://orgmode.org/worg/org-symbols.html

  • M-x set-input-method <TAB> : muestra la lista de lenguajes o idiomas en el que podemos poner el layour, pudiendo asi escribir en cualquier idioma, por ejemplo:
    • russian-computer
    • russian-typewriter
    • belarusian
    • chinese-sw
    • farsi-transliterate-banan
    • japanese-hankaku-kana
    • japanese-hiragana
    • greek
    • hebrew

Existen opciones para escoger entre unos 200 idiomas o distintos layouts.

Selection_001


May 09 2015

Sincronizacion de bookmarks con org-mode + org-protocol + org-mode capture + Firefox + linkification + Dropbox

Tag: advancedoverdrive @ 10:11 pm

Un problema con el que he convivido y al cual me he adaptado de manera incomoda durante mucho tiempo ha sido el manejo de bookmarks. Por una parte solia navegar con Firefox a pesar de que w3m es muy potente, en ciertos casos muchas webs no se abren correctamente y se hace tedioso. Ello obliga a que cualquier enlace interesante guardado en firefox, luego tenga que exportarlo de manera manual a mi fichero bookmarks.org. Una tarea bastante incomoda, porque generalmente guardamos los bookmarks rapido sin mucha atencion, acabando con cientos de ellos, ocupando gran parte del tiempo para discernir cuales son realmente interesantes para meterlos en bookmarks.org. Pero no solo eso. El problema es que en distintos ordenadores tenemos distintos firefox, teniendo asi que sincronizar multiples bookmarks guardados en firefox en un mismo fichero org. Cuando ademas reinstalamos el sistema, solemos perder dichos bookmarks, o teniendo varios ficheros .org en distintas computadoras, hace que dupliquemos bookmarks o que no tengamos la lista completa en distintos PCs.

Pensando mucho en cual era la solucion minimanete ideal, y descartando por supuesto sitios como delicious, el cual obliga a autenticarnos, guardar los bookmarks, y ademas no guardando el formato .org en cualquier caso. Necesitamos una solucion mejor. Guardar los links en un wiki tampoco solucionaba mucho la tarea, por la misma necesidad de autenticarnos y ademas guardar los links en otro formato. Y no solo eso, un ultimo problema, que es que nuestro navegador, como Firefox, reconozca de alguna manera el formato .org de emacs. Ya que si lo usamos a menudo y no solo navegamos desde emacs, lo que no queremos es abrir emacs, abrir el fichero bookmarks.org, copiar el link y pegarlo en emacs, o bien abrir emacs una vez ya estabamos navegando y abrir el fichero .org especificandole que por defecto abra el link en Firefox. Es un context switch que realmente no es comodo.

Asi que buscamos algo mas complejo de lo que originalmente podria parecer: queremos manejar orgmode para el sistema de bookmarks, queremos que ademas firefox cuando naveguemos en el, guarde automaticamente los bookmarks al pulsar unn keybinding (mediante org capture que actuara como bridge) en dicho fichero de org y se comunique con emacs (para ello usaremos org-protocol con emacserver arrancado mediante server-start). Queremos ademas que dicho fichero este sincronizado entre computadores, navegadores y entornos como emacs (para ello guardaremos el fichero en dropbox). Y ademas queremos que desde firefox tengamos un acceso directo a nuestro fichero org, y ademas que firefox interprete y parsee el fichero de texto org como enlaces que son y con un simple click podamos acceder desde el en un nuevo tab al link deseado (para ello usaremos linkification).

Comencemos instalando Dropbox para dejar el fichero de bookmarks en un lugar ideal para sincronizarlo:

$ sudo apt-get install dropbox

Instalemos los addons necesarios para firefox:

El siguiente paso es indicar en firefox donde se encontrara nuestro fichero org:

  • En firefox: View -> Toolbars -> Bookmarks toolbar
  • En firefox: Boton derecho con el raton en nuevo «Bookmarks toolbar» -> «New Bookmark» -> En «Name» poner: «Org bookmarks» y en «Location» poner: «file:///home/usuario/Dropbox/org/bookmarks.org«. Asegurarse de desactivar la casilla «Load this bookmark in the sidebar» ya que linkification no interpreta el sidebar por desgracia.

Indicamos nuestro keybinding para guardar bookmarks en firefox y que aplicacion usaremos para contactar con emacs:

  • En firefox: «Tools» -> «Addons» -> «Org mode capture» -> «Preferences» -> indicar como «emacsclient» el valor de «/usr/bin/emacsclient» y como «hotkey» el valor de «alt-r»

Ahora debemos indicarle a emacs la localizacion de nuestro fichero org y como debe comportarse cuando reciba un link mediante org-protocol. Anadiremos la siguiente configuracion en nuestro .emacs:

(server-start)
(require ‘org-protocol)

(setq org-capture-templates
      (quote ((«r» «Reference» entry (file «/home/overdrive/Dropbox/org/bookmarks.org»)
               «* %?\n\n%u\n» )
              («f» «Firefox» entry (file «/home/overdrive/Dropbox/org/bookmarks.org»)
               «* %c%?\n» )
)))

Por supuesto podemos anadir configuraciones mas avanzadas como esta otra:

(setq org-protocol-default-template-key «l»)
(setq org-capture-templates
 ‘((«t» «Todo» entry (file+headline «/home/overdrive/ALL/notes/notes.org» «Tasks»)
        «* TODO %?\n  %i\n  %a»)
   («l» «Link» entry (file+olp «/home/overdrive/ALL/notes/notes.org» «Web Links»)
        «* %a\n %?\n %i»)
   («j» «Journal» entry (file+datetree «/home/overdrive/ALL/notes/journal.org»)
        «* %?\nEntered on %U\n  %i\n  %a»)))

Para un listado de como usar los templates se puede visualizar aqui: https://www.gnu.org/software/emacs/manual/html_node/org/Template-expansion.html#Template-expansion e informacion algo mas general sobre la captura de templates aqui: https://www.gnu.org/software/emacs/manual/html_node/org/Capture-templates.html#Capture-templates.

Podeis hacer la prueba. Lanzais emacs, M-x server-start. Abris firefox, os vais a alguna web, pulsais Alt+r, vereis que emacs se abre preguntando como quereis guardar el link, pulsais «f» para indicar firefox, pulsais C-c C-c y seguis navegando. El fichero de bookmarks.org se ira actualizando. Cuando vayais a otro ordenador, con la misma configuracion, vereis los links actualizados en el fichero org.

Selection_002

Emacs se abrira en el momento de pulsar Alt+R para guardar el enlace

Selection_003

Al pulsar «f», nos insertara el link, aqui podemos modificar el formato para finalmente pulsar C-c C-c y guardarlo

Ademas, podeis pulsar en «Org bookmarks» del bookmarks toolbar de firefox y vereis como se abre a modo web el fichero org con los enlaces resaltados y clickables, los cuales al pulsar se abriran en un nuevo tab.

Selection_001

Enlaces del fichero org visibles y clickables desde firefox

Una forma distribuida de mantener actualizados vuestros bookmarks, sin necesidad de backups o de tener distintos ficheros en distintos ordenadores, sin necesidad de pensar con que navegais o con que leeis, guardais o abris los enlaces.


Página siguiente »