2021年8月15日日曜日

Emacsの補完で使ってるcompany見直し2?

Debian上のemacs は 27.1 になっている。 org-mode でのメモ書きと python が主用途。

vim も、未だに併用。

前回のアップから2年。いつまでも初心者なのは残念だが、 使い続けられているのだから、と自分を褒めてあげるのだ。

package managerは、leaf.el になっているが、ivy-mode + company は変らず。 今は、 lsp 環境を追加している最中といったところ。

で、補完で使っている company の現状はというと、

company-backends を、make-local-variable でモード毎に指定するようにしたことと、 色のカスタマイズを、テーマまかせにしたこと、が変更点か。

company-backends の設定は、対象モード側で指定した方が正解なのかも、 というのが今の感想で、python の設定で苦労したような記憶が残っている。

まあ、なんとか使えているのでは、と思っているが、正解がわからん。

(leaf company :ensure t :require t
  :url "https://github.com/company-mode/company-mode"
  :doc "http://company-mode.github.io"
  :blackout t
  :hook ((text-mode-hook python-mode-hook emacs-lisp-mode-hook)
         ;; (text-mode-hook)  他は各モードの方で設定
         (plantuml-mode-hook . (lambda ()
                                 (set (make-local-variable 'company-backends)
                                      '(company-yasnippet company-dabbrev))))
         (emacs-lisp-mode-hook . (lambda ()
                                   (set (make-local-variable 'company-backends)
                                        '(company-semantic company-files company-elisp company-dabbrev-code))))
         (org-mode-hook . (lambda ()
                            (set (make-local-variable 'company-backends)
                                 '(company-ispell company-dabbrev company-yasnippet company-files))))
         )
  :bind ((company-active-map  ;; enabled during an active completion
          ("M-p")
          ("M-n")
          ("<tab>" . company-quit)
          ("C-n" . company-select-next)
          ("C-p" . company-select-previous)
          ("C-o" . company-other-backend)
          ("C-v" . company-next-page)
          ("M-v" . company-previous-page)
          ("C-s" . company-filter-candidates))
         (company-search-map  ;; incrementally searching the completion candidates
          ("C-p" . company-select-previous)
          ("C-n" . company-select-next)
          ("M-v" . company-previous-page)
          ("C-v" . company-next-page))
         )
  :config
  (setq auto-complete-mode nil) ;; required by jedi-2019
  (setq company-idle-delay 0.1) ;; defailt 0.5
  (setq company-show-numbers nil)
  (setq company-selection-wrap-around t)  ;; 候補の最後の次は先頭に戻る
  (setq company-minimum-prefix-length 1)  ;; original 3
  ;; (setq completion-ignore-case t)      ;; not company, c-source
  (setq company-dabbrev-downcase nil)
  (setq company-dabbrev-other-buffers nil) ;; 少しでも反応よくしたい
  (setq company-dabbrev-code-other-buffers nil)  ;;
  (setq company-dabbrev-code-everywhere t)     ;;  include comments and strings.
  ;; (setq company-dabbrev-ignore-buffers "\\`\\'")
  ;; (setq company-tooltip-align-annotations nil)  ;; default nil
  (setq company-tooltip-limit 8)
  (setq company-require-match 'never)    ;; If enabled, disallow non-matching input.

  (leaf company-posframe :ensure t :require t
    :blackout t
    :config
    (setq company-posframe-mode 1)
    )
  ;;
  (defun company-quit nil
    "Insert any selected completion and quit completing.
     https://gist.github.com/rswgnu/85ca5c69bb26551f3f27500855893dbe#file-rsw-company-config-el"
    (interactive)
    (when (and company-selection-changed company--manual-action
               (boundp 'company-tng--overlay)
               company-tng--overlay)
      (company--insert-candidate
       (nth company-selection company-candidates)))
    (company-cancel))

  :defer-config
  ;; counsel-gtags を使うので、止め
  ;; (leaf company-gtags :ensure nil :require t)

  ;; for web (not use now)
  (leaf company-web :ensure t :disabled t
    :url "https://github.com/osv/company-web"
    :doc "Company-web support integration with emmet-mode and emmet-preview and
        add some advices to make C-g and RET keys work properly."
    :init
    (leaf web-completion-data :ensure t :require t)
    )
  ;;
  (leaf company-prescient :ensure t :require t :disabled nil
    :url "https://github.com/raxod502/prescient.el"
    :config
    (company-prescient-mode t))
  ;;
  ;; 画面が狭いし、反応がよくないので、やめ。
  (leaf company-quickhelp :ensure t :disabled t
    :url "https://github.com/expez/company-quickhelp"
    :doc "documentation popup for company"
    :bind (company-active-map ("M-h" . company-quickhelp-manual-begin))
    :require t
    :config
    (setq company-quickhelp-delay 0.8) ;; original 0.5
    (setq company-quickhelp-mode t)
    )
  )

python については、 python-mode 設定の :defer-config 内(以下)で指定。

:defer-config
(setq auto-complete-mode -1)

(leaf pyvenv :ensure t :require t)
(leaf pipenv :ensure t :require t
  :init
  (setq pipenv-with-flycheck nil)
  )
;;
(leaf python-environment :ensure t :require t
  :doc "Required by: jedi-core"
  )

(leaf company-jedi :ensure t :require t
  :init
  (leaf jedi-core :ensure t :require t
    :commands (jedi:setup)
    :hook
    (python-mode-hook . (lambda ()
                          (jedi:setup)
                          (set (make-local-variable 'company-backends)
                               '(company-jedi company-dabbrev-code company-ispell))))
    :config
    (setq jedi:tooltip-method nil)  ;; pos-tip and/or popup, nil is minibuffer
    (setq jedi:complete-on-dot t)
    (setq jedi:use-shortcuts nil) ;; M-. and M-,
    )
  )

(leaf lsp-pylsp :ensure nil :require t
  :doc "Fork of the python-language-server project."
  )

しかし、私のマシン遅い、と、よく感じるようになっている。

ThinkPad T510 は、もう部品の入手が困難になっているので、 そろそろ次マシンと思うのだが、中古市場が高騰してる?のか、 安価な新品もスコープに入ってきそうなのが、なんとなく残念。

0 件のコメント:

コメントを投稿

Emacs の lsp の設定、なう(202310)

前回さらしてから、さらに1年。そう、3年めになる。 が、今回は一段と自信がない。 環境は、 Debian GNU/Linux 12 (bookworm) + emacs(29.1)。consult + company。 embark は未だに使ってない。 用途は、メモ と ...