Рядки поділу в порядку денному org?


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

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

Цей недолік полягає в тому, що кожен блок обчислюється окремо, тому для генерування одного порядку денного потрібно три рази


1

Далі наведено приклад того, як вивчити текстові властивості елементів, що створюються org-agenda-list, та змінити рядок на основі певних критеріїв. У цьому прикладі 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.