Re: [Orgmode] Re: [PATCH] Stable key assignment for org-fast-tag-selection

2011-01-20 Thread Jason Dunsmore
Matt Lundin  writes:

> Bastien  writes:
>
>> emacs-orgm...@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

___
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode


[Orgmode] Re: [PATCH] Stable key assignment for org-fast-tag-selection

2011-01-20 Thread Matt Lundin
Bastien  writes:

> emacs-orgm...@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:

--8<---cut here---start->8---
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  
--8<---cut here---end--->8---

Best,
Matt

___
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode