X-Git-Url: https://cgit.sxemacs.org/?p=riece;a=blobdiff_plain;f=lisp%2Friece-ctlseq.el;h=c7a54e0306e375a81b270dad6efc8aa81b4a0a77;hp=87729d5c742cd2ff558c0776685ccfc9639d9e87;hb=536e383fc9aa7ea3249c734cda5359184262672c;hpb=17dd5dac188c1ad7bdc71961f341d7e1f9551749 diff --git a/lisp/riece-ctlseq.el b/lisp/riece-ctlseq.el index 87729d5..c7a54e0 100644 --- a/lisp/riece-ctlseq.el +++ b/lisp/riece-ctlseq.el @@ -1,4 +1,4 @@ -;;; riece-ctlseq.el --- highlight control sequences in channel buffers +;;; riece-ctlseq.el --- mark up control sequences in IRC buffers ;; Copyright (C) 1998-2004 Daiki Ueno ;; Author: Daiki Ueno @@ -24,22 +24,44 @@ ;;; Commentary: -;; To use, add the following line to your ~/.riece/init.el: -;; (add-to-list 'riece-addons 'riece-ctlseq) +;; NOTE: This is an add-on module for Riece. ;;; Code: -(require 'riece-highlight) +(require 'riece-message) +(require 'riece-misc) -(defvar riece-ctlseq-colors +(defgroup riece-ctlseq nil + "Mark up control sequences in IRC buffer." + :prefix "riece-" + :group 'riece) + +(defcustom riece-ctlseq-colors '("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,." + :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-size 128) (defvar riece-ctlseq-face-counter 0) +(defvar riece-ctlseq-enabled nil) + +(defconst riece-ctlseq-description + "Mark up control sequences in IRC buffers.") + (defun riece-ctlseq-compatible-attributes-p (this other) (let ((pointer this)) (catch 'mismatched @@ -134,44 +156,45 @@ 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) -(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-uninstall () + (remove-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)