用 posframe 作为 tooltip 显示查词结果效果不错,但是怎样才能进一步美化呢?
比如我想让所查的词“face”显示不一样的颜色,这个应该怎么做呢?我试了 propertize,但是没有效果。
(concat (propertize word 'font-lock-face '(:foreground "#dc752f"))
(s-trim-right res))
@tumashu 想要一个快速的方法,所以没有深入看 posframe 的源码,抱歉
1 个赞
'font-lock-face -> 'face 'some-face 试试?
进一步美化可以设置一个固定宽度高度防止大小变来变去
加上internal-border
作为visual padding
能不能给点例子,你说的我都不太了解。另外比较好奇的是,posframe 和另外的 pos-tip tooltip 等相比有什么优点呢?为什么又造一个轮子?
改成 (concat (propertize word 'face 'bold) (s-trim-right res))
试试? 按说posframe不会影响你的fontification
posframe用的是child-frame,是一个独立的frame,所以不会干扰原来frame里的内容
其他那些都是临时替换一下buffer里的内容来假扮出一个popup window的感觉 所以如果你原来buffer里有个图片或者是非等宽字体,其他那些popup的显示就会受到影响
关于internal-border 参照manual里关于frame parameter的说明吧
修改parameter可以用这个
2 个赞
你是不是在posframe调用的时候,设置了背景颜色和前景颜色了?
posframe速度比postip快多了,另外postip已经无人维护,并且进不了elpa
1 个赞
他用的是我写的 sdcv.el , sdcv.el 调用 posframe 的时候设置了前景和背景颜色。
正确的方法应该是不用设置前景色,然后 sdcv 输出的 string 内容在传递给 posframe 之前用 regexp 和 propertize 设置一下标题、内容以及音标的颜色。
美化的进一步建议:可以增加 padding 参数,这样可以让 posframe 里面的文字不用顶满四周的边框, 距离产生美
1 个赞
比 emacs 自带的 x-show-tooltip 快很多,而且不会有显示太快以后,手指一动就消失的bug.
X11 默认的 tooltip 启动就会有延时。
1 个赞
你可以看看我上面的回复,在 sdcv.el 里面搜索一下 posframe-show 的代码,把字符串做正则表达式搜索以后,然后把正则中匹配 group 的地方做颜色处理,处理完以后再传递给 posframe ,应该就可以了。
欢迎贡献补丁。
et2010
12
怎样设置 fringe 的颜色呢?设了 fringe 宽度以后,颜色没法改成背景色,和其它 frame 的颜色一样,搞得 tooltip 好像被推走了:
fringle的颜色有主题控制,posframe不管,想加pad, 可以在显示的string行收尾加空格,company就是这么搞
1 个赞
对了,emacswiki上的包都挪到其他地方吧,比如 github gitlab, 不然melpa无法引入,时间长了,容易荒废
你可以参照yasdcv的方式,将输出的结果wash成org或者md,这样可能更好搞
et2010
18
还有一个问题,移动光标然后就删除 posframe 的标准做法是什么? 采用 sdcv.el 中的做法时,如果有选中区域,tooltip 会闪退。
一般是用post hook调用posframe-hide
et2010
20
post-command-hook?那出现闪退怎么办?