Emacs 有没有可能实现像 Neovide 那样的果冻光标 ?

环境:

  • macOS: Sonoma 14.4.1 23E224 arm64
  • Xcode: 15.4 (15F31d)
  • swift-driver version: 1.90.11.1 Apple Swift version 5.10 (swiftlang-5.10.0.13 clang-1500.3.9.4) Target: arm64-apple-macosx14.0
  • Swift Package Manager: Swift 5.10.0-dev
  • Chip: Apple M2
  • Emacs: GNU Emacs 29.2 (build 1, aarch64-apple-darwin23.0.0, NS appkit-2487.00 Version 14.0 (Build 23A344)) of 2024-03-15

其中 Swift 和 swift-package-manager 的安装遵循 Swift document 的指示; Emacs 是由 emacs-plus 安装而来

Emacs -Q 效果: cursor_animation

  • 感觉 cursor 不是很跟手
  • 会报错: mac-plugin-set-shadow-opacity: Wrong type argument: floatp, 1
  • 使用的时候是窗口模式,没有全屏

报错的问题可以将(mac-plugin-set-shadow-opacity 1)改成(mac-plugin-set-shadow-opacity 1.0)。

然后位置的问题感觉可能和title-bar高度有关,emacs29好像也是默认没有title-bar的,但是看你gif上是有的,可以先试下将上面问题修改后使用全部配置,我这边也会去适配下title-bar高度问题。

报错问题解决了

参考 GitHub - d12frosted/homebrew-emacs-plus: Emacs Plus formulae for the Homebrew package manager 关闭 title-bar 之后, cursor animation 与 cursor 位置不同步的问题还是依旧

我这边再看下如何修复位置问题。

你可以先自己手动修改仓库里EmacsMacPluginModule类里的

       let fixedY = realY + model.height + model.height / 2 

这段代码,可以增加

       let fixedY = realY + model.height + model.height / 2 + 30

这种先手动调整符合你cursor的位置,然后重新编译先用着。

试了一下,确实够邪道,power-mode 这种抖动真是开了脑洞了

power-mode 用 holo-layer 这种架构做, 应该可以做到粒子效果又不影响性能。

1 个赞

我修改了下位置的逻辑,使用emacs -q后发现确实对不上,然后M-x运行ns-toggle-toolbar后就好了,应该是toolbar会影响布局。

后面代码中试了下减去tool-bar的默认高度发现还是会有一点偏差,所以感觉还是关掉toolbar最好。

可以尝试更新到最新代码,重新编译后使用全部配置看看效果,主要需要关闭toolbar。

1 个赞

确实感觉GUI相关的效果还是丢给外部实现比较好,emacs自带的图形相关的API太不给力了,就连圆角都不好实现。

然后写了下外部实现感觉就是坐标计算和换算比较蛋疼,还有调试起来比较麻烦,但是写UI确实简单多了。