[Date Prev] [Date Index] [Date Next]
[Thread Prev] [Thread Index] [Thread Next]

[xyzzy:07188] Re:mode について



Goddyさん、こんにちは。
門田@lisp初心者です。

	Re:[xyzzy:07180] mode について

>ところで質問です。
>ある工作機械制御用のテキストファイル向けに mode を作成しています。
>指定したキーワードに色を付けるところまではなんとか出来てます。
>理解は出来ていません(^^;
>
>それで、ある正規表現に一致したときに、キーワードのように
>色を替えたいのですが、いったいどこに何をかけば
>いいのでしょう。 

自分も見よう見まねなのですが、同じような事をしようと作っていたので
載っけてみます。
(scan-buffer "正規表現")で探して set-text-attribute で色を付けます。
改行に割り当ててますが、キーワードの後に必ず決まった文字("とか]とか)
が入力されるのならそれに割当てればリアルタイム感が少し増すかもです。
あと、キーワードが書き替えられても色が付いたままになるので5行前まで
戻って色を取り消してから再度色を付けてます。
…こういうことでよろしいのでしょうか。
長々とすみません(汗)

(defvar *your-keyword-tag* 'keyword)
(defvar *your-keyword-attribute* '(:bold nil :foreground 3));文字色3

;from to の範囲でkeywordに違う色を付ける
(defun your-set-keyword-color (from to)
  (interactive)
  (save-excursion
    (goto-char from)
    (while (scan-buffer "foo-\\(.*\\)" :regexp t :no-dup t :limit to)
      (apply #'set-text-attribute (match-beginning 0) (match-end 0) 
*your-keyword-tag* *your-keyword-attribute*))))

;;from to の範囲でkeyword色を取消,再設定
(defun your-reset-keyword-color (from to)
  (interactive)
  (save-excursion
      (while (setq pos (find-text-attribute *your-keyword-tag*
					    :start from :end to))
	(delete-text-attribute-point pos)))
      (your-set-keyword-color from to))

; 改行
(defun your-newline-and-keyword-color (&optional (arg 1))
  (interactive "*p")
  (insert #\LFD arg)
  (save-excursion
    (setq to (point) from (progn (forward-line -5) (point)));5行前
  (your-reset-keyword-color from to)))

;ファイル読込時にkeywordに違う色を付ける
(add-hook '*your-mode-hook*
	  #'(lambda ()
	      (save-excursion
		(your-set-keyword-color (point-min) (point-max)))))

(define-key *your-mode-map* #\RET 'your-newline-and-keyword-color) 
; RETに割当

----------
門田 拝<kadd@xxxxxxxxxxxxx>

Index Home