9f02c66947f20ba3edeebef409fb34aa0941294c
[elisp/riece.git] / lisp / riece-misc.el
1 ;;; riece-misc.el --- miscellaneous functions (not inlined)
2 ;; Copyright (C) 1998-2003 Daiki Ueno
3
4 ;; Author: Daiki Ueno <ueno@unixuser.org>
5 ;; Created: 1998-09-28
6 ;; Keywords: IRC, riece
7
8 ;; This file is part of Riece.
9
10 ;; This program is free software; you can redistribute it and/or modify
11 ;; it under the terms of the GNU General Public License as published by
12 ;; the Free Software Foundation; either version 2, or (at your option)
13 ;; any later version.
14
15 ;; This program is distributed in the hope that it will be useful,
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 ;; GNU General Public License for more details.
19
20 ;; You should have received a copy of the GNU General Public License
21 ;; along with GNU Emacs; see the file COPYING.  If not, write to the
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
23 ;; Boston, MA 02111-1307, USA.
24
25 ;;; Code:
26
27 (require 'riece-options)
28 (require 'riece-coding)
29 (require 'riece-identity)
30 (require 'riece-version)
31 (require 'riece-channel)
32 (require 'riece-server)
33 (require 'riece-user)
34
35 (defun riece-get-buffer-create (name)
36   (let ((buffer (get-buffer-create name)))
37     (unless (memq buffer riece-buffer-list)
38       (setq riece-buffer-list (cons buffer riece-buffer-list)))
39     buffer))
40
41 (defun riece-insert (buffers string)
42   (unless (listp buffers)
43     (setq buffers (list buffers)))
44   (while buffers
45     (run-hooks 'riece-before-insert-functions)
46     (save-excursion
47       (set-buffer (riece-get-buffer-create (car buffers)))
48       (let ((inhibit-read-only t)
49             buffer-read-only
50             (start (goto-char (point-max))))
51         (insert (format-time-string "%H:%M") " " string)
52         (if (and (not (riece-frozen (current-buffer)))
53                  (get-buffer-window (current-buffer)))
54             (set-window-point (get-buffer-window (current-buffer))
55                               (point)))
56         (run-hook-with-args 'riece-after-insert-functions start (point))))
57     (setq buffers (cdr buffers))))
58
59 (defun riece-insert-change (buffer message)
60   (riece-insert buffer (concat riece-change-prefix message)))
61
62 (defun riece-insert-notice (buffer message)
63   (riece-insert buffer (concat riece-notice-prefix message)))
64
65 (defun riece-insert-wallops (buffer message)
66   (riece-insert buffer (concat riece-wallops-prefix message)))
67
68 (defun riece-insert-error (buffer message)
69   (riece-insert buffer (concat riece-error-prefix message)))
70
71 (defun riece-insert-info (buffer message)
72   (riece-insert buffer (concat riece-info-prefix message)))
73
74 (defun riece-frozen (buffer)
75   (with-current-buffer buffer
76     riece-freeze))
77
78 (defun riece-own-frozen (buffer)
79   (with-current-buffer buffer
80     (eq riece-freeze 'own)))
81
82 (defun riece-current-nickname ()
83   "Return the current nickname."
84   (riece-with-identity-buffer riece-current-channel
85     (if riece-real-nickname
86         (riece-make-identity riece-real-nickname riece-server-name))))
87
88 (defun riece-split-parameters (string)
89   (if (eq ?: (aref string 0))
90       (list (substring string 1))
91     (let (parameters)
92       (catch 'done
93         (while (string-match "^\\([^ ]+\\) +" string)
94           (setq parameters (nconc parameters (list (match-string 1 string)))
95                 string (substring string (match-end 0)))
96           (and (not (equal "" string)) (eq ?: (aref string 0))
97                (setq string (substring string 1))
98                (throw 'done nil))))
99       (or (equal "" string)
100           (setq parameters (nconc parameters (list string))))
101       parameters)))
102
103 (defun riece-concat-channel-topic (target string)
104   (riece-with-identity-buffer target
105     (let ((topic (riece-channel-get-topic (riece-identity-prefix target))))
106       (if topic
107           (concat string ": " topic)
108         string))))
109
110 (defun riece-concat-channel-modes (target string)
111   (riece-with-identity-buffer target
112     (let ((modes (riece-channel-get-modes (riece-identity-prefix target))))
113       (if modes
114           (concat string " [" (apply #'string modes) "]")
115         string))))
116
117 (defun riece-concat-message (string message)
118   (if (or (null message)
119           (equal message ""))
120       string
121     (concat string " (" message ")")))
122
123 (defun riece-concat-server-name (string)
124   (if (equal riece-server-name "")
125       string
126     (concat string " (from " riece-server-name ")")))
127
128 (defun riece-prefix-user-at-host (prefix)
129   (if (string-match "!" prefix)
130       (substring prefix (match-end 0))
131     prefix))
132
133 (defun riece-prefix-nickname (prefix)
134   (if (string-match "!" prefix)
135       (substring prefix 0 (match-beginning 0))
136     prefix))
137
138 (defun riece-parse-user-at-host (user-at-host)
139   (if (memq (aref user-at-host 0) '(?^ ?= ?~ ?- ?+))
140       (progn
141         (if (memq (aref user-at-host 0) '(?^ ?=))
142             (setq riece-user-at-host-type 'fake)
143           (if (memq (aref user-at-host 0) '(?~ ?-))
144               (setq riece-user-at-host-type 'not-verified)
145             (if (eq (aref user-at-host 0) ?+)
146                 (setq riece-user-at-host-type 'ok))))
147         (substring user-at-host 1))
148     (setq riece-user-at-host-type 'ok)
149     user-at-host))
150
151 (defun riece-strip-user-at-host (user-at-host)
152   (if (memq (aref user-at-host 0) '(?^ ?= ?~ ?- ?+))
153       (substring user-at-host 1)
154     user-at-host))
155
156 (defun riece-get-users-on-server ()
157   (riece-with-server-buffer (riece-identity-server riece-current-channel)
158     (let (users)
159       (mapatoms
160        (lambda (atom)
161          (unless (riece-channel-p (symbol-name atom))
162            (setq users (cons (symbol-name atom) users))))
163        riece-obarray)
164       (if (member riece-real-nickname users)
165           users
166         (cons riece-real-nickname users)))))
167
168 (provide 'riece-misc)
169
170 ;;; riece-misc.el ends here