我还没有试 snails,但是 tiling wm 应该都可以设定一些规则让某些窗口是浮动的,你要不试试(
花了5分钟写了一个 rg 全文搜索后端:
i3wm 可以设置 float window,不知道 sway 是不是支持,下面对 Helm 的 frame 是适用的:
for_window [class="Emacs" title="Helm"] floating enable
和朋友在聊 Snails 的设计思路,分享一下聊天记录:
snails-core.el 是框架主代码,主框架监听 Input buffer 的输入,输入变化时,重新生成一个 input ticker 分给后端去搜索干活
后端控制候选词的搜索和匹配,后端完成的时候,返回 input ticker 给主框架,不管后端干活多么给力,一旦 Input ticker 过期了(就是干活的时候用户输入变化了)主框架就把后端的结果抛弃掉
如果 input ticker 没有过期,主框架就调用 snails-update-callback 来渲染后端返回的候选词
如果是异步子进程的话,Input ticker过期会直接导致子进程被杀掉
整个模糊匹配和高亮其实都是在每个 snails-backend-*.el 文件中自己控制的,主框架只负责监听输入事件、调用后端、管理后端的返回值,主框架啥核心的活都不干。
简单来说,就是每次输入的时候框架分配一个新的 ticker , 后端们自己去搜索,得到结果的时候看看自己的 ticker 是不是最新的,最新的就能用,不是最新的就丢掉。
如果 ticker 都更新了,后端还没有干完活,会被框架直接杀掉。
每次输入变化,都会导致启动子进程,但是很多时候敲入过程的字符没必要搜索,所以就用 run-with-idle-timer 0.1 在指头一松的时候去让后端去干活
这个框架的目的就是,只监听输入事件变化,同时给不同的后端分配任务,至于怎么搜索,怎么过滤,框架完全不管。
框架只管定义宏让后端的代码尽量的少。
即使你不用emacs,EXWM只做窗口管理也很不错啊
社区大牛花了5分钟写了一个 bookmark 插件: add bookmark backend by pengpengxp · Pull Request #6 · manateelazycat/snails · GitHub
是不是你的窗口管理器有啥自动变大的设置?
默认弹出窗口只有Emacs窗口的一半大小。
写了一篇Snails技术架构的文章,欢迎大家看完后来贡献插件 !
https://manateelazycat.github.io/emacs/2019/07/23/snails-framework.html
我没有动过窗口管理器吧,白天在公司里用win10的emacs27也同样是这个效果
你看看在Linux上或者Mac上能够重现吗?
我这边主要用Mac,没有win10的环境。
上面的截图就是我个人lubuntu系统的重现。
稍等,我去读一读你的源代码看看我这的问题是咋回事
没有GUI的我只能眼馋了
我的terminal下直接segment fault 了
terminal 不支持 make-frame 啊
今天更新了很多补丁,除了更高级的模糊搜索、关键字匹配以外,该有的功能都有了。 性能也相对于前天的第一版本有了很多优化。
大家有问题可以继续反馈,现在我已经用 snails 完全替换 helm 了。
(add-to-list 'default-frame-alist '(fullscreen . maximized)) 是不是你的配置中有这句话,注释掉就可以了
咱个人还没在用,主要是因为在终端里也用 Emacs 不过咱想说一些需求,或许可以考虑一下:
- 有时单纯的一个 candidate-do 还不能满足需求。比方说如果用来搜索 company 的补全结果,可能会想要用一个快捷键查看某选项的文档;再比如文本之后可能想要做替换,不知您使用 helm 时是否有类似的需求?是否打算在 Snails 中实现呢(或者有替代方案?)
- helm 有类似这种的 multi-editing 方案,ivy 也有替代方案,Snails 是否有可能也把搜索到的结果放到一个 buffer 里,并提供浏览 + 编辑的功能呢?
其实换句话就是我看着 Snails 现在的功能很单纯(当然单纯也是美的 ),想知道您之后想朝一个什么方向发展它呢?
懒猫为什么没有采用 child frame 呢?make frame 感觉代价还是高很多啊