emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Jason Dunsmore <emacs-orgmode@dunsmor.com>
To: Matt Lundin <mdl@imapmail.org>
Cc: emacs-orgmode@dunsmor.com, emacs-orgmode@gnu.org,
	Bastien <bastien.guerry@wikimedia.fr>
Subject: Re: Re: [PATCH] Stable key assignment for org-fast-tag-selection
Date: Thu, 20 Jan 2011 20:27:38 -0600	[thread overview]
Message-ID: <87ei876let.fsf@riotblast.dunsmor.com> (raw)
In-Reply-To: <87y66fxru5.fsf@fastmail.fm> (Matt Lundin's message of "Thu, 20 Jan 2011 15:06:42 -0500")

Matt Lundin <mdl@imapmail.org> writes:

> Bastien <bastien.guerry@wikimedia.fr> writes:
>
>> emacs-orgmode@dunsmor.com writes:
>>
>>> - Eval (setq org-use-fast-tag-selection t)
>>> - Eval (setq org-fast-tag-selection-single-key "expert")
>>> - Create a heading with tags :a1:a2:
>>> - Create another heading with tags :a1:a2:
>>> - Type "C-c a", "C-c a", "C-c a", "C-c a"
>>> - Notice how it changes from a1 to a2
>>
>> I reproduced this, well spotted.
>>
>>> Below is a patch to make the character assignment stable, given that all
>>> of the same tags exist in the file each time it's run.
>>
>> Thanks for the patch!
>>
>> I was not able to apply it using the pw utility, so I made the change
>> myself -- I forgot to do a "git commit --amend --author" tho, sorry!
>
> This patch breaks grouping in fast tag selection, since the sort
> function ignores the grouping information provided in org-tag-alist.
>
> Here's a sample org-tag-alist:
>
> (setq org-tag-alist '((:startgroup . nil)
> 		      ("desk" . ?d)
> 		      ("email" . ?m)
> 		      ("hack" . ?k)
> 		      ("net" . ?n)
> 		      ("phone" . ?p)
> 		      (:endgroup . nil)
> 		      (:startgroup . nil)
> 		      ("home" . ?h)
> 		      ("yard" . ?y)
> 		      ("errands" . ?e)
> 		      (:endgroup . nil)
> 		      (:startgroup . nil)
> 		      ("read" . ?r)
> 		      ("script" .?s)
> 		      ("think" . ?t)
> 		      ("travel" . ?j)
> 		      (:endgroup . nil)))
>
> And here's the prompt for org-tag-alist:
>
> Inherited:  inbox per prof
> Current:    
> 							   Next change exits
> }
> }
> }
> { { { [d] desk      [m] email     [e] errands   [k] hack      [h] home      
>   [n] net       [p] phone     [r] read      [s] script    [t] think     
>   [j] travel    [y] yard      

Good catch.  I see the problem.

--8<---------------cut here---------------start------------->8---
(sort org-tag-alist (lambda (a b) (string< (car a) (car b))))
--8<---------------cut here---------------end--------------->8---

Yields:

--8<---------------cut here---------------start------------->8---
((:endgroup)
 (:endgroup)
 (:endgroup)
 (:startgroup)
 (:startgroup)
 (:startgroup)
 ("desk" . 100)
 ("email" . 109)
 ("errands" . 101)
 ("hack" . 107)
 ("home" . 104)
 ("net" . 110)
 ("phone" . 112)
 ("read" . 114)
 ("script" . 115)
 ("think" . 116)
 ("travel" . 106)
 ("yard" . 121))
--8<---------------cut here---------------end--------------->8---

And a bunch of code relies on the position of the :startgroup
and :endgroup dummy tags.

I wonder why this design was chosen instead of using a list of alists
for grouping.  For example:

--8<---------------cut here---------------start------------->8---
(setq org-tag-alist '((("desk" . ?d)
                       ("email" . ?m)
                       ("hack" . ?k)
                       ("net" . ?n)
                       ("phone" . ?p))
                      (("home" . ?h)
                       ("yard" . ?y)
                       ("errands" . ?e))
		      (("read" . ?r)
                       ("script" .?s)
                       ("think" . ?t)
                       ("travel" . ?j))))
--8<---------------cut here---------------end--------------->8---

Maybe org-tag-alist could either be an alist or a list of alists, and a
simple (listp (caar org-tag-alist)) test could be used to see what form
org-tag-alist is in and then handle accordingly.  Does anybody see a
problem with that approach?

This doesn't seem like a trivial change, so my original patch should
probably be reverted until this gets implemented properly.

Regards,
Jason

      reply	other threads:[~2011-01-21  2:28 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-01-12 20:34 [PATCH] Stable key assignment for org-fast-tag-selection emacs-orgmode
2011-01-18  0:56 ` Bastien
2011-01-20 20:06   ` Matt Lundin
2011-01-21  2:27     ` Jason Dunsmore [this message]

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=87ei876let.fsf@riotblast.dunsmor.com \
    --to=emacs-orgmode@dunsmor.com \
    --cc=bastien.guerry@wikimedia.fr \
    --cc=emacs-orgmode@gnu.org \
    --cc=mdl@imapmail.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).