开发者

emacs: x-popup-menu max size constraints?

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 completi开发者_JAVA百科on. The first cycles through all the potential matches. The second presents a popup menu of the matches. It works for types:

emacs: x-popup-menu max size constraints?

And also for local and instance variables:

emacs: x-popup-menu max size constraints?

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.


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 :-)


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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜