如何从组织日历跳转 (c) 到显示全天的组织议程

how to jump (c) from org-calendar to org-agenda showing whole day

当我在日历中并想跳转到 org-agenda 中的条目时,我按 'c'。 是否可以将 DAY 视图作为标准,这样当我跳跃时我只能看到一天,而不是整个星期,这样会更混乱?谢谢!

您可以通过多种方式进行。本着“授人以渔”的精神,你要做的第一件事就是弄清楚c在日历中的作用。所以打开日历,将光标放在日期上并说 C-h c c 这将告诉您日历中的 c 运行命令 org-calendar-goto-agenda。所以下一步是做 C-h f org-calendar-goto-agenda 并阅读它的文档。然后单击该文档中的 link 转到代码并阅读它。

所以这里有三个备选方案:

  1. 函数的代码很简单:
(defun org-calendar-goto-agenda ()
  "Compute the Org agenda for the calendar date displayed at the cursor.
This is a command t        (org-agenda-span 1))hat has to be installed in `calendar-mode-map'."
  (interactive)
  ;; Temporarily disable sticky agenda since user clearly wants to
  ;; refresh view anyway.
  (let ((org-agenda-buffer-tmp-name "*Org Agenda(a)*")
        (org-agenda-sticky nil))
    (org-agenda-list nil (calendar-absolute-from-gregorian
                          (calendar-cursor-to-date))
                     nil)))

您可以通过在本地将变量 org-agenda-span 设置为 1 来修改函数,使议程视图仅显示一天:

(defun org-calendar-goto-agenda ()
  "Compute the Org agenda for the calendar date displayed at the cursor.
This is a command t        (org-agenda-span 1))hat has to be installed in `calendar-mode-map'."
  (interactive)
  ;; Temporarily disable sticky agenda since user clearly wants to
  ;; refresh view anyway.
  (let ((org-agenda-buffer-tmp-name "*Org Agenda(a)*")
        (org-agenda-sticky nil)
        (org-agenda-span 1))
    (org-agenda-list nil (calendar-absolute-from-gregorian
                          (calendar-cursor-to-date))
                     nil)))

问题在于您现在已经分叉了 Org 模式代码,每次更新时都需要对代码进行此更改。这在某些情况下可能是合适的,但您应该尽可能避免它。


  1. 您可以定义自己的命令并将其绑定到日历中的c
(defun my-org-calendar-goto-agenda ()
  (interactive)
  (let ((org-agenda-span 1))
    (org-calendar-goto-agenda)))

(define-key calendar-mode-map (kbd "c") #'my-org-calendar-goto-agenda)

效果很好。如果你想尝试下面的第三种方法,你必须记得撤消键盘映射修改以恢复原始状态:

(define-key calendar-mode-map (kbd "c") #'org-calendar-goto-agenda)

  1. 您可以在 org-calendar-goto-agenda 命令中添加 advice。这是上面第二个选项的形式化:它稍微“高级”一点,但它是处理此类问题的一种强大方法:给你一个几乎可以做你想做的事情的函数,你想定制它,这样它正是你想要的。这种方法不能一直用,但在这种情况下可以用,它提供了一个简单的例子:
(defun org-calendar-goto-agenda-around (orig-fun &rest args)
  (let ((org-agenda-span 1))
    (apply orig-fun args)))

(advice-add 'org-calendar-goto-agenda :around #'org-calendar-goto-agenda-around)

这个想法是你定义一个 around 函数,它在 周围 原始函数的调用(在这种情况下,它让绑定 org-agenda-span 到 1,就像其他方法一样,然后在这个新的 let-bound 环境中调用原始函数)。然后我们通过安装建议来修改原来的功能。如果你现在C-h f org-calendar-goto-agenda,你会看到有一些附加信息:

This function has :around advice: ‘org-calendar-goto-agenda-around’.

这可能是做你想做的最简洁的方法。您也可以使用

轻松删除建议
(advice-remove 'org-calendar-goto-agenda  #'org-calendar-goto-agenda-around)

所以这个方法可以让你很容易地进行实验。这是我推荐的解决方案。