组织议程中的分隔线?


12

:我可以在org议程视图中放置分隔线吗?

当我有很多事情要做时,我的议程缓冲区可能会变得有点忙。这种忙碌会产生适得其反的效果,使我避免看我的议程,因为它吓到我了。我正在寻找一种使视觉上不那么令人生畏的方法。

我想做的一件事是能够在议程项目之间插入分隔线(例如,短划线):

  • 今天有最后期限
  • 超过了他们的截止日期(逾期X天),并且
  • 有一个即将到来的截止日期(在X天内到期)。

是否可以在议程视图中放置分隔线?如果是,我该怎么做?


在一个半相关的问题中,如何在没有议程视图的情况下获取组织模式议程的原始数据?,我发布了一个答案,演示了如何获取原始数据: emacs.stackexchange.com/a/12563/2287 您可以修改该数据以适合您的需求,包括但不限于:( replace-regexp-in-string添加分隔线和/或换行符为您的愿望);您可以具有string-equals或匹配某些条件或您要寻找的任何其他条件。检查具有值的现有文本属性,以熟悉开箱即用的内容,然后使用它们。
法律列表

有了一杯新鲜的咖啡,我想到了一种使用org-mode原始数据的简便方法,该方法甚至不涉及通过替换字符串的任何部分来处理数据。即,仅检查文本属性,如果它们符合您的条件,则mapcar在上面的链接示例中,由于缓冲区正在填充,因此请在一行之前或之后插入一行。可以想到,该项目需要一些时间来实现以创建自定义org-agenda缓冲区,并且该示例没有考虑org-search-vieworg-tags-view仅考虑org-agenda-list
法律列表

Answers:


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根据某些条件修改字符串的示例。在此示例中,将ts-date获取text属性的值并将其与当前日期进行比较-如果过期,则添加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")))
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.