summaryrefslogtreecommitdiffstats
path: root/emacs.d/lisp/rudel/rudel-chat.el
blob: c7e992f22ee9c9f5fc81db08964a9fdb4510d864 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
;;; rudel-chat.el --- Handling of chat messages
;;
;; Copyright (C) 2008, 2009 Jan Moringen
;;
;; Author: Jan Moringen <scymtym@users.sourceforge.net>
;; Keywords: Rudel, chat, message
;; X-RCS: $Id:$
;;
;; This file is part of Rudel.
;;
;; Rudel 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 3 of the License, or
;; (at your option) any later version.
;;
;; Rudel 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 Rudel. If not, see <http://www.gnu.org/licenses>.


;;; Commentary:
;;
;; This file contains some functions that deal with incoming chat
;; messages. Backends that support receiving chat message should
;; dispatch them using `rudel-chat-dispatch-message'. Chat messages
;; will be processed in a customizable way from there.


;;; History:
;;
;; 0.1 - Initial revision.


;;; Code:
;;


;;; Customization
;;

(defcustom rudel-chat-handler-function #'rudel-chat-handle-buffer
  "A function that is called when chat messages arrive."
  :group 'rudel
  :type  '(choice (const :tag "Display messages in the echo area"
			 rudel-chat-handle-message)
		  (const :tag "Log messages into a buffer"
			 rudel-chat-handle-buffer)
		  (function :tag "Other function"))
  )


;;; Variables and constants
;;

(defconst rudel-chat-buffer-name "*rudel-chat-log*"
  "Name of the buffer into which received chat message should be
inserted.")


;;; Interface functions
;;

(defun rudel-chat-dispatch-message (sender message)
  "Dispatch SENDER and MESSAGE to customizable handler function."
  (funcall rudel-chat-handler-function sender message))


;;; Handler functions
;;

(defun rudel-chat-handle-message (sender text)
  "Display SENDER and MESSAGE in the echo area."
  (message "%s says: %s"
	   (rudel-chat-format-sender sender)
	   text))

(defun rudel-chat-handle-buffer (sender text)
  "Insert SENDER and MESSAGE in a buffer."
  (let ((buffer (or (get-buffer rudel-chat-buffer-name)
		    (pop-to-buffer rudel-chat-buffer-name))))
    (with-current-buffer buffer
      (goto-char (point-min))
      (insert (format "%s: %s\n"
		      (rudel-chat-format-sender sender)
		      text))))
  )


;;; Miscellaneous functions
;;

(defun rudel-chat-format-sender (user)
  "Format USER handling nil values."
  (if user
      (object-name-string user)
    "<unknown sender>"))

(provide 'rudel-chat)
;;; rudel-chat.el ends here