欢迎试用 blink-search

你一个buffer都没有的时候, Emacs 没法执行 (split-window) 啊, 你随便打开一个文件就可以分屏了。

比如我打开一个文件:

然后开启 blink-search:

但是我关了 posframe,如下图,还挺正常的:

突然发现,在 mac 的 GUI 模式下就是 OK 的,我怀疑是 posframe 的问题。 好难受,我90%的时间都在终端下用 emacs

你终端模式下就分屏就可以了,终端模式下就不要追求悬浮窗口了。

确实,不开 posframe 也很不错了

读了一下 straight 的文档,研究了一下怎么用 straight 包管理器来安装 blink-search 这种代码结构比较复杂的插件 (主要时需要调用 python 文件,所以py和el文件的相对位置不能乱)

这样算是安装成功了

(straight-use-package
 '(blink-search
   :host github
   :repo "manateelazycat/blink-search"
   :files ("./*.el" "./*.py" ("core" . "core") ("backend" . "backend") 
                                   ("icons" . "icons")
)))

(use-package! blink-search
  :commands (blink-search)
  :init
  (setq blink-search-browser-function
        (if (display-graphic-p)
            #'xwidget-webkit-browse-url
          #'eww)))

1 个赞

谢谢分析,我原以为 icons 目录是无关的,就没加上以致于不显示结果 doom emacs 加上就可以了:

(package! blink-search :recipe (:host github :repo "manateelazycat/blink-search" :files ("*.el" "*.py" "core" "backend" "icons")))

1 个赞

说实话 straight是真的难用。他那个文档是非常典型的啰嗦又没用的典范了。文档写了那么长一大串的东西,有用的内容非常少。他主要是写的示例太少了,导致说了半天也不知道具体咋用。

但是我有字节编译和native 编译的强迫症,不用包管理器,使用git 子模块的方式管理包要自己手动编译字节码以及手动生成autoloads file,并且源代码一变动都要再来一次这个操作,太难受了。

用borg呀

不需要吧,straight 也有编译。

他的文档确实,有效信息太少了,直接看代码实现比较好。

我一直觉得Elisp 的现状(执行性能差、 没有JIT), 编译不编译的性能差距都感知不到, 很快的代码编译后察觉不到, 本身就很慢的代码, 编译后也提升不明显, 包括 native-comp.

而且编译成 elc 以后, 配置无法跨平台, 包括Linux 下编译好的elc文件的配置无法直接在macOS 上使用, 跨平台还要各种清理 elc, 或者每个平台单独编译一遍。

我个人观点(个别喷子勿回), 用Emacs完全不要编译 elc, 第一每次编译麻烦, 第二编译中有一些看着很傻的 warning (让你手动改代码顺序,要不编译器编译不过等), 简直就是浪费生命。

是的,我现在是直接设置了 no-byte-compile

所以,我从来不编译任何文件,第一跨平台方便,第二缺失性能直接用外部RPC弥补,第三包管理git submodule最舒服。

emacs本身的插件机制只和load-path有关,git天生擅长干这个事情,现在的这些包管理器没加一个macro合语法糖都是增添定制emacs的限制。

包管理器本是只是通过宏来让配置文件看着优雅,封装无数细节,想精细化管理或者配置文件排错时各种麻烦,再加了所谓的layer,就培养了一堆emacs伸手党,稍微报错就不知道怎么办了。

好奇怪,我想搜索当前 project 下的所有内容,这个 project 是如何定义的呢。我用 # 开头搜索当前 buffer 是 OK 的,但是 ! 开头就不行了。

! 不行的意思是,搜出来是空白的

公司电脑上默认浏览器是 Chrome,所以在公司电脑上摸鱼的时候我会用 Edge,而不是 Chrome。今天研究了一下,写了一段小代码,自行加入对 Edge 的支持 :smile:

跑完下面的代码之后只需要 (setq blink-search-browser-function 'browse-url-macosx-edge-browser) 即可以利用 blink-search 打开 Edge 来搜索。

2 个赞

好吧,我在 mac 上试了,Mac ok,但是 terminal 不 ok

git来判定project的

1 个赞
Traceback (most recent call last):
  File "/Users/duanning/.emacs.d/site-lisp/blink-search/blink_search.py", line 142, in message_dispatcher
    self.message_handler(message)
  File "/Users/duanning/.emacs.d/site-lisp/blink-search/blink_search.py", line 156, in message_handler
    candidate_counter = sum(list(map(lambda backend_name:
  File "/Users/duanning/.emacs.d/site-lisp/blink-search/blink_search.py", line 157, in <lambda>
    len(self.search_dict[backend_name]) if backend_name in self.search_dict else 0,
TypeError: object of type 'NoneType' has no len()

MacOS M1, emacs-version 28.2.

emacs -Q 仅加载blink-searh。第一次调用blink-search,可以看到有候选项出现,再次调用就一片空白,打开 blink-searh 显示上面的错误。

@manateelazycat 大佬看看是什么问题?

再更新到最新版看看, 昨天晚上增加了一个当backend变少时动态增加 candidates 的显示数量的功能, 估计代码没有写的很健壮。

在进入 blink-search 时有个 hook, 我是这样 弄的, 达到目的了

;; 这样 进入了 插入模式
(add-hook 'blink-search-mode-hook
          'xah-fly-insert-mode-activate)

现在想, 当退出 blink-search-mode 时, 有退出的 hook 吗? 源码看不懂? 前面的也是 蒙的

;; 这样 退到 命令模式
(add-hook 'xxx-xxxx-xxxxx
          'xah-fly-command-mode-activate)