emacs:x-popup-menu最大大小限制?

时间:2010-05-04 02:10:44

标签: emacs

我正在为C#开发智能感知或代码完成功能。

到目前为止,这么好。现在我已基本完成工作了。有两种方法可以请求完成。第一个循环通过所有潜在的匹配。第二个是比赛的弹出菜单。它适用于类型:

alt text http://i44.tinypic.com/afbl2o.jpg

还有本地变量和实例变量:

alt text http://i40.tinypic.com/2pqul2u.jpg

我正面临着x-popup-menu的两个问题:

  1. 当选项数量很大时,弹出菜单可以扩展以消耗所有可用的屏幕空间。从字面上看,它可以消耗整个屏幕,并遮盖其他所有内容,包括整个emacs窗口和其他所有窗口。 愚蠢的是,它是可滚动的。首先它扩展以消耗所有可用空间,然后它也变得可滚动。似乎它有意义扩展到某一点,然后变得可滚动,而不是扩展以占用所有可用空间。 有没有办法可以限制x-popup-menu的最大大小?
  2. 要指定弹出菜单的位置,我传入一个位置,x-popup-menu将其用作菜单顶行的* middle *,而不是左边。为什么中间?谁知道。 这意味着,如果我指定(40。60)菜单的位置,并且菜单恰好是100像素宽,菜单将延伸到emacs窗口的左边框之外。您可以在上面的第二张图片中看到这一点。 如果我在指定位置之前知道弹出窗口的宽度,我可以补偿。但我没有。 有解决方法吗?有没有办法让x-popup-menu占据LEFT而不是中间位置?

  3. 附录:x-popup-menu的文档

      

    x-popup-menu是“C源代码”中的内置函数。   (x-popup-menu POSITION MENU)

         

    弹出一副卡片菜单并返回用户的选择。   PO SITION是一个位置规范。这是一个鼠标按钮   事件或列表((XOFFSET YOFFSET)WINDOW)其中XOFFSET和YOFFSET   是从WINDOW框架的左上角开始的像素位置   (WINDOW可以是框架对象而不是窗口)。 这可以控制   第一行窗口中第一行中心的位置   菜单,而不是整个菜单的左上角。如果POSITION为t,则为   表示使用当前鼠标位置。

2 个答案:

答案 0 :(得分:4)

有些人喜欢Emacs,因为它没有提供弹出窗口(参见例如this blog entry)。呈现可能的完成列表的更“狡猾”的方式是将它们显示在拆分缓冲区中。这样你就可以自动避免上述所有问题(屏幕空间和滚动),并可能吸引更多顽固的Emacs用户。

但那是纯粹的推测: - )

答案 1 :(得分:3)

您可以将自动完成后端基于companyautocomplete,以便为您处理建议。