まなbemacs

consult
consult-fd
あたりはマスト。とっととキーバインドはっつけるべき
これまでコピペ放置してたから一切使わなかったことを後悔している。

このページほぼコピペした
けどmeowは好みじゃなかったのでそこらへんの部分は省いてる
これまでもこんな感じでコピペしてきたけど上で書いたような状態になってきたので
ここで一日に一つずつパッケージについて調べて書いていきたい。

あくまでもコピペして、削減したり前使ってた設定をちょろちょろいれたりした後の暫定の状況から抽出したuse-packageの説明だけ
言語系はPHPとTypeScriptとEmacs Lispくらいしか確認してない上に
Tabnine付近の設定に今の環境だと不満があるから修正は加える予定
各use-packageの説明
- auto-package-update: パッケージを自動的に更新するためのパッケージ。
- auto-compile: Emacsの設定ファイルを自動的にコンパイルするためのパッケージ。
- files: Emacsの組み込みファイル関連機能を設定するためのパッケージ。
- saveplace: ファイルを閉じた時点のカーソル位置を記憶し、次回開いたときに復元するパッケージ。
- recentf: 最近開いたファイルを記録し、簡単にアクセスできるようにするパッケージ。
- savehist: ミニバッファの履歴を永続的に保存するパッケージ。
- paren: 対応する括弧を強調表示するパッケージ。
- elec-pair: 括弧の自動補完を行うパッケージ。
- hl-line: カーソル行をハイライト表示するパッケージ。
- autorevert: ファイルが外部で変更された場合に自動的に再読み込みするパッケージ。
- subword: キャメルケースやスネークケースの単語を分割して編集できるようにするパッケージ。
- simple: Emacsの組み込みの基本的な編集機能を設定するためのパッケージ。
- so-long: 長い行を含むファイルを編集する際のパフォーマンスを改善するパッケージ。
- flymake: リアルタイムにコードのシンタックスチェックを行うパッケージ。
- flymake-collection: flymakeを拡張し、様々なツールとの統合を提供するパッケージ。
- delsel: 選択範囲を入力で置き換えるパッケージ。
- tr-ime: Windowsでの日本語入力を設定するパッケージ。
- mozc: Linux/macOSでのMozcを使用した日本語入力を設定するパッケージ。
- fontaine: フォントの設定を管理するパッケージ。
- nerd-icons: アイコンフォントを表示するためのパッケージ。
- nerd-icons-completion: 補完リストにアイコンを表示するパッケージ。
- nerd-icons-dired: Diredにアイコンを表示するパッケージ。
- nerd-icons-corfu: Corfuの補完リストにアイコンを表示するパッケージ。
- nyan-mode: ステータスバーにNyanCatを表示するパッケージ。
- minions: マイナーモードのリストを最小限に抑えて表示するパッケージ。
- corfu: 補完機能を提供するパッケージ。
- corfu-popupinfo: ポップアップ形式の補完情報を表示するパッケージ。
- tabnine: AIによるコード補完を提供するパッケージ。
- cape: 補完機能を拡張し、複数のバックエンドを統合するパッケージ。
- vertico: 補完リストをポップアップで表示するパッケージ。
- vertico-repeat: Vertico用のリピート機能を提供するパッケージ。
- vertico-directory: Vertico用のディレクトリ移動機能を提供するパッケージ。
- vertico-buffer: Vertico用のバッファ切り替え機能を提供するパッケージ。
- vertico-truncate: Verticoの補完候補を省略表示するパッケージ。
- orderless: Orderlessスタイルの補完を提供するパッケージ。
- prescient: 補完候補の適切性を予測して並べ替えるパッケージ。
- vertico-prescient: Verticoとprescientを統合するパッケージ。
- corfu-prescient: Corfuとprescientを統合するパッケージ。
- flx: あいまい検索を提供するパッケージ。
- consult: 様々な検索機能を提供するパッケージ。
- marginalia: 補完候補の詳細情報を表示するパッケージ。
- embark: 補完候補に対するアクションを提供するパッケージ。
- embark-consult: EmbarkとConsultを統合するパッケージ。
- tempel: スニペット機能を提供するパッケージ。
- tempel-collection: Tempelのスニペットコレクションを提供するパッケージ。
- magit: Gitインターフェイスを提供するパッケージ。
- diff-hl: バージョン管理システムの変更を視覚的に表示するパッケージ。
- difftastic: 高度な差分表示ツールとの統合を提供するパッケージ。
- which-key: キーバインドのヘルプを表示するパッケージ。
- undo-fu: アンドゥ/リドゥ機能を改善するパッケージ。
- undo-fu-session: アンドゥ/リドゥのセッション管理を提供するパッケージ。
- vundo: アンドゥ/リドゥをツリー形式で視覚化するパッケージ。
- rg: ripgrepを使用した高速な検索を提供するパッケージ。
- apheleia: コードフォーマッターを統合するパッケージ。
- ef-themes: Emacsのテーマを提供するパッケージ。
- restart-emacs: Emacsを再起動するための機能を提供するパッケージ。
- expreg: 正規表現のヘルパー関数を提供するパッケージ。
- puni: Unicodeの特殊文字を入力するためのパッケージ。
- treesit-auto: tree-sitterを使用した自動設定を提供するパッケージ。
- string-inflection: 文字列の変換機能を提供するパッケージ。
- go-translate: 翻訳機能を提供するパッケージ。
- avy: キーボードから素早くテキストへ移動するためのパッケージ。
- ace-window: ウィンドウを素早く切り替えるためのパッケージ。
- migemo: ローマ字検索を可能にするパッケージ。
- lin: 行番号を表示するパッケージ。
- pulsar: 特定の領域をハイライト表示するためのパッケージ。
- goggles: テキストの変更をリアルタイムに強調表示するパッケージ。
- spacious-padding: バッファの余白を設定するパッケージ。
- beframe: フレームごとのバッファ管理を提供するパッケージ。
- aggressive-indent: コードの自動インデントを行うパッケージ。
- perfect-margin: 右マージンを自動的に調整するパッケージ。
- dashboard: Emacsの起動画面をカスタマイズするパッケージ。
- page-break-lines: ページ区切り記号を表示するパッケージ。
- breadcrumb: バッファ内の移動履歴を表示するパッケージ。
- rainbow-delimiters: 対応する括弧を色分けして表示するパッケージ。
- imenu-list: imenuの一覧を表示するパッケージ。
- eglot: Language Server Protocolをサポートするパッケージ。
- eglot-tempel: EglotとTempelを統合するパッケージ。
- consult-eglot: EglotとConsultを統合するパッケージ。
- jsonrpc: JSON-RPCをサポートするパッケージ。
- eglot-booster: Eglotの起動を高速化するパッケージ。
- eglot-x: Eglotの拡張機能を提供するパッケージ。
- eldoc-box: ElDocの表示をポップアップ形式にするパッケージ。
- eglot-signature-eldoc-talkative: Eglotのシグネチャ情報をElDocで表示するパッケージ。
- highlight-defined: 定義済みのシンボルをハイライト表示するパッケージ。
- highlight-quoted: 引用された式をハイライト表示するパッケージ。
- typescript-mode: TypeScriptの編集モードを提供するパッケージ。
- jtsx: JSX/TSXの編集機能を提供するパッケージ。
- emmet-mode: Emmetスタイルの省略記法を提供するパッケージ。
- web-beautify: Webコードのフォーマッターを提供するパッケージ。
- rust-mode: Rustの編集モードを提供するパッケージ。
- cargo: Rustのビルドシステムとパッケージマネージャを統合するパッケージ。
- pyvenv: Pythonの仮想環境を管理するパッケージ。
- slime: Common Lispの統合開発環境を提供するパッケージ。
- slime-company: SlimeとCompanyを統合するパッケージ。
- sql-indent: SQLのインデントを改善するパッケージ。
- sqlformat: SQLのフォーマッターを提供するパッケージ。
ここから利用頻度の高く、多機能なパッケージを調べていく
なお、説明は生成AIでつけた

corfu
verticoと同じ作者のパッケージ。
corfuはverticoのさらに範囲を絞ったものみたいなこと書いてた。
You may also want to look into my Corfu package, which provides a minimal completion system for completion-in-region in a child frame popup. Corfu is a narrowly focused package and developed in the same spirit as Vertico. You can even use Corfu in the minibuffer.
引用: https://github.com/minad/vertico/blob/main/README.org#completion-at-point-and-completion-in-region
だから
vertico: 別バッファを開いた上でそこに描画していくパッケージ
corfu: 画面内のミニバッファに描画していくパッケージ
こいつらにデータを渡すためのつなぎみたいなパッケージや関数は別途用意しろよっていつものパターンのパッケージか。
Corfu is the minimalistic in-buffer completion counterpart of the Vertico minibuffer UI.
引用: https://github.com/minad/corfu
とのことなので一応Verticoで完結することもできる?
でも同じ作者がわざわざ別にパッケージ書いてるってことは、そういうことなのかもしれない。

vundo
undo-treeみたいなやつか
キーバインド割り当ててないけど、まだいいか。

tempel
yasnippetみたいなツールかな。私はこういったものたちを
コピペ最適化ツールと呼んでいる。
GithubにはTempoといういにしへ?のテンプレートライブラリの構文を使用するテンプレートツールらしい。
Githubでは公開されていなかった。
ちなみにコピペした中に
というパッケージが存在するが、こちらはスタータデッキみたいなやつみたいだ。
さらにちなむとこのパッケージを作られたお方はvertico,corfuを作られたお方なので
例によって連携がしやすくなっている。
Githubのキーバインド通りに設定しているので
- M-*でスニペットの挿入
- M-+でスニペットの登録
となっている

ace-jump
昨日入れた。
キーバインドはまだ迷ってる。
頭痛がひどいので後日調整し、まとめたものをこちらに書きたい。
キャラクタ、ワード、ラインごとにデフォルトだとa-z,A-Zの順番にアルファベットを割り振ってくれて、
割り振られたアルファベットをタイプするとそこにカーソルが移動する機能を提供してくれる。
https://github.com/winterTTr/ace-jump-mode/wiki/AceJump-FAQ
なお、アルファベットが気に食わないならこちらのページのように己の手で変更可能。

go-translate
翻訳したい文字列を選択して
M-x gts-do-translate
で翻訳結果バッファがでてくる。
(setq gts-translate-list '(("en" "zh") ("fr" "en")))
みたいにペアを設定しておく。
私は英語から日本語に変換できればいいので
(setq gts-translate-list '(("en" "ja") ("ja" "en")))

日本語と英語それぞれ渡してみたけど
ちゃんと認識しているのか、それぞれ変換方向はしっかりと判別していた。

auto-package-update
Emacs パッケージを定期的に自動的に更新する機能を提供する。
(use-package auto-package-update
:config
(setq auto-package-update-interval 7)
(auto-package-update-maybe))
上記はコピペした設定をさらにインターバルを伸ばした。
毎日はきつい。
裏でやっといてくれーってときは
まずM-x package-refresh-contentsを実行してパッケージ内容を更新して、
次にauto-package-update-now-asyncを使用してパッケージを更新するのがベストプラクティスらしい。
ただ、更新後のバイトコンパイルが走るとどうしてもブロッキングが起きてしまうこともあるらしい。

ほとんどれどめの内容しか書けないから嫌だったけど
まあいいか

Windows11でEmacsを動かすことにした。

markdown入力くそ遅い問題
(use-package cape
:hook (((prog-mode
text-mode
conf-mode
eglot-managed-mode) . my/set-super-capf))
:config
(defun my/set-super-capf (&optional arg)
(setq-local completion-at-point-functions
(list (cape-capf-properties
(cape-capf-super
(cape-capf-noninterruptible
(cape-capf-buster
(if arg
arg
(car completion-at-point-functions))))
#'tempel-complete
;; #'tabnine-completion-at-point
#'cape-dabbrev
#'cape-file)
:sort t)))))
原因はtabnine-completion-at-pointだった。
Windows11は今のところMarkdown書いたりするくらいしか運用してないから、とりあえず全消しした。

(内容を分離)
diredのアイコンが正しく表示されていなかったので
nerd-icons-install-fontsでインストールしたフォントはWindows側に入ってないみたいだったので手動でインストールした。

Emacsもっと使いたい。LazyVimじゃ満足できない

WSLからEmacsを呼べるようにした。
こちらの対応を行った。export DISPLAY=$(ip route | awk '/^default/{print $3; exit}'):0.0
export LIBGL_ALWAYS_INDIRECT=1
ここらへんで劇的に改善した。

sourceForgeの方で紹介されてること多いけど私はこっちからインストールした

突然Emacsで日本語入力(skk,ddskk)が利用できなくなった。
雑環境情報: Windows11, WSL(ArchLinux),emacs最新(30.1?emacs-gitの最新)
怪しい行動一覧
いつものパッケージアップグレード
ArchLinuxの宿命
Emacs入れ直し
とある事情により不安定な最新で動かしていたので、安定した最新に入れ直した。
$ paru -Rns emacs-git
$ paru -Sy emacs
emacs-gitを削除 -> emacsをインストール
Rns削除で余計に消してしまったかも。迂闊。
対応策
skkは犠牲になったのだ。
ArchLinuxだったら既存のfcitx-*とコンフリったり入力できなくなったりでやらなかったけど今回
基本的な日本語入力はWindows側でやるからいっそ
emacs-mozcを入れてみた。
$ paru -Sy emacs-mozc
これがクソ長い。寝る前に実施したらあまりにも長すぎてYOHUKASHIした。
(use-package mozc
:ensure t
:config
(setq default-input-method "japanese-mozc")
(setq mozc-candidate-style 'overlay))
無事動作した。こっちの方が入力楽でいいね。

perfect-margin
(use-package perfect-margin
:config
(setq perfect-margin-ignore-filters nil)
(perfect-margin-mode -1)
(define-key global-map (kbd "C-c p m") 'perfect-margin-mode)
)
golden-ratioや複数Bufferと相性がかなり悪かったので初期ではオフにして、ショートカットで切り替えるように修正。