emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Carlos Pita <carlosjosepita@gmail.com>
To: emacs-orgmode <emacs-orgmode@gnu.org>
Subject: [PATCH] Faulty logic in org-cmp-tag/alpha
Date: Sat, 9 Mar 2019 17:55:41 -0300	[thread overview]
Message-ID: <CAELgYhcWzkvzmoEjGk-MmtLrSRGbPoR9HqTf-dpo3KZ9DkXsUg@mail.gmail.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 611 bytes --]

Hi all,

there is a problem in this kind of logic:

    (cond ((not ta) +1)
      ((not tb) -1)
      ((string-lessp ta tb) -1)
      ((string-lessp tb ta) +1))))

in that when both ta and tb are nil then they are arbitrarily sorted.
Since the agenda sorting strategy is lexicographic this logic
virtually invalidates any strategy that puts tag or alpha first, v.g.
'(tag-up priority-down).

I've attached a patch returning nil when both ta and tb are nil so as
to fallback to the next sorting criterion without favoring lhs nor
rhs.

AFAICS this only affects tag and alpha comparators.

Best regards
--
Carlos

[-- Attachment #2: 0001-Compare-nil-nil-as-nil-so-as-not-to-change-lexicogra.patch --]
[-- Type: text/x-patch, Size: 1327 bytes --]

From 35396182b465bd67c72d776709eee5e0041d96c7 Mon Sep 17 00:00:00 2001
From: memeplex <carlosjosepita@gmail.com>
Date: Sat, 9 Mar 2019 17:49:52 -0300
Subject: [PATCH] Compare nil-nil as nil so as not to change lexicographic
 order

* lisp/org-agenda.el (org-cmp-alpha/tag): don't favor a particular
  ordering when both lhs and rhs are nil.
---
 lisp/org-agenda.el | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el
index 13bbae966..c9bea4465 100644
--- a/lisp/org-agenda.el
+++ b/lisp/org-agenda.el
@@ -7003,7 +7003,8 @@ The optional argument TYPE tells the agenda type."
 				  "\\([ \t]*\\[[a-zA-Z0-9]\\]\\)? *") tb)
 	(setq tb (substring tb (match-end 0))))
       (setq tb (downcase tb)))
-    (cond ((not ta) +1)
+    (cond ((not (or ta tb)) nil)
+	  ((not ta) +1)
 	  ((not tb) -1)
 	  ((string-lessp ta tb) -1)
 	  ((string-lessp tb ta) +1))))
@@ -7012,7 +7013,8 @@ The optional argument TYPE tells the agenda type."
   "Compare the string values of the first tags of A and B."
   (let ((ta (car (last (get-text-property 1 'tags a))))
 	(tb (car (last (get-text-property 1 'tags b)))))
-    (cond ((not ta) +1)
+    (cond ((not (or ta tb)) nil)
+	  ((not ta) +1)
 	  ((not tb) -1)
 	  ((string-lessp ta tb) -1)
 	  ((string-lessp tb ta) +1))))
-- 
2.21.0


             reply	other threads:[~2019-03-09 20:55 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-09 20:55 Carlos Pita [this message]
2019-03-10 10:15 ` [PATCH] Faulty logic in org-cmp-tag/alpha Nicolas Goaziou

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAELgYhcWzkvzmoEjGk-MmtLrSRGbPoR9HqTf-dpo3KZ9DkXsUg@mail.gmail.com \
    --to=carlosjosepita@gmail.com \
    --cc=emacs-orgmode@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).