[gnus git] branch master updated: n0-17-342-g01cb7ef =1= * ecomplete.el (ecomplete-display-matches): Use a local keymap to handle bindings.

Lars Magne Ingebrigtsen <[email protected]>
Newsgroups gmane.emacs.gnus.cvs
Message-ID <[email protected]>
       via  01cb7ef7561d9649ff967dd4b9c696083a59ad53 (commit)
      from  e21c35807d944425675cadbd9e486398fb499656 (commit)


- Log -----------------------------------------------------------------
commit 01cb7ef7561d9649ff967dd4b9c696083a59ad53
Author: Kan-Ru Chen <[email protected]>
Date:   Thu Oct 6 23:32:55 2011 +0200

    * ecomplete.el (ecomplete-display-matches): Use a local keymap to handle bindings.

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index ba5421b..a9ea580 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,8 @@
+2011-09-22  Kan-Ru Chen  <[email protected]>
+
+	* ecomplete.el (ecomplete-display-matches): Use a local keymap to
+	handle bindings.
+
 2011-10-06  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* gnus-win.el (gnus-configure-windows): Protect against reading
diff --git a/lisp/ecomplete.el b/lisp/ecomplete.el
index 6a47b11..5d1c46b 100644
--- a/lisp/ecomplete.el
+++ b/lisp/ecomplete.el
@@ -27,6 +27,11 @@
 (eval-when-compile
   (require 'cl))
 
+(eval-when-compile
+  (when (featurep 'xemacs)
+    ;; The `kbd' macro requires that the `read-kbd-macro' macro is available.
+    (require 'edmacro)))
+
 (defgroup ecomplete nil
   "Electric completion of email addresses and the like."
   :group 'mail)
@@ -123,15 +128,24 @@
 	    (message "%s" matches)
 	    nil)
 	(setq highlight (ecomplete-highlight-match-line matches line))
-	(while (not (memq (setq command (read-event highlight)) '(? return)))
-	  (cond
-	   ((eq command ?\M-n)
-	    (setq line (min (1+ line) max-lines)))
-	   ((eq command ?\M-p)
-	    (setq line (max (1- line) 0))))
-	  (setq highlight (ecomplete-highlight-match-line matches line)))
-	(when (eq command 'return)
-	  (nth line (split-string matches "\n")))))))
+	(let ((local-map (make-sparse-keymap))
+	      selected)
+	  (define-key local-map (kbd "RET")
+	    (lambda () (setq selected (nth line (split-string matches "\n")))))
+	  (define-key local-map (kbd "M-n")
+	    (lambda () (setq line (min (1+ line) max-lines))))
+	  (define-key local-map (kbd "M-p")
+	    (lambda () (setq line (max (1- line) 0))))
+	  (let ((overriding-local-map local-map))
+	    (while (and (null selected)
+			(setq command (read-key-sequence highlight))
+			(lookup-key local-map command))
+	      (apply (key-binding command) nil)
+	      (setq highlight (ecomplete-highlight-match-line matches line))))
+	  (if selected
+	      (message selected)
+	    (message "Abort"))
+	  selected)))))
 
 (defun ecomplete-highlight-match-line (matches line)
   (with-temp-buffer

-----------------------------------------------------------------------
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we listed those
revisions in full, above.

Summary of changes:
 lisp/ChangeLog    |    5 +++++
 lisp/ecomplete.el |   32 +++++++++++++++++++++++---------
 2 files changed, 28 insertions(+), 9 deletions(-)

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Gnus Project".

The branch, master has been updated


hooks/post-receive
-- 
Gnus Project
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.