Org-shiftright 在 agenda view中和org buffer中行为不一样

在 org buffer中可以用 S-right切换到下一个TODO,但是在agenda中S-right变成修改schedule时间到后一天,请问如何让S-right依然修改TODO?谢谢。

(define-key org-agenda-mode-map (kbd "<S-right>") 'org-agenda-todo)

org-agenda-todo 会跳出个窗口选下一个状态。 但是在org buffer中 S-right直接变成TODO sequence的下一个状态的,不用选。

噢,我不知道,你应该用了 Fast access [1] 吧,我没有所以不用选。你试试

(define-key org-agenda-mode-map (kbd "<S-right>") 'org-agenda-todo-nextset)

  1. (org) Fast access to TODO states

不是的。在buffer中S-right相当于调用了 org-shiftright函数中的 (org-call-with-arg 'org-todo 'right) 但是这段代码在agenda中eval会报错:

Debugger entered–Lisp error: (error “Before first headline at position 103 in buffer Org Agenda”) signal(error (“Before first headline at position 103 in buffer Org Agenda”)) error(“Before first headline at position %d in buffer %s” 103 #<buffer Org Agenda>) org-back-to-heading(t) org-todo(right) funcall-interactively(org-todo right) call-interactively(org-todo) org-call-with-arg(org-todo right) eval((org-call-with-arg (quote org-todo) (quote right)) nil) eval-expression((org-call-with-arg (quote org-todo) (quote right)) nil) funcall-interactively(eval-expression (org-call-with-arg (quote org-todo) (quote right)) nil) call-interactively(eval-expression nil nil) command-execute(eval-expression)

那又怎样?为什么你会预设一段代码会在 org-modeorg-agenda-mode 中得到相同的结果?

我是希望S-right在buffer和agenda中行为一样。 现在成功了,谢谢你的提醒。 buffer中要用 org-todo,agenda中要用org-agenda-todo:

(define-key org-agenda-mode-map (kbd "<S-right>") (lambda ()
                                                    (interactive)
                                                    (org-agenda-todo 'right)))