emacs-jabber/jabber.el

250 lines
7.7 KiB
EmacsLisp

;; jabber.el - a minimal jabber client
;; Copyright (C) 2003, 2004, 2007, 2008 - Magnus Henoch - mange@freemail.hu
;; Copyright (C) 2002, 2003, 2004 - tom berger - object@intelectronica.net
;; SSL - Support, mostly inspired by Gnus
;; Copyright (C) 2005 - Georg Lehner - jorge@magma.com.ni
;; This file is a part of jabber.el.
;; 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 of the License, 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
;;; load Unicode tables if this needed
(when (and (featurep 'xemacs) (not (emacs-version>= 21 5 5)))
(require 'un-define))
;;; these customize fields should come first
(defgroup jabber nil "Jabber instant messaging"
:group 'applications)
;;;###autoload
(defcustom jabber-account-list nil
"List of Jabber accounts.
Each element of the list is a cons cell describing a Jabber account,
where the car is a JID and the CDR is an alist.
JID is a full Jabber ID string (e.g. foo@bar.tld). You can also
specify the resource (e.g. foo@bar.tld/emacs).
The following keys can be present in the alist:
:password is a string to authenticate ourself against the server.
It can be empty.
:network-server is a string identifying the address to connect to,
if it's different from the server part of the JID.
:port is the port to use (default depends on connection type).
:connection-type is a symbol. Valid symbols are `starttls',
`network' and `ssl'.
Only JID is mandatory. The rest can be guessed at run-time.
Examples:
Two accounts without any special configuration:
\((\"foo@example.com\") (\"bar@example.net\"))
One disabled account with a non-standard port:
\((\"romeo@montague.net\" (:port . 5242) (:disabled . t)))
If you don't have SRV and STARTTLS capabilities in your Emacs,
configure a Google Talk account like this:
\((\"username@gmail.com\"
(:network-server . \"talk.google.com\")
(:connection-type . ssl)))"
:type '(repeat
(cons :tag "Account information"
(string :tag "JID")
(set :format "%v"
(cons :format "%v"
(const :format "" :disabled)
(const :tag "Disabled" t))
(cons :format "%v"
(const :format "" :password)
(string :tag "Password"))
(cons :format "%v"
(const :format "" :network-server)
(string :tag "Network server"))
(cons :format "%v"
(const :format "" :port)
(integer :tag "Port" 5222))
(cons :format "%v"
(const :format "" :connection-type)
(choice :tag "Connection type"
;; XXX: detect whether we have STARTTLS? option
;; for enforcing encryption?
(const :tag "STARTTLS" starttls)
(const :tag "Unencrypted" network)
(const :tag "Legacy SSL/TLS" ssl))))))
:group 'jabber)
(defcustom jabber-default-show ""
"default show state"
:type '(choice (const :tag "Online" "")
(const :tag "Chatty" "chat")
(const :tag "Away" "away")
(const :tag "Extended away" "xa")
(const :tag "Do not disturb" "dnd"))
:group 'jabber)
(defcustom jabber-default-status ""
"default status string"
:type 'string
:group 'jabber)
(defcustom jabber-default-priority 10
"default priority"
:type 'integer
:group 'jabber)
;;; guess internal dependencies!
(require 'jabber-util)
(require 'jabber-menu)
(require 'jabber-xml)
(require 'jabber-conn)
(require 'jabber-core)
(require 'jabber-logon)
(require 'jabber-roster)
(require 'jabber-presence)
(require 'jabber-alert)
(require 'jabber-chat)
(require 'jabber-disco)
(require 'jabber-iq)
(require 'jabber-widget)
(require 'jabber-register)
(require 'jabber-search)
(require 'jabber-browse)
(require 'jabber-muc)
(require 'jabber-muc-nick-completion)
(require 'jabber-version)
(require 'jabber-ahc-presence)
(require 'jabber-modeline)
(require 'jabber-watch)
(require 'jabber-activity)
(require 'jabber-vcard)
(require 'jabber-events)
(require 'jabber-chatstates)
(require 'jabber-vcard-avatars)
(require 'jabber-autoaway)
(require 'jabber-time)
(require 'jabber-truncate)
(require 'jabber-ft-client)
(require 'jabber-ft-server)
(require 'jabber-socks5)
;; External notifiers
(require 'jabber-screen)
(require 'jabber-tmux)
(require 'jabber-ratpoison)
(require 'jabber-sawfish)
(require 'jabber-festival)
(require 'jabber-xmessage)
(require 'jabber-wmii)
(require 'jabber-osd)
(require 'jabber-awesome)
(require 'jabber-libnotify)
(require 'jabber-autoloads)
;;;###autoload
(defvar *jabber-current-status* nil
"the users current presence status")
;;;###autoload
(defvar *jabber-current-show* nil
"the users current presence show")
;;;###autoload
(defvar *jabber-current-priority* nil
"the user's current priority")
(defvar *jabber-status-history* nil
"history of status messages")
(defgroup jabber-faces nil "faces for displaying jabber instant messaging"
:group 'jabber)
(defface jabber-title-small
'((t (:weight bold :width semi-expanded :height 1.0 :inherit variable-pitch)))
"face for small titles"
:group 'jabber-faces)
(defface jabber-title-medium
'((t (:weight bold :width expanded :height 2.0 :inherit variable-pitch)))
"face for medium titles"
:group 'jabber-faces)
(defface jabber-title-large
'((t (:weight bold :width ultra-expanded :height 3.0 :inherit variable-pitch)))
"face for large titles"
:group 'jabber-faces)
(defgroup jabber-debug nil "debugging options"
:group 'jabber)
(defcustom jabber-debug-log-xml nil
"Set to non-nil to log all XML i/o in *-jabber-console-JID-* buffer. Set to string to also dump XML i/o in specified file."
:type '(choice (const :tag "Do not dump XML i/o" nil)
(const :tag "Dump XML i/o in console" t)
(string :tag "Dump XML i/o in console and this file"))
:group 'jabber-debug)
(defcustom jabber-debug-keep-process-buffers nil
"If nil, kill process buffers when the process dies.
Contents of process buffers might be useful for debugging."
:type 'boolean
:group 'jabber-debug)
(defcustom jabber-silent-mode nil
"Silent mode switch. Not ask confirmanions for some operations. DANGEROUS!"
:type 'boolean
:group 'jabber)
;;;###autoload
(defconst jabber-presence-faces
'(("" . jabber-roster-user-online)
("away" . jabber-roster-user-away)
("xa" . jabber-roster-user-xa)
("dnd" . jabber-roster-user-dnd)
("chat" . jabber-roster-user-chatty)
("error" . jabber-roster-user-error)
(nil . jabber-roster-user-offline))
"Mapping from presence types to faces")
(defconst jabber-presence-strings
`(("" . ,(jabber-propertize "Online" 'face 'jabber-roster-user-online))
("away" . ,(jabber-propertize "Away" 'face 'jabber-roster-user-away))
("xa" . ,(jabber-propertize "Extended Away" 'face 'jabber-roster-user-xa))
("dnd" . ,(jabber-propertize "Do not Disturb" 'face 'jabber-roster-user-dnd))
("chat" . ,(jabber-propertize "Chatty" 'face 'jabber-roster-user-chatty))
("error" . ,(jabber-propertize "Error" 'face 'jabber-roster-user-error))
(nil . ,(jabber-propertize "Offline" 'face 'jabber-roster-user-offline)))
"Mapping from presence types to readable, colorized strings")
;;;###autoload
(defun jabber-customize ()
"customize jabber options"
(interactive)
(customize-group 'jabber))
;;;###autoload
(defun jabber-info ()
"open jabber.el manual"
(interactive)
(info "jabber"))
(provide 'jabber)
;;; arch-tag: 5145153e-4d19-4dc2-800c-b1282feb155d