Emacs 光标动画(或:果冻光标)

现在它处理 tab 这些字符的表现跟 x-stretch-cursor 是一致的,什么时候修一下

试了一下,问题解决了。多谢!

这个好帅,如果能直接入master,基本可以吸引一大批支持者,不过老顽固们不知道会不会考虑。。

patch进master就行,其他可以作为module去发布。全部合入的话估计有难度,可以建议加开关选项控制。

刚安装完 emacs-plus@31 就立刻编译 lolipop 了, 效果非常丝滑


我使用 modus-operandi 主题, 这个主题搭配 lolipop 的话, 果冻光标是黑色的-_- (类似楼上老哥的效果)

目前来看果冻光标的颜色和主题有关, 试了下深色主题, 果冻光标就相应变成浅色了

请问 lolipop 能否引入对光标颜色的设置呢? 浅色主题下的黑旋风光标确实有点…

光标动画的颜色跟光标颜色是保持一致的,这个行为是特意设计的

强烈建议你有需求的话直接更改光标的颜色,否则动画结束之后会有光标颜色的瞬变

一定要改的话在这里

1 个赞

现在获取的 w->phys_cursor_width 不保证在 get_phys_cursor_geometry 之后,没有对 x-stretch-cursor 进行处理,所以只能移到 elisp 这边处理了

至少常见情况没问题了

@kekeimiku 启发,感觉可以试着直接牛了 Emacs 里负责绘制光标的函数,性能会好一些

目前看到的逻辑是:ns_draw_window_cursor 当在 FILLED_BOX_CURSOR 时调用 draw_phys_cursor_glyph,然后是 face override 为 DRAW_CURSORdraw_glyphs,根据上下文调用一堆 ns_draw_xxx 函数

难搞的就在这里,一些 ns_draw_xxx 的函数会更改绘制的光标的尺寸信息(这也是为什么 Elisp 的接口会返回错误的值)

1 个赞

前辈,后面还会有新的版本吗? :wink:

最近看到另一个帖子:

看起来「光标动画」和「光标」的颜色不同还是有点意义的:

上面的例子,光标为橙色,光标动画为深粉色,从而给人一种「光标」的残影的感觉 ,咻咻咻~ :squinting_face_with_tongue:

不仅如此,上例的光标动画,是半透明的,并且具有较深的边框,感觉自成一格;但稍微美中不足的是,光标动画似乎是浮在原有光标上的,如果原有光标始终在最上层,可能更漂亮。

会的,先把 x-stretch-cursor 的问题解决了

然后看看怎么改光标动画,现在的有点拖泥带水

1 个赞

我感觉有点过于花哨了。不过想要的话可以自己改

1 个赞

README 更新了

正在处理一个关于窗口对象中记录的物理光标几何信息不正确的问题

Bug 状态见:https://debbugs.gnu.org/cgi/bugreport.cgi?bug=80211

我也在考虑改变这个扩展的实现方式。当前的光标动画实现存在明显的滞后问题。
一个解决方案是将动画改为基于 time-easing的方式,借助 Core Animation 提
供的机制。另一种方案是将动画改为「事件驱动」,通过 interpose Emacs 的
光标绘制函数,并使用 dyld_dynamic_interpose 注入动画逻辑
(dyld/include/mach-o/dyld_priv.h)
2 个赞

Emacs 30.2 的话最好再 apply 一下这个

1 个赞