From: Carsten Dominik <carsten.dominik@gmail.com>
To: Mikael Fornius <mfo@abc.se>
Cc: emacs-orgmode@gnu.org
Subject: Re: [PATCH] Improved org-assign-fast-keys.
Date: Thu, 28 Jan 2010 19:28:15 +0100 [thread overview]
Message-ID: <956605EB-47B7-4F70-A3BF-C462EED8E0AA@gmail.com> (raw)
In-Reply-To: <877hr244tx.fsf@eee.lan>
Hi Mikael,
this looks very good, thanks for getting rid of the FIXME... :-)
I have applied the patch.
- Carsten
On Jan 28, 2010, at 4:38 PM, Mikael Fornius wrote:
>
> I have 30+ TODO-keywords defined in some org-files.
>
> When using C-c C-t to alter state I got weird keys assigned.
>
> I suggest changing org-assign-fast-keys as attached patch describes.
>
> I was bold enough to remove the FIXME comment already there but if one
> has more than 70 keywords it can cause ugly keys again. But no one
> uses
> more than 70 keywords?
>
> I have tested it and, "it works for me". :-)
>
> Anyway, Carsten, feel free to use this patch in org-mode if you like
> it.
>
> Thanks for a great piece of software and community, cheers!
>
> diff --git a/lisp/ChangeLog b/lisp/ChangeLog
> index 2dc260d..c662d89 100755
> --- a/lisp/ChangeLog
> +++ b/lisp/ChangeLog
> @@ -1,3 +1,10 @@
> +2010-01-28 Mikael Fornius <mfo@abc.se>
> +
> + * org.el (org-assign-fast-keys): Prefer keys used in keyword name
> + when assigning. Begin using numerical characters when all in name
> + is used up. This is to spare alphanumeric characters for better
> + match with other keywords.
> +
> 2010-01-28 Carsten Dominik <carsten.dominik@gmail.com>
>
> * org-latex.el (org-export-latex-preprocess): More consistent
> diff --git a/lisp/org.el b/lisp/org.el
> index cd378b4..d92e335 100644
> --- a/lisp/org.el
> +++ b/lisp/org.el
> @@ -4129,30 +4129,24 @@ This will extract info from a string like
> \"WAIT(w@/!)\"."
> x))
> list))
>
> -;; FIXME: this could be done much better, using second characters
> etc.
> (defun org-assign-fast-keys (alist)
> "Assign fast keys to a keyword-key alist.
> Respect keys that are already there."
> - (let (new e k c c1 c2 (char ?a))
> + (let (new e (alt ?0))
> (while (setq e (pop alist))
> - (cond
> - ((equal e '(:startgroup)) (push e new))
> - ((equal e '(:endgroup)) (push e new))
> - ((equal e '(:newline)) (push e new))
> - (t
> - (setq k (car e) c2 nil)
> - (if (cdr e)
> - (setq c (cdr e))
> - ;; automatically assign a character.
> - (setq c1 (string-to-char
> - (downcase (substring
> - k (if (= (string-to-char k) ?@) 1 0)))))
> - (if (or (rassoc c1 new) (rassoc c1 alist))
> - (while (or (rassoc char new) (rassoc char alist))
> - (setq char (1+ char)))
> - (setq c2 c1))
> - (setq c (or c2 char)))
> - (push (cons k c) new))))
> + (if (or (memq (car e) '(:newline :endgroup :startgroup))
> + (cdr e)) ;; Key already assigned.
> + (push e new)
> + (let ((clist (string-to-list (downcase (car e))))
> + (used (append new alist)))
> + (when (= (car clist) ?@)
> + (pop clist))
> + (while (and clist (rassoc (car clist) used))
> + (pop clist))
> + (unless clist
> + (while (rassoc alt used)
> + (incf alt)))
> + (push (cons (car e) (or (car clist) alt)) new))))
> (nreverse new)))
>
> ;;; Some variables used in various places
>
> --
> Mikael Fornius
> _______________________________________________
> 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
- Carsten
prev parent reply other threads:[~2010-01-28 23:12 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-01-28 15:38 [PATCH] Improved org-assign-fast-keys Mikael Fornius
2010-01-28 18:28 ` Carsten Dominik [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=956605EB-47B7-4F70-A3BF-C462EED8E0AA@gmail.com \
--to=carsten.dominik@gmail.com \
--cc=emacs-orgmode@gnu.org \
--cc=mfo@abc.se \
/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).