;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Code:
(require 'riece-misc)
(require 'riece-layout)
(require 'riece-signal)
-
-(autoload 'derived-mode-class "derived")
+(require 'riece-mcat)
(defvar riece-channel-buffer-format "*Channel:%s*"
"Format of channel message buffer.")
(riece-connect-signal
'channel-list-changed
(lambda (signal handback)
- (save-excursion
- (set-buffer riece-channel-list-buffer)
+ (with-current-buffer riece-channel-list-buffer
(run-hooks 'riece-update-buffer-functions))
(riece-update-channel-list-indicator)))
(riece-connect-signal
'user-list-changed
(lambda (signal handback)
- (save-excursion
- (set-buffer riece-user-list-buffer)
+ (with-current-buffer riece-user-list-buffer
(run-hooks 'riece-update-buffer-functions)))
(lambda (signal)
(and riece-current-channel
(setq riece-channel-indicator
(if riece-current-channel
(riece-format-identity riece-current-channel)
- "None")))
+ (riece-mcat "None"))))
(defun riece-update-long-channel-indicator ()
(setq riece-long-channel-indicator
riece-current-channel
(riece-format-identity riece-current-channel)))
(riece-format-identity riece-current-channel))
- "None")))
+ (riece-mcat "None"))))
(defun riece-format-identity-for-channel-list-indicator (index identity)
(or (run-hook-with-args-until-success
(setq pointer (cdr (cdr pointer))))
(setq riece-channel-list-indicator
(riece-normalize-modeline-string riece-channel-list-indicator)))
- (setq riece-channel-list-indicator "No channel")))
+ (setq riece-channel-list-indicator (riece-mcat "No channel"))))
(defun riece-update-status-indicators ()
(let ((server-name (riece-current-server-name)))
(riece-user-get-operator riece-real-nickname))
"O"
"-")
- riece-user-indicator
- (riece-format-identity
- (riece-make-identity riece-real-nickname riece-server-name)
- t))))))
+ )
+ (if riece-real-nickname
+ (setq riece-user-indicator
+ (riece-format-identity
+ (riece-make-identity riece-real-nickname
+ riece-server-name)
+ t)))))))
(walk-windows
(lambda (window)
(with-current-buffer (window-buffer window)
- (if (eq (derived-mode-class major-mode)
- 'riece-dialogue-mode)
+ (if (riece-derived-mode-p 'riece-dialogue-mode)
(setq riece-freeze-indicator
(if (eq riece-freeze 'own)
"f"
(setq buffers riece-buffer-list))
(while buffers
(if (buffer-live-p (car buffers))
- (save-excursion
- (set-buffer (car buffers))
+ (with-current-buffer (car buffers)
(run-hooks 'riece-update-buffer-functions)))
(setq buffers (cdr buffers)))
(run-hooks 'riece-update-indicator-functions)
(riece-channel-mode)
(let (buffer-read-only)
(riece-insert-info (current-buffer)
- (concat "Created on "
+ (format (riece-mcat "Created on %s\n")
(funcall riece-format-time-function
- (current-time))
- "\n"))
+ (current-time))))
(run-hook-with-args 'riece-channel-buffer-create-functions identity)))
(current-buffer)))
(defun riece-channel-buffer (identity)
- (cdr (riece-identity-assoc identity riece-channel-buffer-alist)))
+ (let ((entry (riece-identity-assoc identity riece-channel-buffer-alist)))
+ (if entry
+ (if (buffer-live-p (cdr entry))
+ (cdr entry)
+ (if riece-debug
+ (riece-debug
+ (format "riece-channel-buffer: nonexistent buffer: %s"
+ (riece-format-identity identity))))))))
(defun riece-switch-to-channel (identity)
(let ((last riece-current-channel)
(defun riece-part-channel (identity)
(let ((pointer (riece-identity-member identity riece-current-channels)))
- (if pointer
- (setcar pointer nil))
+ (unless pointer
+ (error "No such channel!"))
+ (setcar pointer nil)
(if (riece-identity-equal identity riece-current-channel)
- (riece-switch-to-nearest-channel pointer))
+ (riece-switch-to-nearest-channel pointer)
+ (riece-emit-signal 'channel-list-changed))
(funcall riece-buffer-dispose-function (riece-channel-buffer identity))))
(defun riece-redisplay-buffers (&optional force)