Hello! Morgan Smith <morgan.j.sm...@outlook.com> writes:
> Ihor Radchenko <yanta...@posteo.net> writes: >>> + ;; TODO: a value of `nil' sorts it! That's not what the >>> + ;; defcustom :type of `org-tags-sort-function' says! It >>> + ;; says "No sorting". >> >> Right. When sort function is not set agenda specifically (but not other >> users of org-tags-sort-function) falls back to alphabetical sorting. > > As far as I can tell the only place where it doesn't fall back is in > `org-set-tags'. > >> In fact, the docstring does not at all mention that >> `org-tags-sort-function' is honored at all: >> >> (defcustom org-agenda-sorting-strategy ... >> ... >> tag-up Sort alphabetically by last tag, A-Z. >> tag-down Sort alphabetically by last tag, Z-A. >> >> We need to fix this docstring documenting `org-tags-sort-function', I think. > > I don't understand what is happening in `org-entries-lessp' or how it > even manages to use `org-agenda-sorting-strategy' so I'm going to > refrain from trying to document things I don't understand. I've polished the patch slightly but it's almost identical to what I submitted before. There is one remaining issue as you can see above but I'm trying my best to ignore it. I believe this patch can be applied before the issue is fixed. I would like this patch to be accepted so I can build off of it to submit another patch that includes an alternative function to set `org-tags-sort-function' to.
>From e0ec4bf01230b3e38276daf709dce9e459f1b3e0 Mon Sep 17 00:00:00 2001 From: Morgan Smith <morgan.j.sm...@outlook.com> Date: Sat, 15 Jun 2024 11:27:34 -0400 Subject: [PATCH] Testing: Add tests for `org-tags-sort-function' * testing/lisp/test-org-agenda.el (test-org-agenda/tags-sorting): New test. --- testing/lisp/test-org-agenda.el | 44 +++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/testing/lisp/test-org-agenda.el b/testing/lisp/test-org-agenda.el index 778f91e8e..5f9916232 100644 --- a/testing/lisp/test-org-agenda.el +++ b/testing/lisp/test-org-agenda.el @@ -655,6 +655,50 @@ Sunday 7 January 2024 (buffer-string)))))) (org-test-agenda--kill-all-agendas)))) +(ert-deftest test-org-agenda/tags-sorting () + "Test if `org-agenda' sorts tags according to `org-tags-sort-function'." + (let ((org-agenda-custom-commands + '(("f" "no fluff" todo "" + ((org-agenda-todo-keyword-format "") + (org-agenda-overriding-header "") + (org-agenda-prefix-format "") + (org-agenda-remove-tags t) + (org-agenda-sorting-strategy '(tag-up))))))) + (org-test-agenda-with-agenda + (string-join + '("* TODO group_a :group_a:" + "* TODO tag_a_1 :tag_a_1:" + "* TODO tag_a_2 :tag_a_2:" + "* TODO tag_b_1 :tag_b_1:" + "* TODO tag_b_2 :tag_b_2:" + "* TODO groupless :groupless:" + "* TODO lonely :lonely:") + "\n") + (dolist (org-tags-sort-function '(nil org-string< org-string> ignore)) + (should + (string-equal + (string-trim + (progn + (org-agenda nil "f") + (substring-no-properties (buffer-string)))) + (pcase org-tags-sort-function + ;; Not sorted + ('ignore + (string-join + '("group_a" "tag_a_1" "tag_a_2" "tag_b_1" "tag_b_2" "groupless" "lonely") + "\n")) + ;; TODO: a value of `nil' sorts it! That's not what the + ;; defcustom :type of `org-tags-sort-function' says! It + ;; says "No sorting". + ((or 'nil 'org-string<) + (string-join + '("group_a" "groupless" "lonely" "tag_a_1" "tag_a_2" "tag_b_1" "tag_b_2") + "\n")) + ('org-string> + (string-join + '("tag_b_2" "tag_b_1" "tag_a_2" "tag_a_1" "lonely" "groupless" "group_a") + "\n"))))))))) + (ert-deftest test-org-agenda/goto-date () "Test `org-agenda-goto-date'." (unwind-protect -- 2.46.0