Emacs 31 を入れてみた
Emacs 31 が出たようなので更新してみました。
その時に困ったことのメモ。lexical-binding
多分最初に目にするのが上のスクショのような lexical-binding の警告。
画面の指示に従えば各ファイルに -*- lexical-binding: t; -*- などが挿入される。
NEWS には (set-default-toplevel-value 'lexical-binding t) も紹介されているが副作用が出る場合がありそうで怖いな…
各ファイルにクッキーを仕込むのは美しくない気がするけど公式の elisp にも殆どこれが入っているのでまぁそういうものだと思いましょう。
Tree-sitter
treesit-enabled-modes で対応しているモードでは自動的に有効になる。
treesit-auto-install-grammar はデフォではインストールするか問い合わせるモードになっているみたい。
が、インストールしようとすると No such file or directory cc って言われた。
そういえば Git for Windows の POSIX 系ツールは入れてるけど開発環境は入れてなかったな…
昔は pre-build の dll があったけど Emacs 本体に組み込まれて (tree-sitter から treesit に変わって?) からは事情が違うらしい。
ChatGPT さんのおすすめは MSYS2 UCRT64 GCC を入れる事。Git for Windows と競合しそうで怖いな…
てか、昔の (多分 tree-sitter 時代の) 設定が残ってる気がする… 消さないとかな?
MSYS2
MSYS の公式のインストーラで UCRT64 も入る。
Windows Terminal は自動では追加してくれないみたいだから https://www.msys2.org/docs/terminals/ 参照。json 直書きじゃなく GUI からでも同じように追加すれば OK。gcc と toolchain 等をインストールしておいた。
pacman -S mingw-w64-ucrt-x86_64-gcc
pacman -S base-devel mingw-w64-ucrt-x86_64-toolchain
Git for Windows とごっちゃにならないようにパスは通さずに emacs 側で
(add-to-list 'exec-path "C:/msys64/ucrt64/bin") (setenv "PATH" (concat "C:/msys64/ucrt64/bin;" (getenv "PATH")))してみた。
Tree-sitter grammar for `json' is missing; install it? (y or n) yサクッとインストールされました。
Cloning repository
Compiling library
Library installed to c:/Users/***/.emacs.d/tree-sitter/libtree-sitter-json.dll
rgrep の挙動が変わった?
なんか rgrep の引数の仕様が変わった(?)ようで自作の grep コマンドが動かなくなって困る。
ChatGPT さんと相談して rgrep でなく grep-find を使う方法で回避したけど調べている時に ripgrep なるものの存在を知る。なんか10倍ぐらい早いらしい。10年ぐらい前からあるコマンドなんですね。知らなかった…
早速使ってみました。直近に検索した文字列を再帰的に grep するならこんな感じ
(defun xgrep (query) "grep last-search word recursively" (interactive (list (read-from-minibuffer "grep for: " (if (bound-and-true-p search-ring) (car search-ring) "") nil nil 'grep-history))) (when (and query (not (string-empty-p query))) (let* ((coding-system-for-read 'utf-8) (coding-system-for-write 'utf-8) (escaped-query (shell-quote-argument query)) (cmd (format "rg --vimgrep --smart-case -g \"!#*#\" -g \"!*~\" -g \"!.#*\" -- %s ." escaped-query))) (compilation-start cmd 'grep-mode))))
ちなみに grep バッファで e を押すと wgrep みたいにその場で編集できるようになってる。
system-taskbar-mode
Windows のタスクバーのアイコンにプログレスバーとか表示できるらしいけど効いてるのかな… 様子見。
そういえば runemacs をタスクバーにピン留めすると Emacs が別アイコンになって重ならないの Win7AppId で対応してたんだけどもっとスマートな方法無いの?って各種生成AIに聞いてみたら「できらぁ!」って言いはるけどどれもうまくいかず… 結局また
Win7AppId Emacs.lnk GNU.Emacs
しました。
とりあえずここまで。
最近あまりコード書いてないので他に 面白いこと 困ったこと があれば追記します。

