X-Git-Url: https://cgit.sxemacs.org/?p=riece;a=blobdiff_plain;f=lisp%2Friece-ctlseq.el;h=987e4cac52a8780ecdcfee72b6edf0ce3b04ab71;hp=11de68834462d9da4872b4f221ae7a1ae40f8000;hb=6559929008e5d5f1e941e888789828a318eac0fa;hpb=1f12cf24bc17322f58d174778c245dd6e7fa6fed diff --git a/lisp/riece-ctlseq.el b/lisp/riece-ctlseq.el index 11de688..987e4ca 100644 --- a/lisp/riece-ctlseq.el +++ b/lisp/riece-ctlseq.el @@ -29,7 +29,8 @@ ;;; Code: -(require 'riece-options) +(require 'riece-message) +(require 'riece-misc) (defgroup riece-ctlseq nil "Highlight control sequences in IRC buffer." @@ -56,6 +57,11 @@ (defvar riece-ctlseq-face-cache nil) (defvar riece-ctlseq-face-counter 0) +(defvar riece-ctlseq-enabled nil) + +(defvar riece-ctlseq-description + "Highlight control sequences in IRC buffers") + (defun riece-ctlseq-compatible-attributes-p (this other) (let ((pointer this)) (catch 'mismatched @@ -150,43 +156,42 @@ attrs))) (defun riece-ctlseq-message-filter (message) - (let ((start 0) - (end (length (riece-message-text message))) - attrs) - (while (string-match - "[\x2\xF\x16\x1F]\\|\x3\\([0-9]+\\)?\\(,[0-9]+\\)?" - (riece-message-text message) start) - (if riece-ctlseq-hide-controls - (put-text-property (match-beginning 0) (match-end 0) - 'invisible 'riece-ctlseq - (riece-message-text message))) - (if attrs - (put-text-property start (match-beginning 0) - 'riece-ctlseq-attributes (copy-sequence attrs) - (riece-message-text message))) - (setq start (match-end 0) - attrs (riece-ctlseq-update-attributes - (match-string 0 (riece-message-text message)) attrs))) - (if (and (< start end) attrs) - (put-text-property start end - 'riece-ctlseq-attributes (copy-sequence attrs) - (riece-message-text message)))) + (if riece-ctlseq-enabled + (let ((start 0) + (end (length (riece-message-text message))) + attrs) + (while (string-match + "[\x2\xF\x16\x1F]\\|\x3\\([0-9]+\\)?\\(,[0-9]+\\)?" + (riece-message-text message) start) + (if riece-ctlseq-hide-controls + (put-text-property (match-beginning 0) (match-end 0) + 'invisible 'riece-ctlseq + (riece-message-text message))) + (if attrs + (put-text-property start (match-beginning 0) + 'riece-ctlseq-attributes (copy-sequence attrs) + (riece-message-text message))) + (setq start (match-end 0) + attrs (riece-ctlseq-update-attributes + (match-string 0 (riece-message-text message)) attrs))) + (if (and (< start end) attrs) + (put-text-property start end + 'riece-overlay-face + (riece-ctlseq-face-from-cache attrs) + (riece-message-text message))))) message) -(defun riece-ctlseq-scan-region (start end) - (riece-scan-property-region - 'riece-ctlseq-attributes - start end - (lambda (start end) - (riece-overlay-put (riece-make-overlay start end) - 'face - (riece-ctlseq-face-from-cache - (get-text-property start - 'riece-ctlseq-attributes)))))) +(defun riece-ctlseq-requires () + '(riece-highlight)) (defun riece-ctlseq-insinuate () - (add-hook 'riece-message-filter-functions 'riece-ctlseq-message-filter) - (add-hook 'riece-after-insert-functions 'riece-ctlseq-scan-region)) + (add-hook 'riece-message-filter-functions 'riece-ctlseq-message-filter)) + +(defun riece-ctlseq-enable () + (setq riece-ctlseq-enabled t)) + +(defun riece-ctlseq-disable () + (setq riece-ctlseq-enabled nil)) (provide 'riece-ctlseq)