如何从组织日历跳转 (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 转到代码并阅读它。
所以这里有三个备选方案:
- 函数的代码很简单:
(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 模式代码,每次更新时都需要对代码进行此更改。这在某些情况下可能是合适的,但您应该尽可能避免它。
- 您可以定义自己的命令并将其绑定到日历中的
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)
- 您可以在
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)
所以这个方法可以让你很容易地进行实验。这是我推荐的解决方案。
当我在日历中并想跳转到 org-agenda 中的条目时,我按 'c'。 是否可以将 DAY 视图作为标准,这样当我跳跃时我只能看到一天,而不是整个星期,这样会更混乱?谢谢!
您可以通过多种方式进行。本着“授人以渔”的精神,你要做的第一件事就是弄清楚c
在日历中的作用。所以打开日历,将光标放在日期上并说 C-h c c
这将告诉您日历中的 c
运行命令
org-calendar-goto-agenda
。所以下一步是做 C-h f org-calendar-goto-agenda
并阅读它的文档。然后单击该文档中的 link 转到代码并阅读它。
所以这里有三个备选方案:
- 函数的代码很简单:
(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 模式代码,每次更新时都需要对代码进行此更改。这在某些情况下可能是合适的,但您应该尽可能避免它。
- 您可以定义自己的命令并将其绑定到日历中的
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)
- 您可以在
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)
所以这个方法可以让你很容易地进行实验。这是我推荐的解决方案。