Разделительные линии в повестке дня организации?


12

В : Могу ли я разместить разделительные линии в моем представлении orgповестки дня?

Мой буфер повестки дня может стать немного занятым, когда у меня много дел из-за. Эта занятость имеет контрпродуктивный эффект, заставляя меня избегать смотреть на мои планы, потому что это меня бесит. Я ищу способ сделать его визуально менее пугающим.

Одна вещь, которую я хотел бы - это иметь возможность помещать разделительные линии (например, просто черточки) между пунктами повестки дня, которые:

  • иметь срок сегодня,
  • истек срок (просроченные X дней), и
  • иметь предстоящий крайний срок (сроком до X дней).

Можно ли поставить разделительные линии в повестку дня? Если да, как бы я это сделал?


В полу-связанном вопросе под названием « Как получить необработанные данные для повестки дня в режиме организации без представления повестки дня?» Я опубликовал ответ, демонстрирующий, как получить необработанные данные: emacs.stackexchange.com/a/12563/2287 Вы можете изменить эти данные в соответствии с вашими потребностями, включая, но не ограничиваясь: replace-regexp-in-string(добавьте разделительные линии и / или новые строки как ты желаешь); Вы можете иметь string-equalsили соответствовать определенным критериям или любым другим критериям, которые вы ищете. Изучите существующие свойства текста со значениями, чтобы ознакомиться с тем, что входит в комплект поставки, а затем используйте их.
юрист

Со свежей чашкой кофе в руке я подумал о более простом методе, использующем org-modeнеобработанные данные, который даже не предполагает манипулирования данными с заменой каких-либо частей строки. Т.е. просто изучите свойства текста и, если они соответствуют вашим критериям, вставьте что-то вроде строки до или после заполнения буфера mapcarв примере ссылки выше. Возможно, этот проект потребует некоторого времени для создания настраиваемого org-agendaбуфера, и пример не рассматривает org-search-viewили, org-tags-viewт. Е. Только org-agenda-list.
юрист

Ответы:


2

org-agenda-block-separator

Разделитель между блоками в повестке дня. Если это строка, она будет использоваться в качестве разделителя с добавлением новой строки. Если это символ, он будет повторяться для заполнения ширины окна. Если ноль, разделитель отключен. В org-agenda-custom-commandsэтом адреса разделитель между текущим и предыдущим блоком.


org-agenda-compact-blocks

Ненулевые средства делают план блока более компактным. Это делается глобально, опуская такие строки, как название диапазона повестки дня и номер недели или разделительные линии.


1
Спасибо, но не могли бы вы привести пример того, как можно использовать это в виде повестки дня?
Дан

1

Вы можете иметь несколько блоков в представлении повестки дня, каждый из которых имеет свой собственный поиск, просто объединяя несколько пользовательских команд:

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

В конце вы также можете разместить список опций, которые будут применяться ко всем блокам.

Этот недостаток состоит в том, что каждый блок вычисляется отдельно, поэтому генерация занимает 3 раза


1

Ниже приведен пример того, как проверить свойства текста элементов, которые создаются org-agenda-list, и изменить строку на основе определенных критериев. В этом примере значение свойства text ts-dateполучается и сравнивается с текущей датой - если оно просрочено, мы добавляем OLD:; если это текущее, мы добавляем CURRENT:, если его будущее, мы добавляем FUTURE:. Исходный плакат может настроить этот пример, добавить новую строку и / или разделительную линию в выбранных местах. Настройка может варьироваться в зависимости от критериев сортировки, выбранных исходным плакатом в и org-agenda-sorting-strategyт. Д.

В этом примере функция org-agenda-finalize-entriesбыла изменена в нижней части между разделами, помеченными ;; BEGIN modificationи ;; 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")))
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.