Emacs 如何使用自定义TODO关键字顺序应用组织排序条目?
更具体地说,我想使用不同的关键字顺序,而不是用于在todo状态之间切换的顺序 我知道我可以使用Emacs 如何使用自定义TODO关键字顺序应用组织排序条目?,emacs,org-mode,Emacs,Org Mode,更具体地说,我想使用不同的关键字顺序,而不是用于在todo状态之间切换的顺序 我知道我可以使用组织排序条目nil?O(或O)按todo关键字进行排序,这几乎满足了我的需要。但是,我想使用不同的关键字排序。我在org todo keywords中定义的关键字顺序是我希望用于在关键字状态之间切换的顺序;但这不是我想用来排序任务的顺序。如果我通过更改组织todo关键字来解决这个问题,那么状态切换(Shift+箭头键)将无法按我所希望的方式工作。是否可以使用不同的关键字顺序进行排序和状态切换 我怀疑有一
组织排序条目nil?O
(或O
)按todo关键字进行排序,这几乎满足了我的需要。但是,我想使用不同的关键字排序。我在org todo keywords
中定义的关键字顺序是我希望用于在关键字状态之间切换的顺序;但这不是我想用来排序任务的顺序。如果我通过更改组织todo关键字来解决这个问题,那么状态切换(Shift+箭头键)将无法按我所希望的方式工作。是否可以使用不同的关键字顺序进行排序和状态切换
我怀疑有一种方法可以使用org sort entries
”GETKEY-FUNC
和COMPARE-FUNC
参数来实现这一点,尽管我对elisp的了解还不够透彻,无法一笔勾销。有什么更简单的方法吗?只需?o
就可以了吗
另外,如果列表中的标题根本没有todo关键字,我希望能够指定它们的排序顺序。例如,我可能希望我的顺序是(无关键字)、“开始”、“待办事项”、“完成”,这样我就可以得到这样的排序行:
* Project A
** Reference for this project: projectA-url.com
** STARTED Write the docs
** STARTED Build the second bit
** TODO Build the third bit
** DONE Set up the infrastructure
** DONE Build the first bit
最后,我找不到任何方法来使用?o
。如果有人能提出这样做的方法,那将是对我问题的更好回答
但是,我确实使用了?f
和GETKEY-FUNC
实现了这一点。它看起来像:
(defun todosort-key-func ()
(cl-position
(nth 2 (org-heading-components))
'(nil "STARTED" "TODO" "DONE")
:test 'equal
)
)
(org-map-entries
'(org-sort-entries nil ?f 'todosort-key-func)
"LEVEL=1" 'file)
)
在这里,(nth2(组织标题组件)
正在检索项目的TODO关键字(可能有更好的方法吗?),而cl position
正在硬编码列表中查找其索引,以便我们按照指定的顺序按关键字排序
编辑:我还发现我有一个bug,如果我的一个项目还没有任务,那么整个组织映射条目
调用都会部分失败,因为组织排序条目
会抛出一个“无需排序”的错误错误。我更希望如果我们尝试对空列表进行排序,我们只返回一个空列表,而不是停止!我对此非常陌生,因此可能有更好的方法,但我通过将整个内容包装在一个条件案例中来捕获错误,如下所示:
(condition-case nil
(org-map-entries
'(org-sort-entries nil ?f 'todosort-key-func)
"LEVEL=1" 'file)
)
(user-error (message "user-error, probably empty sort list, continuing"))
)
我很好奇为什么有人编辑了我的问题,删除了elisp
标记-该标记有什么问题?