consult-lineのmigemo化に向けた試作

consult-lineはswiperの代替として便利に使える。これをmigemo化したいということである。
プロンプトに続いて検索したい日本語を「ローマ字読み」入力すると、それをもとにconsult-lineが走るという、単純なラッパーである。

(defun consult-line-migemo ()
  (interactive)
  (let ((input (read-string "Input: " nil)))
    (consult-line (migemo-get-pattern input))))

isearch中に発動したいならこちら。以下の設定ではisearch中に"C-:"とすると、そのクエリをmigemo化してconsult-lineが発動する。

(define-key isearch-mode-map (kbd "C-:") 'consult-line-migemo-isearch)
(defun consult-line-migemo-isearch ()
  (interactive)
  (consult-line (migemo-get-pattern isearch-string)))


通常の"C-s"でisearch-forward, "C-u C-s"でカーソル下のシンボルを初期値にしたconsult-line、"C-u C-u C-s"でconsult-line-migemoが発動する関数も書くことができる(selectrum-modeの使用を前提)。

(defun consult-line-symbol-at-point ()
  (interactive)
  (consult-line (thing-at-point 'symbol)))

(defun my-isearch-or-consult (use-consult)
  (interactive "p")
  (cond ((eq use-consult 1)
         (call-interactively 'isearch-forward))
        ((eq use-consult 4)
         (call-interactively 'consult-line-symbol-at-point))
        ((eq use-consult 16)
         (call-interactively 'consult-line-migemo))))

(global-set-key (kbd "C-s") 'my-isearch-or-consult)

もし C-u C-sでconsult-lineにデフォルト入力されたシンボルを消したい場合は、

(define-key selectrum-minibuffer-map (kbd "C-l") #'selectrum-backward-kill-sexp)

とすると"C-l"で消せる。