解决windows下consult-find无效的问题

问题的起因似乎是MSYS2和CYGWIN里面星号*需要转义,consult-find没有考虑这一情况,需要设置 "MSYS=noglob" "CYGWIN=noglob" 这两个环境变量关掉转义。

另外由于windows命令行自带了一个同名的find.exe,需要修改consult-find-args,将find加上绝对路径

(defun consult-find+ (&optional dir initial)
    "Same as `consult-find', and bind noglob environment variable for Cygwin and MSYS."
    (interactive "P")
    (let ((process-environment (cons "MSYS=noglob" (cons "CYGWIN=noglob" process-environment))))
      (let* ((prompt-dir (consult--directory-prompt "Find" dir))
             (default-directory (cdr prompt-dir)))
        (find-file (consult--find (car prompt-dir) #'consult--find-builder initial)))))

(advice-add 'consult-find :override #'consult-find+)

consult-ripgrep

我是参考这里的 Windows: Process arguments must be manually escaped and encoded · Issue #317 · minad/consult · GitHub

(let ((w32-quote-process-args ?\\) ;; or (w32-quote-process-args ?*)
                                           )
                                       (call-interactively 'consult-find))

没有用msys2和cygwin环境,用的是git里的find。

1 个赞

可以使用find-file-in-project,提供了更多的功能,会自动找cygwin或者msys2下的find,不需要额外设置。 基于emacs api completing-read,可以和任何选择框架配合。