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"で消せる。