Emacs 29 を入れてみた

Emacs 29 が出たので入れてみました。 (Windows用公式バイナリ)

目についた新機能

duplicate-line

みんな自作してる duplicate-line が公式に追加された。
duplicate-line の他、duplicate-dwim もあってこちらは region や rectangle も複製できる。
dwim は "Do What I Means" の略らしい。

rectangle は copy-rectangle- 系はたまに使っていたけど C-x SPC で region と rectangle が切り替えられて region 系のコマンドで rectangle も扱えるんですね。知らなかった… Emacs24 あたりで入ったみたい。

 

csharp-mode

builtin になった。パッケージ版が残っていると
Warning (emacs): csharp-mode is part of Emacs as of Emacs 29 - please delete this package.
って警告が出る。


eglot

LSP は lsp-mode を使っていたんだけど builtin になったという事で eglot に乗り換えてみた。
主に csharp-mode で試したけどパンくずリストとか reference 数とかが無くなってちょっと地味?

lsp-mode

eglot

ただ elgot モードになる時、ちょっと待たされることがある。(async処理にならない時があるのかな?)

lsp-mode だとプロジェクトルートが不明な時にどうするか聞いてくるけど eglot では Emacs が認識しているプロジェクトルートに従うので projectile などを入れておけば sln ファイルのある場所が root になるなど Emacs にある機能は Emacs に任せている感じ。

スタイルが変になる

lsp-mode でもそうなんだけど c-default-style を k&r に設定しているのにブレースの前で改行されたりする。
これは lsp の OnTypeFormatting が有効になっているからで eglot でそれを無効化するには Customize で設定するなら


の On-type formatting にチェックを入れると良い。

無効化せずに omnisharp.json で enableEditorConfigSupport を有効にして気に入る設定に変えたほうが良いのだけど設定項目が多すぎて挫折中。

{
    "RoslynExtensionsOptions": {
//        "enableAnalyzersSupport": true
    },
    "FormattingOptions": {
//        "enableEditorConfigSupport": true
    }
}

ちなみに enableAnalyzersSupport を有効にすると「メソッド名は大文字で始めろ」とかいろいろ言ってきて面白いw でも私は private メソッドは Camel 派だし、Tab と Space の混在まで警告されてちょっと五月蠅いので外している。

Emacs の設定と editorconfig を相互に変換できる機能とかないですかね? editorconfig-generate ではかなり足りない…

引数 (snippet? signatue?) が欲しい…

昔の omnisharp って引数違いもリストに出て選ぶと仮引数みたいなのも挿入されてそれを見ながら編集できたよね? C++-mode とか今でもそうだから omnisharp の仕様変更か設定の問題だと思うんだけど何でググれば良いのかさえ分からない…


関数 help がハイライトされない

「```csharp」 みたいなのが付く場合は markdown-mode を入れる。
大抵何かのパッケージが依存しているので入っていると思うけど 29 へアップグレード直後で入って無くて焦った。


tree-sitter

各言語に対応させる (treesit-install-language-grammar する) にはソースを treesit-language-source-alist に追加する。
でもクラッシュする。→ 開発環境として Cygwin にパスを通しているので公式バイナリと相性が悪かったみたい?
MSYSのコンソールから起動すればコンパイルできた。できた dll を .emacs.d/tree-sitter にコピーすると動いた。

fontlockがエラーを吐く

bug#62399: 30.0.50; eglot + csharp-ts-mode, query pattern かな?
改行が消えてて読みにくいけど void_keyword を predefined_type に。

company-posframe が出なくなっちゃった

何故でしょう。signature が見えないと微妙に不便ですよね…

一部のインデントが変

私は、字下げ4だけど switch の case 文だけ2文字下げ (statement-case-intro 2, case-label 2) というマイナーなインデントが好きなんだけど tree-sitter を有効にすると4文字に戻っちゃう。
csharp-ts-mode--indent-rules で上書きされるのかな? 設定方法が良く分からないので識者がお母さんみたいに分かりやすく解説してくれるまで tree-sitter モードは封印することに…

 

C++20

C++20 に対応したらしい。最近の C++ にはついて行けてないんだけどライブラリで文字列の StartsWith() とか連想配列の Contains() とか c# にあって嬉しかった機能が追加されているのは良いね。
あと宇宙船演算子 (<=>) 変な名前w 古い Fortran の IF 文(算術IF)が負、ゼロ、正の3分岐を1行で書けたのを思い出した。

 

その他

builtin された機能は package-install-upgrade-built-in を non-nil にしておけばパッケージ版が優先される。eglot なら 1.12.29 → 1.15 になる。でも tramp でよくわからんエラーになったのでそれだけ builtin バージョンに戻した。Upgrade 時に注意だ。


29に限らないけど小ネタ

  • タスクバーアイコンが重ならない
    run-emacs のショートカットを作って win7appid で Win7AppId1.1 run-emacs.lnk GNU.Emacs とかしてショートカットをタスクバーにドロップ。
  • emacsclientw.exe をコピーして code.exe にリネームして Unity の外部エディタにするとするとプロジェクトファイルを自動で生成できる。
  • IME on の状態で M-x したとき英数モードにする
    IMEパッチを当てなくても tr-ime を入れればOK


 

とりあえずこの状態で使ってみるつもりだけど editorconfig はちゃんと設定して使ってみたいなぁ…

Windows11 にすれば WSL で Emacs も GUI 付きて使えるんですかね? Meteor Lake で PC を新調するつもりだったのにデスクトップ版はでないらしい(?)ので Arrow Lake 待ちかな…

前の記事 次の記事
No Comment
コメントを追加
comment url