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*)) )
■追記:結局よくわからないので野望は頓挫しているところ