しょぼしょぼすくりぷと xyzzy > xyzzy用 mode集 > minor-mode-template

minor-mode-template

概要

マイナー モードを作ってみたい人向けにテンプレートを用意しました。 ある程度概念も学べます。

ソース

minor-mode-template.l


;---------------------------------------------

;package , module,外部利用設定
;ここらへんはお好みで (ごっそりなくても動く)
(require "〜〜")

(provide "hogehoge")
(in-package "editor")

(export
 '(
   hogehoge-minor-mode
   *hogehoge-minor-mode* *hogehoge-minor-mode-hook* *hogehoge-minor-mode-map*
   ))
;ここらへんはお好みで



;モード変数
(defvar-local *hogehoge-minor-mode* nil)
 ;minor-modeは buffer毎で必要なので defvar-local、共通にしたい場合は defvarで良い
 ;慣習として -modeで終わる名前とする。
 ;minor-mode-alistに追加する。
 ;可能であれば変数設定だけで ON/OFFトグルできること
   ;コマンド関数(interactive)と同名にすること  (*付いちゃっているのは 良いのか悪いのか?)

 (defvar *hogehoge-minor-mode-hook* nil);Minorモード起動時の設定が必要であれば

 (defvar *hogehoge-minor-mode-map* nil);キー設定が必要であれば
(unless *hogehoge-minor-mode-map*
  (setq *hogehoge-minor-mode-map* (make-sparse-keymap))

 ;キーを設定する
   ;(define-key *hogehoge-minor-mode-map* #\LBtnDown 'hogehoge-drag-start)
  )



;;------------------------------
;必要であれば関数群を記載



;;------------------------------
;M-x hogehoge-minor-modeするたびに呼ばれる 
  ;引数はこのようにする。(一つは受け取れること)
(defun hogehoge-minor-mode (&optional (arg nil sv))
  (interactive);command必須  ; interactive引数は必要に応じて追加してください。 * とか pとか

;sv は optional引数で明示的かどうかを伝えてくれる変数。
;明示的にargの値が指定されて呼び出された場合 t  が返ってくる
;defaultとして設定していても判断可能になる。


;マイナーモードのON/OFFトグルを意識した作りになっていればOK
  (toggle-mode '*hogehoge-minor-mode* arg sv);必須
  (if *hogehoge-minor-mode*
     ;非nil なら状態初期化から、モード初期化する
    (progn
      (set-minor-mode-map *hogehoge-minor-mode-map*)
      (run-hooks '*hogehoge-minor-mode-hook*))
    (progn
     ;nil  モード解除処理
      (unset-minor-mode-map *hogehoge-minor-mode-map*)))
  (update-mode-line t);モード行の再表示
  )

;モード行に表示したい場合
  ;マイナーモードリストを設定 表示名も設定
    ;名前は複数のMinorモードを意識して短めにすること
  ;Minorモードが重複登録しないように carで比較する。
(pushnew '(*hogehoge-minor-mode* . "HogeHoge") *minor-mode-alist* :key #'car)

  

参考

22.2.1 マイナモードを書くための慣習
・lispフォルダ配下を minorで検索する。(abbrev, box-draw , edict, auto-fill , overwrite, async-grep)

関連リンク

minorviewmode | multi mode| bash mode
しょぼしょぼすくりぷと| xyzzy用mode集