怎样美化 posframe

放几个目前的效果,期待大家给点建议。

改成 (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 个赞

bold 也没有用

image

你是不是在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 ,应该就可以了。

欢迎贡献补丁。 :wink:

怎样设置 fringe 的颜色呢?设了 fringe 宽度以后,颜色没法改成背景色,和其它 frame 的颜色一样,搞得 tooltip 好像被推走了:

image

fringle的颜色有主题控制,posframe不管,想加pad, 可以在显示的string行收尾加空格,company就是这么搞

1 个赞

好的,多谢指教

对了,emacswiki上的包都挪到其他地方吧,比如 github gitlab, 不然melpa无法引入,时间长了,容易荒废

你可以参照yasdcv的方式,将输出的结果wash成org或者md,这样可能更好搞

好的,我看看,多谢提醒

还有一个问题,移动光标然后就删除 posframe 的标准做法是什么? 采用 sdcv.el 中的做法时,如果有选中区域,tooltip 会闪退。

一般是用post hook调用posframe-hide

post-command-hook?那出现闪退怎么办?

比较土鳖的方法是启动一个timer监听某种变化,有变化时,隐藏posframe

不一定,具体情况具体看

不容易 debug 啊