ミニバッファに”Sorting declarations … done.”のメッセージが出て困る(Emacs)
haskellファイルを開いて作業していると、ミニバッファに
Sorting declarations in applicative.hs ... done.
というメッセージがずっと表示されるようになった。
(applicative.hsというのは、そのとき開いていたファイル)
DDSKKの漢字変換の一覧がミニバッファに表示されても、すぐこの “Sorting…” で
上書きされて見えなくなる。
この原因は、結論からいうと、anything-config.el にあったのだが、
その原因を突き止めた経過をメモしておく。
(1) このメッセージを出力しているのは、どのファイルか?
このメッセージを出力しているファイルを、次のようにして調べた。
$ cd ~/.emacs.d
$ grep -nwr ./ -e 'Sorting declarations'
すると、次のファイルがヒットした。
~/.emacs.d/elpa/haskell-mode-17.2/haskell-decl-scan.el
このファイルの 583行目と607行目である。
;; Declaration scanning via 'imenu'.
;;;###autoload
(defun haskell-ds-create-imenu-index ()
"Function for finding `imenu' declarations in Haskell mode.
Finds all declarations (classes, variables, imports, instances and
datatypes) in a Haskell file for the `imenu' package."
;; Each list has elements of the form `(INDEX-NAME . INDEX-POSITION)'.
;; These lists are nested using `(INDEX-TITLE . INDEX-ALIST)'.
... (省略) ...
;; Now sort all the lists, label them, and place them in one list.
(message "Sorting declarations in %s..." bufname)
... (省略) ...
(message "Sorting declarations in %s...done" bufname)
これは何をしているのかというと、
“Haskellソースを解析して、宣言(declaration)の位置や構造を調べている”
ということらしい。(chatGPT先生の言葉)
そして、”Haskell Mode が Imenu用の目次(索引)を作っている途中に、
その進捗メッセージを表示している”(chatGPT)のである。
そして、これが何回も繰り返されていて、”Sorting”の文字が常に表示されている
ということなのである。
(2) imenu-auto-rescan変数を調べる
haskellファイル(ここでは applicative.hs)を開いた状態で、次のコマンドを
実行した。
M-x describe-variable RET imenu-auto-rescan RET
次のような結果だった。
imenu-auto-rescan is a variable defined in ‘imenu.el’.
Its value is t
Original value was nil
Non-nil means Imenu should always rescan the buffers.
You can customize this variable.
このメッセージによると、imenu-auto-rescan のデフォルト値は nil であるが、
現在は t である。
だから、Imenuはバッファを自動的に再スキャンしているのである。
(3) imenu-auto-rescan を nil にしてみた
ここで試しに imenu-auto-rescan を nil にしてみた。
M-x set-variable RET imenu-auto-rescan RET nil RET
すると、DDSKKの変換候補漢字一覧がミニバッファに表示された。
(4) imenu-auto-rescan を t にしているのは、どのファイルか?
.emacs.d ディレクトリの中を調べてみた。
$ grep -nr 'imenu-auto-rescan' ~/.emacs.d
./elpa/lsp-ui-20230811.552/lsp-ui-imenu.el:281:
(let ((imenu-auto-rescan t))
./elisp/anything-20170125.1710/anything-config.el:6985:
(setq imenu-auto-rescan t)
(5) 原因は anything-config.el だった
これで原因がわかったのだが、anything-config.el の設定を変更するのは避けた。
かわりに、init.el の最後に
(setq imenu-auto-rescan nil)
と書くことにした。これでうまくいった。
カテゴリー: Emacs, Haskell, memo
タグ: Anything, Imenu, imenu-auto-scan, Sorting declarations
カウント: 22
My開発メモ