Snails超级快的模糊搜索框架

懒猫大大,请问使用前缀!进行搜索项目文件内容时,没有回显,但是使用#搜索当前buffer是有回显的,您能指点一下吗?我鼓捣了一下午,还是没头绪。(配置就是上图的,没有变)

多敲几个字符试试呢?

试过了,还是出不来。。。很奇怪,从trace-function中看得到,敲四个字符之后就已经调用rg执行搜索了(上面的截图),但是就是没有回显 :joy: 我鼓捣快一天了 :rofl:

可以发一个目录压缩包和重新步骤到github issue

今天配置了doom emacs + snails,不能用,有点问题?

  • package.el
    (package! snails :recipe (:host github :repo “manateelazycat/snails”))
  • config.el
    (use-package! snails)

M-x snails
提示如下错误 snails-search: Symbol’s function definition is void: string-replacesnails-search: Symbol’s function definition is void: string-replace


是不是还需要其他配置?

(with-eval-after-load "snails"                                                                                                                                                                                                          
  (fset 'string-replace 'replace-regexp-in-string))

先这样hack一下吧,我也遇到了。你可以到github提个issue?

(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) 代码看起来没毛病,谢谢!