ローカル補完テーブル

自作のメジャーモードに静的補完テーブルを追加する方法。静的補完がどうしても必要かといわれると、ちょっと弱い。

  1. *~mode-abbrev-table*を定義する
  2. *local-abbrev-table*に定義した~mode-abbrev-tableをセットする。

具体的にはこんな感じ。今回はDeecayさんが配布しているpy-modeに追加してみた(というかpy-modeに静的補完が欲しかった)。

;;; ローカル補完テーブルの定義
(defvar *py-mode-abbrev-table* nil)
(unless *py-mode-abbrev-table*
  (define-abbrev-table '*py-mode-abbrev-table*))

(defun py-mode ()
  (interactive)
  (kill-all-local-variables)
  (setq mode-name "py")
  (setq buffer-mode 'py-mode)
  (setq build-summary-function 'py-build-summary-of-functions)
  (use-keymap *py-mode-map*)
  (use-syntax-table *py-mode-syntax-table*)
  (and *py-keyword-file*
       (null *py-keyword-hash-table*)
       (setq *py-keyword-hash-table*
             (load-keyword-file *py-keyword-file* t)))
  (when *py-keyword-hash-table*
    (make-local-variable 'keyword-hash-table)
    (setq keyword-hash-table *py-keyword-hash-table*))
  (make-local-variable 'indent-tabs-mode)
  (setq indent-tabs-mode *py-indent-tabs-mode*)
    (py-menu-update)
  ;; ローカル補完テーブルの追加
  (setq *local-abbrev-table* *py-mode-abbrev-table*)
  (run-hooks '*py-mode-hook*))