From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mikael Fornius Subject: [PATCH] Improved org-assign-fast-keys. Date: Thu, 28 Jan 2010 16:38:50 +0100 Message-ID: <877hr244tx.fsf@eee.lan> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NaWPt-00017u-I4 for emacs-orgmode@gnu.org; Thu, 28 Jan 2010 10:36:21 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1NaWPo-00015u-Ku for emacs-orgmode@gnu.org; Thu, 28 Jan 2010 10:36:20 -0500 Received: from [199.232.76.173] (port=51098 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NaWPo-00015d-BA for emacs-orgmode@gnu.org; Thu, 28 Jan 2010 10:36:16 -0500 Received: from violet.abc.se ([62.80.200.155]:50540) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1NaWPn-0006gw-MQ for emacs-orgmode@gnu.org; Thu, 28 Jan 2010 10:36:16 -0500 List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: emacs-orgmode@gnu.org --=-=-= 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! --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=diff Content-Description: org-assign-fast-keys patch 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 + + * 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 * 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 --=-=-= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ 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 --=-=-=--