Snails超级快的模糊搜索框架

(require 'subr)

emacs 27.2 没这个函数

emacs/NEWS at master · emacs-mirror/emacs (github.com)

按照这个方式hack了一下,不报错了,但是也不能正常工作,输入搜索关键词后,没有反应。

找不到这个subr包,好像包名发生变化了

我的emacs版本是27.1

不要编译 这个包编译之后用不了

我用下面这两种方法都可以,你试试第二种。

这两种方法都不行的话,那应该是你编译了snails的原因了。解决方法:手动删除snails的elc文件,或者load-path到snails的本地仓库。

总结一下snails白屏的解决办法

错误及解决办法:

1、Symbol’s function definition is void: string-replace :emacs27没有subr包

提供两种解决办法:

2、nothing selected:snails被编译了

把snails的elc文件删掉。推荐重新安装:按照snails readme安装。若是用了use-package及straight可以用:build (:not compile)防止安装时编译snails。抄了多位大佬的作业,贴一下简单的配置:(:hook (window-setup . snails)可以把snails当dashboard用)

;; Setup snails
(use-package snails
  :straight (snails :type git :host github :repo "manateelazycat/snails" :build (:not compile))
  :if (display-graphic-p)
  :hook (window-setup . snails)
  :bind ("M-SPC" . snails)
  :custom-face
  (snails-content-buffer-face ((t (:background "#111" :height 110))))
  (snails-input-buffer-face ((t (:background "#222" :foreground "gold" :height 110))))
  (snails-header-line-face ((t (:inherit font-lock-function-name-face :underline t :height 1.1))))
  :config
  (when (version< emacs-version "28.0")
    (with-eval-after-load "snails"
       (fset 'string-replace 'replace-regexp-in-string)))) ;; Fix up "Symbol’s function definition is void: string-replace"

最好加个版本判断

这个建议好。不过我不懂elisp,加这条(unless (version< emacs-version "27.1")不知道行不行,C-x C-e没报错 :joy:麻烦你帮我看看。

另外,我一上午都搞不定macos的磁盘搜索功能。想请教一下:如图,mdfind正常工作,snails配置应该也没啥问题,我怕straight影响snails调用后端,我还直接指定了load-path。customize-group:snails可以看到“?”后端是默认加了mdfind的。我也试了试

这个配置,都无法在snails里使用mdfind。

我没用过 macos,snails 现在也没使用了。

另外版本判断应该是小于28,怎么写可以 参考这里

好的好的,谢谢。已经改为小于28.

根据 How to replace focus-out-hook with after-focus-change-function in emacs 27?这一行代码改成这个样子好像可以解决。我已经解决了这个问题了,不知道你方便不方便,可以测试一下。

diff --git a/snails-core.el b/snails-core.el
index e45ea9c..ccac285 100644
--- a/snails-core.el
+++ b/snails-core.el
@@ -810,7 +810,7 @@ or set it with any string you want."
 
       ;; Focus out to hide snails frame on Mac.
       (when (featurep 'cocoa)
-        (add-hook 'after-focus-change-function 'snails-quit)))
+        (add-function :after after-focus-change-function (lambda () (unless (frame-focus-state) (snails-quit))))))
 
     ;; Show popup frame.
     ;; `select-frame-set-input-focus' is necessary for gnome-shell DE.
1 个赞

可能是因为我现在用的 emacs-mac,所以没法复现这个问题 :joy: 重新下载 emacs-plus 又要编译等好长时间懒得动 :joy: (另外我已经切换到了 vertico + mini-frame) 代码看起来没毛病,谢谢!

老铁用mini-frame会有闪烁吗?

不闪啊 没什么问题

刚打开frame时背景色会不同,会闪烁一下,就是这种。 用ivy-posframe就没这问题,或者说不明显,这个看起来很难受。

下面动图是在Linux下,使用版本28.0.50.

emacs

支持分享 点赞

@manateelazycat 大佬,报个bug。我在用snails的rg backend,报错

setq: Symbol’s function definition is void: second

Emacs 27的时候已经obsolete了,我用的是Emacs29。

github提个issue吧