* COMPILE (riece-install-package): Install *.xpm and *.rb in etc/riece.
[riece] / lisp / riece-ctlseq.el
index 87729d5..987e4ca 100644 (file)
 
 ;;; Code:
 
 
 ;;; Code:
 
-(require 'riece-highlight)
+(require 'riece-message)
+(require 'riece-misc)
 
 
-(defvar riece-ctlseq-colors
+(defgroup riece-ctlseq nil
+  "Highlight control sequences in IRC buffer."
+  :group 'riece)
+
+(defcustom riece-ctlseq-colors
   '("white" "black" "red" "orange" "yellow" "LightGreen" "DarkOliveGreen"
     "cyan4" "turquoise" "blue" "black" "black" "black" "black" "black"
   '("white" "black" "red" "orange" "yellow" "LightGreen" "DarkOliveGreen"
     "cyan4" "turquoise" "blue" "black" "black" "black" "black" "black"
-    "DarkBlue" "purple1" "purple2" "purple3" "magenta"))
+    "DarkBlue" "purple1" "purple2" "purple3" "magenta")
+  "List of colors can be used with ^C<fg>,<bg>."
+  :group 'riece-ctlseq
+  :type '(repeat (string :tag "Color")))
+
+(defcustom riece-ctlseq-hide-controls t
+  "If non-nil, control characters are hidden."
+  :group 'riece-ctlseq
+  :type 'boolean)
+
+(defcustom riece-ctlseq-face-cache-size 128
+  "Maximum length of the internal face cache."
+  :group 'riece-ctlseq
+  :type 'integer)
 
 (defvar riece-ctlseq-face-cache nil)
 
 (defvar riece-ctlseq-face-cache nil)
-(defvar riece-ctlseq-face-cache-size 128)
 (defvar riece-ctlseq-face-counter 0)
 
 (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
 (defun riece-ctlseq-compatible-attributes-p (this other)
   (let ((pointer this))
     (catch 'mismatched
     attrs)))
 
 (defun riece-ctlseq-message-filter (message)
     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)
-      (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)
 
   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-requires ()
   '(riece-highlight))
-                           
+
 (defun riece-ctlseq-insinuate ()
 (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)
 
 
 (provide 'riece-ctlseq)