Linhas divisórias na agenda organizacional?


12

P : posso colocar linhas divisórias na orgexibição da minha agenda?

Meu buffer de agenda pode ficar um pouco ocupado quando tenho muitas coisas em dia. Essa ocupação tem o efeito contraproducente de me fazer evitar olhar para minha agenda porque me assusta. Estou procurando uma maneira de torná-lo visualmente menos assustador.

Uma coisa que eu gostaria é de poder colocar linhas divisórias (por exemplo, apenas uma linha de traços) entre os itens da agenda que:

  • tem um prazo hoje,
  • ultrapassaram o prazo (vencidos X dias) e
  • tem um prazo próximo (com vencimento em X dias).

É possível colocar linhas divisórias na exibição da agenda? Se sim, como eu faria isso?


Em uma pergunta semi-relacionada intitulada Como obter os dados brutos para uma agenda no modo organizacional sem uma exibição da agenda? , Publiquei uma resposta demonstrando como obter os dados brutos: emacs.stackexchange.com/a/12563/2287 Você pode modificar esses dados para atender às suas necessidades, incluindo, entre outros: replace-regexp-in-string(adicionar linhas divisórias e / ou novas linhas como você deseja); você pode ter um string-equalsou corresponde a certos critérios ou a qualquer outro critério que desejar. Examine as propriedades de texto existentes com valores para se familiarizar com o que está incluído imediatamente e use-os.
lawlist

Com uma xícara de café fresca na mão, pensei em um método mais fácil de usar os org-modedados brutos que nem sequer envolvem manipular os dados e substituir partes da string. Ou seja, basta examinar as propriedades do texto e, se elas corresponderem aos seus critérios, insira algo como uma linha antes ou depois, pois o buffer está sendo preenchido pelo mapcarno exemplo do link acima. Esse projeto pode levar algum tempo para ser implementado para criar um org-agendabuffer personalizado , e o exemplo não contempla org-search-viewou org-tags-view- ou seja, apenas org-agenda-list.
lawlist

Respostas:


2

org-agenda-block-separator

O separador entre os blocos na agenda. Se for uma string, ela será usada como separador, com uma nova linha adicionada. Se for um caractere, ele será repetido para preencher a largura da janela. Se nulo, o separador está desativado. Nele org-agenda-custom-commandsaborda o separador entre o bloco atual e o anterior.


org-agenda-compact-blocks

Um valor nulo significa tornar a agenda do bloco mais compacta. Isso é feito globalmente, excluindo linhas como o nome do período da agenda e o número da semana ou as linhas separadoras.


1
Obrigado, mas você pode dar um exemplo de como alguém usaria isso em uma exibição de agenda?
Dan

1

Você pode ter vários blocos em uma exibição da agenda, cada um com sua própria pesquisa, apenas concatenando vários 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")))
         ))))

Você também pode colocar uma lista de opções no final que serão aplicadas a todos os blocos.

Essa desvantagem é que cada bloco é calculado separadamente, o que leva três vezes mais tempo para gerar como uma única agenda


1

A seguir, é apresentado um exemplo de como examinar as propriedades de texto dos itens que estão sendo gerados org-agenda-liste modificar a sequência com base em determinados critérios. Neste exemplo, o valor da propriedade text ts-dateé obtido e comparado com a data atual - se estiver atrasada, adicionamos OLD:; se é atual, adicionamos CURRENT:, se é o futuro, adicionamos FUTURE:. O pôster original pode personalizar este exemplo, adicionar uma nova linha e / ou uma linha divisória em locais selecionados. A personalização pode variar dependendo dos critérios de classificação escolhidos pelo pôster original no org-agenda-sorting-strategy, etc.

Neste exemplo, a função org-agenda-finalize-entriesfoi modificada perto da parte inferior entre as seções rotuladas ;; BEGIN modificatione ;; 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")))
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.