Table of Contents
1 2020-09-18
日記を続けられない。 githubにHPを移動した。
1.1 emacs の leaf.el を入門したい
1.1.1 背景
emacs では leaf.el で init.el を書くのが流行りらしいとの記事をいくつかみたが、 非エンジニアにとって設定方法などがサッパリ分からないというtweetをしたところ、 作者の方から初心者用の記事を書きますね、的なことを言っていただいたので、期待していた。
しかし、debian strech の emacs は 25.1 のまま上ってなかったし、 buster でも 26.1 だったので、以下の部分で、そっ閉じした(また、読んでもよくわからなかった)。
まずEmacs-26.3をどうにかしてインストールします。もしEmacs-22とかいう化石を使っている場合はすぐEmacs-26.3に移行してください。(自戒) leaf.elは24.4から動きますが、とても便利なleaf-convert.elはEmacs-26.1を要求します。 Emacs-26.1とEmacs-26.2はELPAからのダウンロードに問題があります。結局Emacs-26.3を使うしか選択肢がありません。
時は流れ、strech から buster へのupgrade移行を行うも失敗。 debian/linux 疲れも感じていたので、この際だからと ubuntu 20.04.1 LTS へ移行した。 emacs のバージョンは26.3。
ちょうどその時に、追加で以下の記事が出る。
C-x C-s とかから書いてあるので、これならいけるだろう、とタカをくくり leaf の設定方法を勉強したいと思った。
1.1.2 分からない
しかし、しかし、2020年代のEmacs入門 を見てもleafのことがサッパリ分からない。 本当に自分の頭の悪さに悲しくなる。 とりあえず、何が分からないか、を記載しておく。 もしかしたら、万が一、奇跡的に、後から自分が頭がよくなるかもしれない。 天変地位感あるけど。
とりあえず、以下の文まではオマジナイだと思った(init.elは分からない)
leafによる設定は ;; ここにいっぱい設定を書く の場所に書き、Emacsを再起動することで反映で きます。
1.1.2.1 cus-edit.c の説明
leafの :custom で設定するとinit.elにcustomが勝手に設定を追記します。 この状況になると、 変数の二重管理になってしまうので、customがinit.elに追記しないように設定します。
- ":custom" というのは何か
- ":custom で設定する"というのは何を設定するのか
- "customが勝手に設定を追記"のcustomとは何か
- "customが勝手に設定を追記"の"勝手に"というのはどういう時か…勝手に動くの?AI?
- "変数の二重管理になってしまう"難の変数か
1.1.2.2 cus-start.c
EmacsのC言語部分で定義されている変数をcustomで扱えるようにまとめているファイルです。 私 の設定を書いておくので、取捨選択して頂ければと思います。変数の説明は F1 v で確認できま す。 無効にしているGUI要素についてはコメントアウトしておきました。
- "EmacsのC言語部分で定義されている"って何…何か内部のコード的なもの?(Emacsの一部はCで作られていると聞いたことがある)
- "C言語部分で定義されている変数をcustomで扱えるようにまとめ"ている理由は何か
- "user-mail-address"とかって登録するんだ…怖い
- "tool-bar-mode" "truncate-lines"とか見たこと/使ったことあるけど、これがC言語の部分で登録されている? elispで設定するんじゃないの?
1.1.2.3 autorevert
(leaf autorevert :doc "revert buffers when files on disk change" :tag "builtin" :custom ((auto-revert-interval . 0.3) (auto-revert-check-vc-info . t)) :global-minor-mode global-auto-revert-mode) Emacsの外でファイルが書き変わったときに自動的に読み直すマイナーモードです。 もちろん、 Emacsで編集している場合は外の変更で上書きされることはありません。
- これはよく使うけど、:doc、:tag とかなんなの…
1.1.2.4 cc-mode,
- なんかたくさん設定方法が書いてあるけど、それぞれの意味が分からない。
1.1.2.5 paren
- (show-paren-delay . 0.1) って何
1.1.2.6 simple
kill-ringの数を制御したり、kill-lineの挙動を変更したりします。
- 何がどうなるの…kill-ringはクリップボードみたいなやつだから制限あるのかな。
- kill-lineは何
1.1.2.7 以下省略
もう、ここでプシュー、パンク…読むのをやめた。
1.1.3 分かったこと
1.1.3.1 customが勝手に設定を追記
cus-edit.c の分からないことは以下に書いてありそうだった。
問題はcustomがinit.elに次のようなダンプを出力する点です。このダンプにより、leafの :custom で管理している場合、2箇所を修正する必要が生じます。 (custom-set-variables ;; custom-set-variables was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(ag-highligh-search t t) '(ag-reuse-buffers t t) '(ag-reuse-window t t) ;;... )
"ダンプ"というのがよく分からないが、これはなんか、guiか何かで"設定保存"的なものをおこなったら出てきた気がする。 自分のものにはこんなの書いてある。
(custom-set-variables ;; custom-set-variables was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(eshell-prompt-function (lambda nil (concat "[ " (format-time-string "%Y/%m/%d %H:%M") " | " (user-login-name) "@" (system-name) " ] " "[" (abbreviate-file-name (eshell/pwd)) "] " (if (= (user-uid) 0) "#" "$") " ")) t) '(eshell-prompt-regexp "^\\(\\[[^] ]+\\]\\|[$#] \\)") '(org-agenda-format-date "%Y/%m/%d (%a)") '(package-selected-packages (quote (ace-isearch yasnippet viewer twittering-mode sticky smex smartrep smartparens smart-newline save-load-path redo+ recentf-ext real-auto-save quickrun python-pep8 python-mode powershell open-junk-file mykie migemo man-commands leuven-theme key-chord jedi ido-vertical-mode id-manager htmlize helm-swoop flymake-python-pyflakes flymake-cursor expand-region elscreen column-enforce-mode bind-key avy auto-install archive-region anything ace-jump-mode))))
これが、なんらかの理由でイケナイコトのようだ。 とにかく以下がオマジナイという理解。
(leaf cus-edit :doc "tools for customizing Emacs and Lisp packages" :tag "builtin" "faces" "help" :custom `((custom-file . ,(locate-user-emacs-file "custom.el"))))
1.1.3.2 書き方について
use-package のようなものらしいとのことで、情報を漁っていたら、以下が非常に分かりやすかった。 これをleafに読み換えることで、leafの書き方の10%ぐらいは理解できそう。