diff options
Diffstat (limited to 'jabber-muc-nick-coloring.el')
-rw-r--r-- | jabber-muc-nick-coloring.el | 85 |
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 |