250 lines
7.7 KiB
EmacsLisp
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
|