Lispを書く時のLisp Interaction

 *scratch* のモードはLisp InteractionでC-jするだけで一時的に評価できて便利なわけだけど、ファイルを分けてしまったlispとかpackageの違うlispとかを触る時には毎回*scratch*へコピーしてとか面倒なので、多分ファイルを開いてからlispモードならば"Lisp Interaction"に変える。
しかし、毎回モードを一々切り替えるのが面倒なので、lispモードだったらLisp Interactionにモードをトグルしたい。ので、適当にこういうのとかで

(defun toggle-lisp-mode()
  (interactive)
  (cond ((string-equal mode-name "Lisp")
		 (message "Lisp Interaction")
		 (execute-extended-command 'lisp-interaction-mode))
		((string-equal mode-name "Lisp Interaction")
		 (message "Lisp")
		 (execute-extended-command 'lisp-mode))
		 )
  )

書いてて少し思ったのは複数のモードを同時に色分けするとか言う類のモードも良いけど設定が面倒なので、適当にこうやって切り替えて使うというも良いかなぁと思った。切り替える対象をlistとかにして、設定しておけば、それ程設定も面倒じゃないし。html-modeとかで書いている時に時々jscript-modeとかに切り替えたりしたい、キー一つでとか。

適当にlist風にしてみた。というか、あまりlistの使い方が分かっていないので三つ以上とかのリストをどういう風にするのかよく分からない。唯の連想配列みたいな使い方に成ってしまっているという罠。

(defvar *toggle-mode-list*
	  '(("lisp-mode" . "lisp-interaction-mode")
		("lisp-interaction-mode" . "lisp-mode")
		("html+-mode" . "jscript-mode")
		("jscript-mode" . "html+-mode")
		))

(defun toggle-mode()
  (interactive)
  (let ((toggle-list (assoc buffer-mode *toggle-mode-list* :test #'string-equal))
		 command)
	(when toggle-list
	  (setq command (cdr toggle-list))
	  (set-buffer (selected-buffer))
	  (message "~A -> ~A" buffer-mode (cdr toggle-list))
	  (execute-extended-command (find-symbol command)))
	))

 *toggle-mode-list*を適当に自分の使うモードの切り替えたいのにするとか。perl使う人ならhtmlとperlを切り替えとか、トグルじゃなくて

(defvar *toggle-mode-list*
	  '(("html+-mode" . "jscript-mode")
		("jscript-mode" . "py-mode")
		("py-mode" . "html+-mode")
		))

こういう風にすれば3つくらいとかでも順に切り替えとか。何とか、切り替えとか、その辺も自動で判別したいけど無理かな。自分じゃ方法が思いつかない。