corfuの設定2024

Emacsにおける補完入力パッケージcorfuの設定を少し修正した.

corfu-prescientを以前使っていたが、使うのをやめた.試行錯誤の最中だが,hotfuzzを使い始めた.

(global-corfu-mode 1)
(corfu-popupinfo-mode +1) ;; 補完候補に対して補助ドキュメントをポップアップ表示

(setq corfu-auto t) ;; Enable auto completion
(setq corfu-cycle t) ;; Enable cycling for `corfu-next/previous'
(setq corfu-quit-at-boundary 'separator)  ;; seperatorで指定された文字でquitする
(setq corfu-quit-no-match t)  ;; query が match しないとき即終了
(setq corfu-preselect 'valid) ;; 補完途中で候補の一番上のものが事前選択された状態になる

;; 補完入力の先頭に移動できる→入力内容の修正時に便利
(defun corfu-beginning-of-prompt ()
  "Move to beginning of completion input."
  (interactive)
  (corfu--goto -1)
  (goto-char (car completion-in-region--data)))

;; 補完入力の末尾に移動できる→入力内容の修正時に便利
(defun corfu-end-of-prompt ()
  "Move to end of completion input."
  (interactive)
  (corfu--goto -1)
  (goto-char (cadr completion-in-region--data)))

(define-key corfu-map [remap move-beginning-of-line] #'corfu-beginning-of-prompt)
(define-key corfu-map [remap move-end-of-line] #'corfu-end-of-prompt)

;; verticoをoffにしているときでも、ミニバッファ上で補完を有効にする
;; M-: (eval-expression) や M-! (shell-command) を使うときに便利
(defun corfu-enable-always-in-minibuffer ()
  "Enable Corfu in the minibuffer if Vertico/Mct are not active."
  (unless (or (bound-and-true-p mct--active)
              (bound-and-true-p vertico--input))
    ;; (setq-local corfu-auto nil) ;; Enable/disable auto completion
    (setq-local corfu-echo-delay nil ;; Disable automatic echo and popup
                corfu-popupinfo-delay nil)
    (corfu-mode 1)))
(add-hook 'minibuffer-setup-hook #'corfu-enable-always-in-minibuffer 1)