¿Líneas divisorias en la agenda de la organización?


12

P : ¿puedo poner líneas divisorias en mi orgvista de agenda?

Mi búfer de agenda puede estar un poco ocupado cuando tengo muchas cosas pendientes. Este ajetreo tiene el efecto contraproducente de hacerme evitar mirar mi agenda porque me asusta. Estoy buscando una manera de hacerlo visualmente menos desalentador.

Una cosa que me gustaría es poder poner líneas divisorias (por ejemplo, solo una línea de guiones) entre los elementos de la agenda que:

  • tener una fecha límite hoy,
  • han pasado su fecha límite (X días vencidos) y
  • tiene una fecha límite próxima (vence en X días).

¿Es posible poner líneas divisorias en la vista de agenda? En caso afirmativo, ¿cómo haría eso?


En una pregunta semi-relacionada titulada ¿Cómo obtener los datos en bruto para una agenda en modo organización sin una vista de agenda? , Publiqué una respuesta que demuestra cómo obtener los datos sin procesar: emacs.stackexchange.com/a/12563/2287 Puede modificar esos datos para satisfacer sus necesidades, incluyendo, entre otros: replace-regexp-in-string(agregar líneas divisorias y / o nuevas líneas como tu deseas); puede tener string-equalso coincide con ciertos criterios o cualquier otro criterio que busque. Examine las propiedades de texto existentes con valores para familiarizarse con lo que se incluye listo para usar, y luego úselos.
abogados

Con una taza de café recién hecho en la mano, pensé en un método más fácil usando los org-modedatos sin procesar que ni siquiera implican manipular los datos con el reemplazo de cualquier parte de la cadena. Es decir, simplemente examine las propiedades del texto y si coinciden con sus criterios, inserte algo como una línea antes o después, ya que el búfer se está rellenando mapcaren el ejemplo del enlace anterior. Este proyecto podría implicar un tiempo de implementación para crear un org-agendabúfer personalizado , y el ejemplo no contempla org-search-viewo org-tags-view, es decir, solo org-agenda-list.
abogados

Respuestas:


2

org-agenda-block-separator

El separador entre bloques en la agenda. Si se trata de una cadena, se utilizará como separador, con una nueva línea agregada. Si es un carácter, se repetirá para llenar el ancho de la ventana. Si es nulo, el separador está deshabilitado. En org-agenda-custom-commandsesto se aborda el separador entre el bloque actual y el anterior.


org-agenda-compact-blocks

No nulo significa hacer que la agenda de bloques sea más compacta. Esto se hace globalmente al omitir líneas como el nombre de la agenda y el número de semana o las líneas de separación.


1
Gracias, pero ¿puede dar un ejemplo de cómo se usaría esto en una vista de agenda?
Dan

1

Puede tener múltiples bloques en una vista de agenda, cada uno con su propia búsqueda simplemente concatenando varios comandos personalizados:

(setq org-agenda-custom-commands
      '(("D" "Deadlines"
         ((tags-todo "DEADLINE=\"<today>\""
                     ((org-agenda-overriding-header "Due Today"))
                     )
          (tags-todo "DEADLINE<\"<today>\""
                     ((org-agenda-overriding-header "You're Late")))
          (tags-todo "+DEADLINE<\"<+5d>\"+DEADLINE>\"<today>\""
                     ((org-agenda-overriding-header "Better get on it")))
         ))))

También puede colocar una lista de opciones al final que se aplicará a todos los bloques.

Esta desventaja es que cada bloque se calcula por separado, por lo que tarda 3 veces más en generarse como una sola agenda


1

El siguiente es un ejemplo de cómo examinar las propiedades de texto de los elementos generados por org-agenda-list, y modificar la cadena de acuerdo con ciertos criterios. En este ejemplo, ts-datese obtiene el valor de la propiedad de texto y se compara con la fecha actual; si está vencida, agregamos OLD:; si es actual, agregamos CURRENT:, si es futuro, agregamos FUTURE:. El póster original puede personalizar este ejemplo, agregar una nueva línea y / o una línea divisoria en ubicaciones seleccionadas. La personalización puede variar según los criterios de clasificación elegidos por el póster original en el org-agenda-sorting-strategy, etc.

En este ejemplo, la función org-agenda-finalize-entriesse ha modificado cerca de la parte inferior entre las secciones etiquetadas ;; BEGIN modificationy ;; END modification.

(require 'org-agenda)

(defun org-agenda-finalize-entries (list &optional type)
  "Sort, limit and concatenate the LIST of agenda items.
The optional argument TYPE tells the agenda type."
  (let ((max-effort (cond ((listp org-agenda-max-effort)
         (cdr (assoc type org-agenda-max-effort)))
        (t org-agenda-max-effort)))
  (max-todo (cond ((listp org-agenda-max-todos)
       (cdr (assoc type org-agenda-max-todos)))
      (t org-agenda-max-todos)))
  (max-tags (cond ((listp org-agenda-max-tags)
       (cdr (assoc type org-agenda-max-tags)))
      (t org-agenda-max-tags)))
  (max-entries (cond ((listp org-agenda-max-entries)
          (cdr (assoc type org-agenda-max-entries)))
         (t org-agenda-max-entries))) l)
    (when org-agenda-before-sorting-filter-function
      (setq list
      (delq nil
      (mapcar
       org-agenda-before-sorting-filter-function list))))
    (setq list (mapcar 'org-agenda-highlight-todo list)
    list (mapcar 'identity (sort list 'org-entries-lessp)))
    (when max-effort
      (setq list (org-agenda-limit-entries
      list 'effort-minutes max-effort 'identity)))
    (when max-todo
      (setq list (org-agenda-limit-entries list 'todo-state max-todo)))
    (when max-tags
      (setq list (org-agenda-limit-entries list 'tags max-tags)))
    (when max-entries
      (setq list (org-agenda-limit-entries list 'org-hd-marker max-entries)))
    ;; BEGIN modification
    (setq list
      (mapcar
        (lambda (string)
          (let* (
              (current-date (time-to-days (current-time)))
              (ts-date (get-text-property 0 'ts-date string)) )
            (if ts-date
              (cond
                ((< ts-date current-date)
                  (message "The task dated %s is overdue." ts-date)
                  ;; The new value of `string' is returned/thrown as a result.
                  (replace-regexp-in-string "^" "OLD:  " string))
                ((= ts-date current-date)
                  (message "The task dated %s is due today." ts-date)
                  ;; The new value of `string' is returned/thrown as a result.
                  (replace-regexp-in-string "^" "CURRENT:  " string))
                ((> ts-date current-date)
                  (message "The task dated %s is not due yet." ts-date)
                  ;; The new value of `string' is returned/thrown as a result.
                  (replace-regexp-in-string "^" "FUTURE:  " string)))
              string)))
        list))
    ;; END modification
    (mapconcat 'identity list "\n")))
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.