summaryrefslogtreecommitdiff
path: root/jabber-muc-nick-coloring.el
diff options
context:
space:
mode:
Diffstat (limited to 'jabber-muc-nick-coloring.el')
-rw-r--r--jabber-muc-nick-coloring.el85
1 files changed, 85 insertions, 0 deletions
diff --git a/jabber-muc-nick-coloring.el b/jabber-muc-nick-coloring.el
new file mode 100644
index 0000000..5a7a171
--- /dev/null
+++ b/jabber-muc-nick-coloring.el
@@ -0,0 +1,85 @@
+;;; jabber-muc-nick-coloring.el --- Add nick coloring abilyty to emacs-jabber
+
+;; Copyright 2009, 2010, 2012, 2013 Terechkov Evgenii - evg@altlinux.org
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program; if not, write to the Free Software
+;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+;;; Commentary:
+
+;;; Code:
+
+(eval-when-compile (require 'cl)) ;for ignore-errors
+;; we need hexrgb-hsv-to-hex:
+(eval-and-compile
+ (or (ignore-errors (require 'hexrgb))
+ ;; jabber-fallback-lib/ from jabber/lisp/jabber-fallback-lib
+ (ignore-errors
+ (let ((load-path (cons (expand-file-name
+ "jabber-fallback-lib"
+ (file-name-directory (locate-library "jabber")))
+ load-path)))
+ (require 'hexrgb)))
+ (error
+ "hexrgb not found in `load-path' or jabber-fallback-lib/ directory.")))
+
+;;;;##########################################################################
+;;;; User Options, Variables
+;;;;##########################################################################
+
+(defcustom jabber-muc-participant-colors nil
+ "Alist of used colors. Format is (nick . color). Color may be
+ in #RGB or textual (like red or blue) notation. Colors will be
+ added in #RGB notation for unknown nicks."
+ :type '(alist :key-type string :value-type color)
+ :group 'jabber-chat)
+
+(defcustom jabber-muc-colorize-local nil
+ "Colorize MUC messages from you."
+ :type 'boolean
+ :group 'jabber-chat)
+
+(defcustom jabber-muc-colorize-foreign nil
+ "Colorize MUC messages not from you."
+ :type 'boolean
+ :group 'jabber-chat)
+
+(defcustom jabber-muc-nick-saturation 1.0
+ "Default saturation for nick coloring."
+ :type 'float
+ :group 'jabber-chat)
+
+(defcustom jabber-muc-nick-value 1.0
+ "Default value for nick coloring."
+ :type 'float
+ :group 'jabber-chat)
+
+(defun jabber-muc-nick-gen-color (nick)
+ "Return good enough color from available pool"
+ (let ((hue (/ (mod (string-to-number (substring (md5 nick) 0 6) 16) 360) 360.0)))
+ (hexrgb-hsv-to-hex hue jabber-muc-nick-saturation jabber-muc-nick-value)))
+
+(defun jabber-muc-nick-get-color (nick)
+ "Get NICKs color"
+ (let ((color (cdr (assoc nick jabber-muc-participant-colors))))
+ (if color
+ color
+ (progn
+ (unless jabber-muc-participant-colors )
+ (push (cons nick (jabber-muc-nick-gen-color nick)) jabber-muc-participant-colors)
+ (cdr (assoc nick jabber-muc-participant-colors))))))
+
+(provide 'jabber-muc-nick-coloring)
+
+;;; jabber-muc-nick-coloring.el ends here