Emacs 缓冲区切换动画、光标处粒子爆炸、鼠标点击波纹、彩虹文本、窗口地震,闪电括号匹配特效

图一乐搞着玩的,也许没啥用

使用:克隆仓库后运行 build.sh 然后

(add-to-list 'load-path "/Users/keke/Code/Github/animation.el")

(require 'particle-cursor)
(particle-cursor-mode 1)

(require 'neon-text)
(neon-text-mode 1)

(require 'ripple-click)
(ripple-click-mode 1)

(require 'buffer-transition)
(buffer-transition-mode 1)
(setq buffer-transition-type 1)

(require 'window-shake)
(window-shake-mode 1)

(require 'bracket-lightning)
(bracket-lightning-mode 1)

edit: 新添加了鼠标点击特效

edit: 新加了个文本彩虹效果

edit: 好像帖子里面插入较大的图片会让我浏览器变卡,所以把效果图都删了,去GitHub看吧

edit: 添加了个打字地震(窗口随机摇晃)效果

edit: 添加了两个括号之间显示闪电的效果,需要 show-paren-mode

edit: 又添加了一堆东西,不想再 edit 了,效果图全部放在 GitHub

13 个赞

超酷的!貌似只能mac下用是嘛

1 个赞

keke 又回来玩 emacs 了吗,真是口嫌体正直啊 :face_savoring_food:

3 个赞

测试了一下,炫酷是真的炫酷。

可惜我日常可能用不太上。

粒子效果很好看,但是稍微有一点遮挡,感觉不太适合长时间打字。

切换 buffer 的动画,如果用了 consult-buffer 或者 vertico-buffer-mode ,buffer 切换简直头晕。 :rofl: :rofl:

但是大佬的动画效果确实nice,因此 ai 问了一下,常见的动画有哪些,大佬看看有没有能够实现的:

1) Jump/Teleport 动画(跳转路径可视化)这个 RnE 大佬实现了。

  • 场景:avy/consult-line/isearch 选中后光标瞬移。
  • 动画:光标从旧位置“飞”到新位置(短弧线/直线),或者沿途留下淡淡的 trail。
  • 价值:让你不迷路,知道自己跳到哪里了。

2) Ripple/波纹点击(鼠标点击/光标落点)

  • 场景:鼠标点某处、或者 C-a/C-e 这种大跨度移动。
  • 动画:落点扩散一圈波纹,0.15–0.25s 消失。
  • 价值:录屏特别清晰;平时也能降低“我点到哪了”的焦虑。

3) 段落/语句高亮“呼吸”(Pulse)

  • 场景:执行重排、格式化、undo/redoyankcomment-line 后。
  • 动画:目标区域从高亮渐隐到正常(或反过来),类似 “pulse”。
  • 价值:非常实用、侵入性低。

4) Insert/Delete 粒子尘(Subtle)

  • 场景:输入/删除字符、批量删除词/行。
  • 动画:字符碎成小尘埃散开/聚合(强度可调,默认很克制)。
  • 价值:观感爽,但要控制频率(只对大操作触发,别每键触发)。

5) 选区“液态边缘”(Selection goo)

  • 场景:拖拽选区、矩形选择、expand-region。
  • 动画:选区边界带轻微弹性/粘连效果,像橡皮泥拉伸。
  • 价值:提升“选区是活的”的感知;适合演示。

6) 缩进指南/结构线条的“流动”

  • 场景:indent guides、scope line(当前代码块)。
  • 动画:当前 scope 的线条轻微流动/渐变,或随光标切换带过渡。
  • 价值:帮助你把注意力放在当前结构层级。

7) Diagnostics/错误提示“震动 + 归位”

  • 场景:保存触发 LSP/编译错误,光标在错误行。
  • 动画:错误处轻微抖动(2–3px)+ 红色波纹,不要太多次。
  • 价值:比纯红线更“强提醒”,但不要让人烦。

8) 搜索命中“逐个点亮”(Search sweep)

  • 场景:isearch/consult-ripgrep 预览。
  • 动画:命中项按出现顺序依次点亮/渐隐,或当前命中强高亮、其他弱高亮过渡。
  • 价值:更容易建立“分布感”。

9) 分屏过渡(Pane slide/fade)

  • 场景:pop-to-buffer。
  • 动画:窗口内容轻微淡入/滑入 0.12s。
  • 风险:重绘多,Emacs 上要谨慎;但做“轻淡入”通常可接受。
1 个赞

我现在深刻地感觉到,emacs社区的活力,在我们这里

刚实现了鼠标点击的特效

output

4 个赞

支持发 reddit 震撼这帮老白男一把。

2 个赞

怎么用啊?我执行了 build.sh 之后没反应。

没反应,应该就是build 成功了。生成 dylib 文件就行。

帅气。

(setq particle-cursor-input-keys '(" "))

(setq particle-cursor-commands
      '(newline delete-char delete-backward-char backward-delete-char-untabify puni-backward-delete-char meow-change delete-word-backward rime--return rime-send-keybinding))

(defun particle-on-type ()
  (when (or (memq this-command particle-cursor-commands)
            (and (equal this-command #'self-insert-command)
                 (member (this-command-keys) particle-cursor-input-keys)))
    (animation)))

降低粒子爆炸的频率,使用起来感觉比较舒适。只在空格,回车,删除等操作时出现,既好看,又不至于影响打字。

2 个赞

试了下,ripple-click-mode 似乎鼠标移出frame再移回来就失效了。

这些特效在合适的场景下合理用应该挺有用的

我使用 neon-text-mode 会卡死emacs,其余没有问题。

看了一下,走马灯是通过遍历 buffer 里所有 character 然后通过 overlay 附上颜色的

用 CoreAnimation 实现的只有荧光效果

做了一个屏幕故障的特效

使用:

运行 build.sh 和 compile-metal.sh

compile-metal.sh 用于编译着色器,如果失败,可以下载预编译的着色器放到项目目录 Release test · kekeimiku/animation.el · GitHub

配置文件添加

(add-to-list 'load-path "/Users/keke/Code/Github/animation.el/")
(require 'glitch-effect)
(glitch-effect-mode 1)

预览:

1 个赞

大佬,麻烦看一下 pull request,我添加了一个新效果。

PixPin_2026-01-08_22-13-52

3 个赞

效果超绝, zsbd

请问 Emacs-Plus 的 glow-text 没有效果,有其他坛友遇到吗?(其他几个特效,倒是有能用的)

原来是有些需要编译着色器(compile-metal.sh),编译了就好了 :rofl:

试了下 glow-text 确实是独特的体验!但是和想象中不太一样 :laughing:

其实我一直很羡慕 VScode 主题 SynthWave '84 的霓虹灯光:

感觉不仅仅是漂亮,而且可以提供更多的信息(比如霓虹的关键字高亮),请问坛友,这个特性,有可能被本帖的机制实现吗? :squinting_face_with_tongue:

备注:

  • (1)、大概看了下代码,感觉当前 glow-text 的原理,是把一系列“当前画面在X、Y偏移一点点距离后的图层”,叠加起来实现的,所以最终的效果是“字体边界”会有点
  • (2)、VScode 的霓虹灯光效果,其字体边界依旧是锐利的,但是周围有光晕;
  • (3)、如果能够仅仅把(1)中的图层,替代画面的背景(即非字体的部分),那么或许就能实现(2)的效果;
  • (4)、有一些 在 emacs ns 上糊了一个毛玻璃背景 这样的 patch,可以使 Emacs 的背景变透明或毛玻璃,而完全不影响字体,不知道有没有借鉴意义,以实现(3)。

可以实现,其实现在这个是从 ghostty-shaders/bloom.glsl at main · 0xhckr/ghostty-shaders · GitHub 抄的效果。其实一开始确实想弄 glow 的效果但是搞成 bloom 了,名字也没有改 :grin:

1 个赞