Lenic
1
在 27.2 版本,我发现可以开启 Emacs 的列高亮功能了,我的做法是引入了下面两个源文件:
然后通过下面的配置开启列高亮:
;; 高亮当前列
(add-to-list 'load-path "~/.emacs.d/config/highlight-column")
(require 'col-highlight)
(column-highlight-mode 1)
(set-face-attribute 'col-highlight nil :inherit 'hl-line :background)
在使用上是不存在卡顿问题的,而且通过最后一行的配置,也能够保证列的高亮背景色值和行的高亮背景色值始终是相同的。
我的问题
通过以上的设置,正常使用是没有问题的。但是不知道什么原因,这样开启列高亮以后,和 company
的提示有点儿冲突,虽然不影响使用,但是看起来有点儿别扭:
另外的一个问题就是和 ace-jump
有冲突,同样是错位的问题:
和 company
只是提示的第一行有问题不同,ace-jump
是空行才会出现错位,我相信是都是层级原因导致的,但奈何 Lisp 水平有限,在此求助大家帮帮忙,看能否通过简单的方式解决这个问题?这样,就不用羡慕对面 Vim 原生自带的流畅列高亮了……
这是 emacs 已知的问题,你可以试试 company-posframe
Emacs 直到最近才有了 child frame,此前都只能用 overlay 模拟补全菜单,这玩意极其容易受到干扰。
似乎核心开发的大佬们都不重视这项功能,当 x-popup-dialog
& x-popup-menu
完成之后这么多年就没有再进一步了。这些接口依然只能用来显示对话框和固定菜单。
从吃瓜的角度看,稍微改一改拿来显示补全菜单不是很容易嘛。还真不是,我之前试了一下,要从底层实现补全菜单太费劲了, 大佬们当初就没这方面的规划。也许最近的 child frame 就是考虑到改历史代码不如重新实现,希望 child frame 以后能支持终端,变成通用的菜单接口,把旧的 menu.c
废掉。
child frame 最初引入好像也不是为了搞弹出菜单,我感觉可能是大牛觉得 frame 应该可以嵌套,所以就搞了一个 child frame,我是以八卦之心来考虑这件事
早期 yasnippet
好像就用这个弹的,就是不知道为什么后来就不用了,我刚刚在优酷上还是哪里找到一张截图,。
要不考虑一下物理扩展? 比如,在显示器80列的地方吊一根铅锤线。。。。
1 个赞
Lenic
8
我觉得什么时候 Mac 能解决掉用 child frame 不再出现空白黑屏了,就完美了
child frame 的动机属于我的臆测。
不过用浮动的 child frame 来显示对话框/补全菜单,的确是不同于 x-popu-*
的另一种思路,就像 helm
(虽然性能堪忧) 也是用一个显示在底部窗口的 buffer 来展示补全项。
下图是我之前改造 x-popu-*
的一些尝试:
这种方式实现补全菜单,底层必须管理菜单的动态变化,处理用户输入等等。
如果是 child frame 实现补全菜单,则由用户来管理 child frame 的内容,因为它本身就是一个功能完备的 frame,所以更具可「玩」性,例如可以在里面渲染 markdown/org。而 x-popup-*
菜单长什么样基本在底层写死了。
child-frame 支持终端的可能性有多大? 我对emacs底层不了解,没概念
菜单没那么复杂,任意gtk/qt窗口做鼠标焦点处理和键盘焦点获取。
x11协议了解,菜单实现太简单了