From: "Jason Spiro" <jasonspiro4@gmail.com>
To: "Toby Cubitt" <t.s.cubitt.98-dated-1174279006.800fd7@cantab.net>,
help-gnu-emacs@gnu.org
Cc: Alessandro Piras <laynor@gmail.com>,
Brad Beveridge <brad.beveridge@gmail.com>
Subject: Re: completion-ui.el question: my vimpulse-show-completion-menu function always gives me an empty menu
Date: Thu, 12 Apr 2007 19:16:58 -0400 [thread overview]
Message-ID: <c241693f0704121616t49497adfo70f12ffd8f2f3185@mail.gmail.com> (raw)
Hi list, hello Toby,
As you may know, I am working on vimpulse[1] which extends viper-mode
to emulate the most useful Vim keys in Emacs. I am hoping to add C-n
and C-p completion to vimpulse, and I am wondering how to do so.
I am hoping to use hippie-expand because it can complete:
- words,
- filenames, and
- entire buffer lines
among other things.[2] Dabbrev seems to basically only complete
words. I am trying to emulate Vim's completion behavior, and Vim can
complete all those things and more.[3]
> As an Elisp coder, you're not supposed to invoke *any* completion
> interface explicitly, as you've tried to do. Deciding which combination
> of user-interfaces to use is the user's business, not the package
> writer's. Maybe some users want to use menu completion, but others
> prefer to see a list in the echo area, whilst still others just want a
> tooltip to popup after a delay, etc. etc. Completion-UI offloads those
> choices onto the user, which is where they should be.
OK. I will tell vimpulse users they should set certain Completion-UI
settings themselves to get something closer to Vim completion. But
meanwhile, I still have a question about the code I am writing myself
for testing purposes.
;; Begin code {{{
(require 'completion-ui)
;; Note: This code has an additional bug in addition to the problem I
;; am asking about in this mailing list message:
;; When called with a MAXNUM of nil, this func sometimes fails. (Seems
;; to work the first time, then fail all times after, in such cases.
;; To fix, call with a normal MAXNUM.)
(defun vimpulse-try-hippie-expand-listed-functions (prefix &optional maxnum)
; (interactive "*MString to expand:
;nMaximum number of expansions, or nil for unlimited: ")
(setq expansions nil)
(with-temp-buffer
(insert-string prefix)
(hippie-expand nil)
(unless (string-equal (current-message) "No expansion found")
(while (and
(not (string-equal
(current-message)
"No further expansions found"))
(if maxnum (not (= (length expansions) maxnum))))
;; Hippie-expand was designed to be run interactively. If
;; this-command and last-command are equal, it assumes it's
;; being called as a "repeated use" (additional call without
;; moving the point) and searches for additional expansions
;; with the same prefix. So, make this-command and
;; last-command equal.
(setq this-command last-command)
(hippie-expand nil)
(add-to-list 'expansions (buffer-string))
(buffer-string)
))
expansions))
(defun jason-problem-demo ()
(interactive)
(setq-default completion-function
'vimpulse-try-hippie-expand-listed-functions)
(setq completion-function 'vimpulse-try-hippie-expand-listed-functions)
;; is this always necessary? Am I even ever supposed to call it?
(completion-setup-overlay 'prefix)
(completion-show-menu))
;; }}} End code
Whenever I start typing a word then run
M-x jason-problem-demo I get an empty menu. Why?
Am I using
completion-show-menu wrong? It errors on me if I don't call
completion-setup-overlay first, so I call it first. Should I?
Cheers,
Jason[5]
[1] http://www.emacswiki.org/cgi-bin/wiki/vimpulse.el
[2] Unfortunately hippie-expand can't complete multiple-word sequences
like dabbrev can when you press M-/ SPC M-/ SPC M-/. Vim can do it:
just press CTRL-X CTRL-P repeatedly. But I hope I'll eventually fix
that.
Then again, maybe I'll never have time to make that change to
hippie-expand. So maybe I should have Completion-UI call
dabbrev-expand instead.
[3] e.g. CTRL-X CTRL-T for thesaurus completion, or many other[4] things.
[4] http://ianua.initd.org/vimit/vim63/html/insert.html#ins-completion
[5] P.S. You may want to mention in the completion-ui documentation at
the top of the file that
http://www.emacswiki.org/cgi-bin/wiki/CompletionUI#toc2 has examples
of how to use completion-ui with dabbrev and etags. If I knew that
info, it would have saved me time. :-)
--
Jason Spiro: computer consulting with a smile.
I provide software development and training services to clients worldwide.
Contact me for a FREE consultation. Satisfaction guaranteed.
+1 (416) 781-5938 / Email: info@jspiro.com / MSN: jasonspiro@hotmail.com
next reply other threads:[~2007-04-12 23:16 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-04-12 23:16 Jason Spiro [this message]
[not found] ` <c241693f0704121619i14d16188j2cdb3e5c6baf6860@mail.gmail.com>
2007-04-13 8:00 ` Fwd: completion-ui.el question: my vimpulse-show-completion-menu function always gives me an empty menu Toby Cubitt
2007-04-13 8:31 ` Jason Spiro
2007-04-13 8:50 ` Toby Cubitt
-- strict thread matches above, loose matches on Subject: below --
2007-03-13 8:50 Jason Spiro
2007-03-14 4:36 ` Toby Cubitt
2007-03-14 18:24 ` Jason Spiro
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.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=c241693f0704121616t49497adfo70f12ffd8f2f3185@mail.gmail.com \
--to=jasonspiro4@gmail.com \
--cc=brad.beveridge@gmail.com \
--cc=help-gnu-emacs@gnu.org \
--cc=laynor@gmail.com \
--cc=t.s.cubitt.98-dated-1174279006.800fd7@cantab.net \
/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.
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).