发现 corfu 有一定概率(跟打字速度和 corfu 的 timer 间隔有关)会把补全项直接输出到 buffer,而不是弹出菜单。
但这个现象只存在于的 corfu + elpl 组合,其他如 corfu + eshell/python-shell/ielm… 等都没有这个问题,而 company + elpl 也正常。
打了一些 debug 信息,发现出问题的时候,似乎 completion-at-point
动作并没有执行完,不知道那一堆候选项是哪来的,是哪个函数把它插入到 prompt 后面的?整个交互过程戛然而止:
正常情况下是 completion-at-point
是可以执行完的:
搜了一下 corfu 的 issues 列表,没发现有其他人报告类似问题。
测试的最小配置:
;; ---------------------------------------------------------------------------
;; elpa
(require 'seq)
(setq user-emacs-directory
(car (seq-filter
#'file-exists-p
(list (format "~/.emacs.d/%s/" emacs-version)
(format "~/.emacs.d/%s/" emacs-major-version)
"~/.emacs.d/"))))
(setq package-user-dir (concat user-emacs-directory "elpa/"))
(package-initialize)
;; ---------------------------------------------------------------------------
;; config
(add-to-list 'initial-frame-alist '(fullscreen . maximized))
(add-to-list 'default-frame-alist '(fullscreen . fullheight))
(add-to-list 'load-path "~/.repos/emacs-elpl")
(require 'elpl)
(add-to-list 'load-path "~/repos/emacs-corfu")
(require 'corfu)
(setq corfu-auto t)
(global-corfu-mode)
(unless (display-graphic-p)
(add-to-list 'load-path "~/repos/emacs-corfu-terminal")
(require 'corfu-terminal)
(corfu-terminal-mode +1))
(run-with-timer 0.1 nil
(lambda ()
(elpl)
(view-echo-area-messages)))