除了emacs里的imenu recentf等能用,emacs外的rg rga fd fasd mdfind全不能用。哪位大佬帮忙抢救一下 macos big sur 11.5.1 emacs-mac 27
例如mdfind,shell下面没问题,snails里用不了。其他的rg rga fd fasd全用brew install安装好了。
配置如下:
;; init-interface.el -*- lexical-binding: t -*-
;; Setup environment variables.
(use-package exec-path-from-shell
:init
(setq exec-path-from-shell-variables '("PATH" "MANPATH"))
(setq exec-path-from-shell-arguments '("-l"))
(exec-path-from-shell-initialize))
;; Add fuzz match algorithm to snails.
(use-package fuz
:straight (fuz :type git :host github :repo "rustify-emacs/fuz.el" :build nil)
:load-path (lambda () (expand-file-name "straight/repos/fuz.el" user-emacs-directory))
;:hook (after-init . fuz) ;; Use fuz at the first time and later inhibit it.
:config
(unless (require 'fuz-core nil t)
(fuz-build-and-load-dymod)))
;; Setup snails.
(use-package snails
:straight (snails :type git :host github :repo "manateelazycat/snails" :build (:not compile))
;:load-path (lambda () (expand-file-name "straight/repos/snails" user-emacs-directory))
: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" ;; Fix up "Symbol’s function definition
(fset 'string-replace 'replace-regexp-in-string))) ;; is void: string-replace"
;(setq snails-show-with-frame nil)
;(setq snails-default-show-prefix-tips nil))
(require 'snails-backend-mdfind)
(setq snails-prefix-backends
'(
("?" '(snails-backend-mdfind))
))
(setq snails-default-backends
'(
snails-backend-rg
snails-backend-fd
snails-backend-fasd
snails-backend-imenu
snails-backend-buffer
snails-backend-mdfind
snails-backend-recentf
snails-backend-command
snails-backend-bookmark
snails-backend-search-pdf
snails-backend-current-buffer
)))
(provide 'init-interface)
20210907更新解决方法:
1、确保emacs带有cocoa,emacs安装的时候可选,我装的是emacs-plus 27 默认安装cocoa。
2、设置好环境变量:
(use-package exec-path-from-shell
:init
(setq exec-path-from-shell-variables '("PATH" "PYTHONPATH"))
(setq exec-path-from-shell-arguments '("-l"))
(exec-path-from-shell-initialize))
2、这里多了单引号,等待作者 @manateelazycat 修复:snails/snails-backend-mdfind.el at f0d3527588f95bfaa87189da08f0ec27444253e4 · manateelazycat/snails · GitHub
Weiss
2021 年9 月 4 日 08:51
2
跑跑 (executable-find "rg")
这类命令,能找到吗?
我的后端配置就是参考你的 你的代码很整洁啊,看着舒服。终端里$ XX --version
都ok。(executable-find "rg")
也都能找到,rg rga fd fasd都在/usr/local/bin/里,mdfind在/usr/bin/里。
有个情况是这样的:(require 'snails-backend-mdfind)
没报错,但是M-x找不到snails-backend-mdfind
,不知道是不是没有require到这些后端。一定要require这些后端吗?readme里的(snails '(snails-backen-XXX)
这么简洁的设置又是什么情况呢?
是不是还要配置一下rg.el
呢?我都没安装rg fd等emacs扩展包。
像这样最简单的配置都不能调用mdfind,真的不知道是哪里出问题了。
Weiss
2021 年9 月 4 日 18:19
6
(defun weiss-test ()
"DOCSTRING"
(interactive)
(snails '(snails-backend-org-roam-all)))
需要用这样的方式才能跑你想要的 backend
, 否则普通的 snails
跑的是 snails-default-backends
设置了三个后端mdfind buffer command,然后M-x weiss-test RET
弹出的检索框也只有buffer和command的结果,mdfind依旧不用了……
很可能是环境变量的问题了。用了 @seagle0128 的配置的:
(use-package exec-path-from-shell
:init
(setq exec-path-from-shell-variables '("PATH" "MANPATH"))
(setq exec-path-from-shell-arguments '("-l"))
(exec-path-from-shell-initialize))
直接C-x C-e的结果显示:Warning: exec-path-from-shell execution took 6022ms. See the README for tips on reducing this.
((“PATH” . “/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/opt/openjdk/bin:/usr/local/Caskroom/miniconda/base/bin:/usr/local/Caskroom/miniconda/base/condabin”))
不知道这结果是不是成功了。
另外,我shell用的是zsh,还用miniconda设置了虚拟环境,不知道有没有影响。
Weiss
2021 年9 月 5 日 07:40
8
你测试时候就别开那么多 backends 了啊,一个一个测。
有些 backend 需要输入一定量的字符后才会工作的,你是不是输得太少了。
至于测试外部命令,可以像下面这么测试,snails
就是用这个得到结果的
(make-process
:name ""
:buffer (current-buffer)
:command (list "rg" "--no-heading" "--column" "--color" "never" "--max-columns" "300" "--smart-case" "搜索的字符串" "路径"))
对,应该要控制单一变量,一个一个调试。下图是snails-backend-mdfind.el的代码块,看着是输入3个字符就能工作。我尝试检索的是放在Downloads文件夹里的loki剧集,在终端里是可以用mdfind检索到的。
运行测试代码后得到这样的结果,不知道是不是正常工作了呢?麻烦看看,谢谢!
我把 :command (list "mdfind" "-name" "loki" "/usr/bin/")
里的"路径"去掉就可以检索出结果,开心。我还以为"路径"是指定mdfind的路径(命令(executable-find “mdfind”)得到的路径)
至此,至少可以确认exec-path-from-shell
顺利设定好环境变量了。M-x weiss-test RET
在snails检索框里还是没有结果,是不是被过滤掉了?
Weiss
2021 年9 月 5 日 15:38
12
你 build command 里返回的结果就是给 md find 的命令,似乎没有确定路径?不知道有没有影响。
你看下那个 build command 里的 featurep 是不是返回 t
对(featurep 'cocoa)
直接C-x C-e
返回nil
,那就是说这条判断不对咯?下图是我的mac信息:
我去查了一下cocoa的wiki ,发现还有同类的 Carbon 、POSIX 、X11 和Java ,对它们分别C-x C-e (feature 'carbon)
都是nil。
谷歌百度(featureq 'cocoa) nil 也没什么结果,还是要请教一下你
我直接谷歌emacs cocoa
记起安装emacs的时候有个这个–with-cocoa选项。我现在安装的是emacs-mac二进制包,用brew --cask install emacs-mac
安装的。我试试重装emacs,加上cocoa选项。以防以后折腾又遇到奇奇怪怪的问题,安装时多加了一些option: $ brew install emacs-plus@27 --without-cocoa --with-ctags --with-dbus --with-debug --with-mailutils
重新装了emacs-plus@27版本,带cocoa的,(featureq 'cocoa) 返回了t,fd可以激活。但是mdfind和rg依旧用不了。先不说rg,mdfind搜索磁盘文件是我最想要的功能 下一步应该就到排除是不是candidates的过滤和呈现的问题了吧?
Weiss
2021 年9 月 5 日 18:27
17
你试下调用 build-command 里那个 lambda 函数,看看能不能正常出结果,你 md 里的 candidate-filter 很简单,感觉没啥问题。
snails-backend-mdfind.el
后端是snails自带的,我不懂elisp~想问一下怎么调用lambda函数呢?
Weiss
2021 年9 月 6 日 16:43
19
抱歉才看到,这样就行了
(let ((f (lambda (input) (message "input: %s" input)))
(input "asdf"))
(funcall f input))
辛苦了,谢谢!调试了一下,好像也没啥问题,加(when (featurep 'cocoa)
也ok……是我不配用snails吗