help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: List possible completions in pop-up menu and choose from it.


From: Jimmy Rolex
Subject: Re: List possible completions in pop-up menu and choose from it.
Date: Sat, 20 Aug 2005 07:52:50 +0000

Thank you for your help.

Now I add following code to my site-start.el. When I press [M-up], the menu
appears at point, with possible completions inside. It looks good.

However, after I select one item inside with mouse or keyboard, the selection
isn't inserted into the buffer. Have I done something wrong?

(defun my-dabbrev-completion ()
 "*Just like `dabbrev-completion', but display a popup menu."
 (interactive)
 (save-window-excursion               ; suppress *Completions* buffer
   (dabbrev-completion))
 (let ((menu (make-sparse-keymap "dabbrev-completion"))
       (completions (let ((symbols '()))
                      (mapatoms (lambda (sym)
                                  (setq symbols (cons sym symbols)))
                                dabbrev--last-obarray)
                      (sort symbols 'string-lessp))))
   (mapc (lambda (completion)
           (define-key menu (vector completion)
             `(,(symbol-name completion) .
               (lambda ()
                 (interactive)
                 (insert ,(symbol-name completion))))))
         (nreverse completions))
   (autoload 'senator-completion-menu-point-as-event "senator" "" t)
(x-popup-menu (senator-completion-menu-point-as-event) menu));;pop-up at point
 )

(global-set-key [M-up] 'my-dabbrev-completion)



From: Kevin Rodgers <address@hidden>
To: address@hidden
Subject: Re: List possible completions in pop-up menu and choose from it.
Date: Fri, 19 Aug 2005 11:57:21 -0600

Rolex JM wrote:
> I want to list in pop-up menu the possible completions returned from
> (dabbrev-completion). Then I can choose one from it and insert it into
> the text, just as (semantic-ia-complete-symbol-menu)
> does.

dabbrev-completion stores its results in dabbrev--last-obarray, which is
a data structure suitable for the completion functions.  You can read
about obarrays in the "Creating [and Interning] Symbols
==============================" node of the
Emacs Lisp manual.

Converting that to a menu keymap was too interesting for me to pass up:

  (let ((menu (make-sparse-keymap "dabbrev-completion"))
        (completions (let ((symbols '()))
                       (mapatoms (lambda (sym)
                                   (setq symbols (cons sym symbols)))
                                 dabbrev--last-obarray)
                       (sort symbols 'string-lessp))))
    (mapc (lambda (completion)
            (define-key menu (vector completion)
              `(,(symbol-name completion) .
                (lambda ()
                  (interactive)
                  (insert ,(symbol-name completion))))))
          (nreverse completions))
    (x-popup-menu t menu))

You can create your own command that you could bind to a key, mouse
click, or menu item by wrapping that in something like:

(defun dabbrev-mouse-completion (event)
  "*Just like `dabbrev-completion', but display a popup menu."
  (interactive "*e")
  (save-window-excursion                ; suppress *Completions* buffer
    (dabbrev-mouse-completion))
...
)

And then replace the t POSITION argument to x-popup-menu with event.

--
Kevin Rodgers



_______________________________________________
Help-gnu-emacs mailing list
address@hidden
http://lists.gnu.org/mailman/listinfo/help-gnu-emacs

_________________________________________________________________
与联机的朋友进行交流,请使用 MSN Messenger: http://messenger.msn.com/cn




reply via email to

[Prev in Thread] Current Thread [Next in Thread]