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

5
我正在为C#开发智能感知或代码自动完成功能。
目前为止,一切都很顺利。现在我已经实现了基本的自动完成功能。有两种方式可以请求自动完成。第一种是循环遍历所有可能匹配项。第二种是显示匹配项的弹出菜单。它适用于类型:

alt text

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

alt text

我在使用x-popup-menu时遇到了两个问题:

  1. 当选项数量较多时,弹出菜单可以扩展以占用所有可用屏幕空间。实际上,它可以占据整个屏幕并遮盖其他所有内容,包括整个emacs窗口和其他每个窗口。有趣的是,它是可滚动的。首先,它会扩展以占用所有可用空间,然后还会变成可滚动的。似乎让它扩展到一定程度,然后再变成可滚动的会更有意义,而不是扩展以占用所有可用空间。我能限制x-popup-menu的最大尺寸吗?
  2. 为了指定弹出菜单的位置,我传入一个位置,然后x-popup-menu将其用作菜单顶部第一行的*中心*,而不是左侧。为什么是中心呢?谁知道呢。这意味着,如果我为菜单的位置指定(40 . 60),并且菜单恰好宽100像素,那么菜单将超出emacs窗口的左边框。你可以在上面的第二张图片中看到这一点。如果我在指定位置之前知道弹出窗口的宽度,我就可以进行补偿。但我不知道。有没有解决方法?有没有办法让x-popup-menu将其位置作为左侧而不是中心?

附录:x-popup-menu文档

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

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


请参见:http://meta.stackexchange.com/questions/79406/bounty-awarded-incorrectly - user1228
2个回答

4
有些人喜欢Emacs,因为它不会提供弹出窗口(例如,请参见这篇博客文章)。更“emacsy”的方式是在一个分割的缓冲区中显示可能完成的列表。这样你就可以自动避免所有上述问题(屏幕房地产和滚动),并且可能会吸引更多死忠的Emacs用户。

但这只是纯粹的猜测 :-)


3
你可以基于公司自动完成构建自动完成后端,其中建议的显示已经为你处理。

1
看起来自动完成中的弹出功能将会很有用,无论我是否使用自动完成来生成选项。 - Cheeso

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接