【已解决】如何在 Org-Mode Agenda 中以小时为单位(精确到小数)显示 Deadline ?

在 Agenda 视图中,未来的 Deadline 会被显示成 “In 2 d” 这样的形式,这意味着这个 Deadline 在两天后。我想让其以小时为单位显示,比如 “In 37 h” ,当然如果能精确到小数点后几位就更好了,比如 “In 37.365 h” 。

我尝试在网上搜索解决方案,但似乎以往的帖子都没有这样的需求。我自己也暂时找不到下手的思路,如果有大佬知道这个问题的答案,在此感谢您的帮助!

Org 8.0 引入了一个 org-agenda-deadline-leaders 控制:

(defcustom org-agenda-deadline-leaders '("Deadline:  " "In %3d d.: " "%2d d. ago: ")
  "Text preceding deadline items in the agenda view.
This is a list with three strings.  The first applies when the item has its
deadline on the current day.  The second applies when the deadline is in the
future, the third one when it is in the past.  The strings may contain %d
to capture the number of days."
  :group 'org-agenda-line-format
  :version "24.4"
  :package-version '(Org . "8.0")
  :type '(list
	  (string :tag "Deadline today          ")
	  (string :tag "Deadline in the future  ")
	  (string :tag "Deadline in the past    ")))

大佬您好,我忘记在帖子中提到之前的进度,我当时查到这个变量,然后停在不知道怎么替换 In %3d d 中的 %3d,没搞懂 %3d 或者 %d 是怎么代表 deadline 剩余天数的,也可以说不知道怎么搞一个代表 Deadline 剩余小时数的占位符,然后用这个占位符替换掉 %3d

感觉可以参考 format-time-string 文档试一试

谢谢大佬,我看看相关资料,继续琢磨琢磨。

现在了解到 %3d 只是用来设置数据类型和格式,我把它改为 %.2f 后,小数点后面就出现了两个零。被设置的数据是天数差,并且天数差并不是从秒数差转换来的,是直接用 (diff (- deadline current)) 计算的。想要以小时为单位显示 Deadline 还得根据需求在函数 org-agenda-get-deadlines 里面修改,主要是参考 diffdeadlinecurrent 这三个参数来造新参数。改的过程有些麻烦,改到一半突然不想改了,知道了是怎么回事我就满足了,不花时间搞了,反正改好了用处也不大。毕竟我也不想每次看 Agenda 的时候还得想:110h 是多少天后,39h 和 110h 中间隔了几天,还是以剩余天数显示 Deadline 比较方便。