前回さらしてから、さらに1年。そう、3年めになる。 が、今回は一段と自信がない。
- 環境は、 Debian GNU/Linux 12 (bookworm) + emacs(29.1)。consult + company。 embark は未だに使ってない。
- 用途は、メモ と python がほとんど。
- emacs を 29.1 にした時から、package manager を elpaca に移行。
- 初期は起動に時間がかかるが、各パッケージのインストが済めば、かなり早い。
- org-mode, (python-mode(ビルトインを使うように変更), markdown-mode など、ビルトインを使わないようにするには、 先読みさせる必要がある。
- emacs 29 は、tree-sitter が ビルトインされていて、
ビルトインの方は、treesit で区別?されている。
- 未成熟?なので、まだ多くは期待できないらしい。
- hook の設定で、python-mode は、python-base-mode にする必要があった。 他の言語はどうなのだろう?
- lsp は デフォルトの eglot を使っている。
- eglot の他に、軽量だという lsp-bridge 、 lspce も試したが、 今のところデフォ。
- python では、使えてると思っている。
- lsp-mode より軽いと感じるが、lspce や lsp-bridge の方が軽快。
- sideline-mode に加えて eldoc-box を使いはじめた。いいかんじだと思う。
- flymake(flymake-ruff) をデフォにして、たまに、flymake を止めて flycheck(pylint) を動かしている。 consult-flymake、consult-flycheck で移動。
- 補完は、lsp 経由の company。 capf になるのようで、バックエンドのカスタマイズができていない。
- フォールディングは、origami だが、あいかわらず使いこなせない。
- treemacs は、たまに使う。私のレベルでは、tag jump で間に合ってるのだろう。
最近は、さらに使用時間が短かくなっている。目の隈が醜い今日このごろ。
1 treesit
(use-package treesit-auto
:config
(setq treesit-auto-install 'prompt)
(global-treesit-auto-mode)
)
(use-package treesit
:elpaca nil
:config
(setq treesit-font-lock-level 4)
)
2 eldoc、ruff(flymake)
(use-package eldoc :blackout t
:elpaca nil
:custom
(eldoc-idle-delay 0) ; idle時にdelayをかけない
)
(use-package eldoc-box :after eldoc
:config
(blackout 'eldoc-box-hover-mode "")
(blackout 'eldoc-box-help-at-point "")
)
(use-package flymake-ruff
:hook (python-ts-mode . flymake-ruff-load))
3 eglot
;;
(use-package eglot
:elpaca nil
:hook
(python-base-mode . eglot-ensure)
(sh-mode . eglot-ensure)
(markdown-mode . eglot-ensure)
(web-mode . eglot-ensure)
(mhtml-mode . eglot-ensure)
(rustic-mode . eglot-ensure)
:config
;;
(add-to-list 'eglot-server-programs '(web-mode . ("vls" "--stdio")))
(add-to-list 'eglot-server-programs '(mhtml-mode .
("~/.yarn/bin/vscode-html-language-server" "--stdio")))
(add-to-list 'eglot-server-programs '(markdown-mode . ("marksman")))
;; (add-to-list 'eglot-server-programs '(python-base-mode . ("pylsp")))
(add-to-list 'eglot-server-programs '(python-base-mode . ("jedi-language-server")))
;;
(add-to-list 'eglot-server-programs '(rustic-mode . ("rust-analyzer")))
;; どこかのコピペ
;; 表示を調整できるようだが、まったく理解できてない。
(defun /eglot-managed-mode-initialize ()
(setq
eldoc-documentation-functions
(list
#'eglot-signature-eldoc-function
#'eglot-hover-eldoc-function
#'flymake-eldoc-function
))
)
(add-hook 'eglot-managed-mode-hook #'/eglot-managed-mode-initialize)
(add-hook 'eglot-managed-mode-hook #'eldoc-box-hover-mode t)
;; (add-hook 'eglot-managed-mode-hook #'eldoc-box-help-at-point t)
)
4 Python
(use-package pyvenv
:hook
;; (python-mode . pyvenv-mode)
(python-base-mode . pyvenv-mode)
:custom (pyvenv-exec-shell "/usr/bin/zsh"))
(use-package pipenv
:hook
;; (python-mode . pipenv-mode)
(python-base-mode . pipenv-mode)
:init
(setq pipenv-with-flycheck nil)
:config
(blackout 'pipenv-mode " pip")
)
(use-package company-jedi
:hook python-base-mode
:after (:all jedi-core python-base-mode)
:config
(setq-local jedi:complete-on-dot t)
)
(use-package python-mode
:elpaca nil ;; init.el で先読みしているから。
:mode ("\\.py")
:interpreter ("python")
:config
;; (blackout 'python-mode " Py")
(blackout 'python-base-mode " PyTS")
(blackout 'python-ts-mode " PyTS")
;; (setq py-use-menu-p nil)
(setq auto-complete-mode nil)
(setq electric-indent-local-mode nil)
(flymake-mode nil)
)
(use-package py-isort
:hook python-base-mode
:after (:all python-base-mode pipenv-mode)
)
(use-package blacken
:hook python-base-mode
:after (:all python-base-mode pipenv-mode)
:custom
((blacken-line-length 84)
(blacken-skip-string-normalization t))
)
(use-package numpydoc
:hook python-base-mode
:after (:all python-base-mode pipenv-mode)
:custom
(numpydoc-insert-examples-block nil)
(numpydoc-template-long nil)
)