Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

emacs: x-popup-menu max size constraints?

Tags:

emacs

I'm working on an intellisense or code-completion capability for C#.

So far, so good. Right now I have basic completion working. There are 2 ways to request completion. The first cycles through all the potential matches. The second presents a popup menu of the matches. It works for types:

alt text

And also for local and instance variables:

alt text

I'm confronting two problems with x-popup-menu:

  1. the popup menu can expand to consume all available screen space, when the number of choices is large. Literally it can consume the entire screen, and obscure everything else, including the entire emacs window and every other window. The silly thing is, it's scrollable. First it expands to consume all available space, then it also becomes scrollable. Seems like it would make sense for it to expand to a certain point, and then become scrollable, rather than expanding to take all available space. Is there a way I can limit the maximum size of x-popup-menu?
  2. To specify the position of the popup menu, I pass in a position, and x-popup-menu uses that as the *middle*, not the left, of the top line of the menu. Why middle? who knows. What this means is, if I specify (40 . 60) for the location of the menu, and the menu happens to be 100 pixels wide, the menu will extend beyond the left border of the emacs window. You can see this in the 2nd image above. If I knew how wide the popup would be before specifying the position, I could compensate. But I don't. Is there a workaround? Is there a way to get x-popup-menu to take its position as the LEFT rather than the middle?

Addendum: Doc for x-popup-menu

x-popup-menu is a built-in function in `C source code'. (x-popup-menu POSITION MENU)

Pop up a deck-of-cards menu and return user's selection. PO SITION is a position specification. This is either a mouse button event or a list ((XOFFSET YOFFSET) WINDOW) where XOFFSET and YOFFSET are positions in pixels from the top left corner of WINDOW's frame (WINDOW may be a frame object instead of a window). This controls the position of the center of the first line in the first pane of the menu, not the top left of the menu as a whole. If POSITION is t, it means to use the current mouse position.

like image 252
Cheeso Avatar asked May 04 '10 02:05

Cheeso


2 Answers

Some people like Emacs because it doesn't provide popup windows (see e.g. this blog entry). The more "emacsy" way of presenting your list of possible completions is to show them in a split buffer. That way you would automatically avoid all of the above issues (screen real estate & scrolling) and would probably attract more of the die-hard Emacs users.

But that's pure speculation :-)

like image 63
Thomas Avatar answered Nov 04 '22 17:11

Thomas


You can base your autocompletion backend on company or autocomplete where display of suggestions is handled for you.

like image 3
Marko Avatar answered Nov 04 '22 17:11

Marko