shell-modeでkeywordに色を付けたい(その2)

 syntaxが関係あるらしいということを聞いて色々調べてみた。set-syntax-hoge とかその類にキーワードのものがあるのかと思ってみたけど、見当たらない。bat-modeから真似をしようかと思って見てみたらキーワードファイルを使ってないという罠。しかも殆ど正規表現で色をぬってキーワード指定をしているという。ファイルにすると設定し難いんだろうか。よく分からん。以下適当に試した結果。

■set-syntax-start-multi-commentは2文字までっぽい
 適当にremでコメントアウトとか試してみたら、正規表現で塗っている理由も少し分かったset-syntax-start-multi-commentだと、引数が二文字なら受け付けるけど3文字だとなぜかnilに。2文字の制限があるのかもしれない。

■BATのキーワードファイル
 bat-modeには設定らしきのが書いてあるけど実際のキーワードファイルらしきものがetc以下の場所には見当たらない。ので、適当にhelpで出したDOSのコマンドをキーワードファイルに加工。BATの名前で設定されているようなので名前をつけてetcに入れてみた。しかし、Bat-modeのキーワードファイルに色が付かない。bat-modeは一応syntax-tableも書いてあるような雰囲気だけどよく分からない。何か酷い勘違いをしてそうな予感。BATの場合は、set-syntax-symbolを設定していないので少し怪しいような気もするけど。しかしshell-modeも色が付かないのだった。

全く上手くいっていないが一応忘れないようにメモ

(defun shell4-keyword()
  "色を塗る"
  ;; keyword file setting
  (defvar *shell4-keyword-hash-table* nil)
  (defvar *shell4-keyword-file* "shell4")
  ;; add syntax table
  (defvar *shell4-mode-syntax-table* nil)
  (unless *shell4-mode-syntax-table*
	(setq *shell4-mode-syntax-table* (make-syntax-table))
	;;適当にパクリ
	(do ((x #x21 (1+ x))) ((>= x #x7f))
	  (let ((c (code-char x)))
		(unless (alphanumericp c)
		  (set-syntax-punctuation *shell4-mode-syntax-table* c))))
	(set-syntax-string *shell4-mode-syntax-table* #\")
	(set-syntax-whitespace *shell4-mode-syntax-table* #\SPC)
	(set-syntax-whitespace *shell4-mode-syntax-table* #\TAB)
	(set-syntax-match *shell4-mode-syntax-table* #\( #\))
	(set-syntax-match *shell4-mode-syntax-table* #\{ #\})
	(set-syntax-match *shell4-mode-syntax-table* #\[ #\])
	(set-syntax-escape *shell4-mode-syntax-table* #\\))
  ;; load keyword file
  (use-syntax-table *shell4-mode-syntax-table*)
  (and *shell4-keyword-file*
	   (null *shell4-keyword-hash-table*)
	   (setq *shell4-keyword-hash-table*
			 (load-keyword-file *shell4-keyword-file* t)))
  (when *shell4-keyword-hash-table*
	(make-local-variable 'keyword-hash-table)
	(setq keyword-hash-table *shell4-keyword-hash-table*))
  )

■追記:結局よくわからないので野望は頓挫しているところ