Merge the t-gnus-6_17-quimby branch.
[elisp/gnus.git-] / lisp / gnus-audio.el
1 ;;; gnus-audio.el --- Sound effects for Gnus
2
3 ;; Copyright (C) 1996, 2000, 2002, 2003, 2004,
4 ;;   2005, 2006 Free Software Foundation, Inc.
5
6 ;; Author: Steven L. Baur <steve@miranova.com>
7 ;; Keywords: news, mail, multimedia
8
9 ;; This file is part of GNU Emacs.
10
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
12 ;; it under the terms of the GNU General Public License as published by
13 ;; the Free Software Foundation; either version 2, or (at your option)
14 ;; any later version.
15
16 ;; GNU Emacs is distributed in the hope that it will be useful,
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 ;; GNU General Public License for more details.
20
21 ;; You should have received a copy of the GNU General Public License
22 ;; along with GNU Emacs; see the file COPYING.  If not, write to the
23 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
24 ;; Boston, MA 02110-1301, USA.
25
26 ;;; Commentary:
27
28 ;; This file provides access to sound effects in Gnus.
29 ;; This file is partially stripped to support earcons.el.
30
31 ;;; Code:
32
33 (require 'nnheader)
34
35 (require 'path-util)
36
37 (defgroup gnus-audio nil
38   "Playing sound in Gnus."
39   :version "21.1"
40   :group 'gnus-visual
41   :group 'multimedia)
42
43 (defvar gnus-audio-inline-sound
44   (or (if (fboundp 'device-sound-enabled-p)
45           (device-sound-enabled-p))     ; XEmacs
46       (fboundp 'play-sound))            ; Emacs 21
47   "Non-nil means try to play sounds without using an external program.")
48
49 (defcustom gnus-audio-directory (nnheader-find-etc-directory "sounds")
50   "The directory containing the Sound Files."
51   :type '(choice directory (const nil))
52   :group 'gnus-audio)
53
54 (defcustom gnus-audio-au-player (exec-installed-p "play")
55   "Executable program for playing sun AU format sound files."
56   :group 'gnus-audio
57   :type '(choice file (const nil)))
58
59 (defcustom gnus-audio-wav-player (exec-installed-p "play")
60   "Executable program for playing WAV files."
61   :group 'gnus-audio
62   :type '(choice file (const nil)))
63
64 ;;; The following isn't implemented yet.  Wait for Millennium Gnus.
65 ;;(defvar gnus-audio-effects-enabled t
66 ;;  "When t, Gnus will use sound effects.")
67 ;;(defvar gnus-audio-enable-hooks nil
68 ;;  "Functions run when enabling sound effects.")
69 ;;(defvar gnus-audio-disable-hooks nil
70 ;;  "Functions run when disabling sound effects.")
71 ;;(defvar gnus-audio-theme-song nil
72 ;;  "Theme song for Gnus.")
73 ;;(defvar gnus-audio-enter-group nil
74 ;;  "Sound effect played when selecting a group.")
75 ;;(defvar gnus-audio-exit-group nil
76 ;;  "Sound effect played when exiting a group.")
77 ;;(defvar gnus-audio-score-group nil
78 ;;  "Sound effect played when scoring a group.")
79 ;;(defvar gnus-audio-busy-sound nil
80 ;;  "Sound effect played when going into a ... sequence.")
81
82
83 ;;;###autoload
84 ;;(defun gnus-audio-enable-sound ()
85 ;;  "Enable Sound Effects for Gnus."
86 ;;  (interactive)
87 ;;  (setq gnus-audio-effects-enabled t)
88 ;;  (gnus-run-hooks gnus-audio-enable-hooks))
89
90 ;;;###autoload
91                                         ;(defun gnus-audio-disable-sound ()
92 ;;  "Disable Sound Effects for Gnus."
93 ;;  (interactive)
94 ;;  (setq gnus-audio-effects-enabled nil)
95 ;;  (gnus-run-hooks gnus-audio-disable-hooks))
96
97 ;;;###autoload
98 (defun gnus-audio-play (file)
99   "Play a sound FILE through the speaker."
100   (interactive "fSound file name: ")
101   (let ((sound-file (if (file-exists-p file)
102                         file
103                       (expand-file-name file gnus-audio-directory))))
104     (when (file-exists-p sound-file)
105       (cond ((and gnus-audio-inline-sound
106                   (condition-case nil
107                       ;; Even if we have audio, we may fail with the
108                       ;; wrong sort of sound file.
109                       (progn (play-sound-file sound-file)
110                              t)
111                     (error nil))))
112             ;; If we don't have built-in sound, or playing it failed,
113             ;; try with external program.
114             ((equal "wav" (file-name-extension sound-file))
115              (call-process gnus-audio-wav-player
116                            sound-file
117                            0
118                            nil
119                            sound-file))
120             ((equal "au" (file-name-extension sound-file))
121              (call-process gnus-audio-au-player
122                            sound-file
123                            0
124                            nil
125                            sound-file))))))
126
127
128 ;;; The following isn't implemented yet, wait for Red Gnus
129 ;;(defun gnus-audio-startrek-sounds ()
130 ;;  "Enable sounds from Star Trek the original series."
131 ;;  (interactive)
132 ;;  (setq gnus-audio-busy-sound "working.au")
133 ;;  (setq gnus-audio-enter-group "bulkhead_door.au")
134 ;;  (setq gnus-audio-exit-group "bulkhead_door.au")
135 ;;  (setq gnus-audio-score-group "ST_laser.au")
136 ;;  (setq gnus-audio-theme-song "startrek.au")
137 ;;  (add-hook 'gnus-select-group-hook 'gnus-audio-startrek-select-group)
138 ;;  (add-hook 'gnus-exit-group-hook 'gnus-audio-startrek-exit-group))
139 ;;;***
140
141 (defvar gnus-startup-jingle "Tuxedomoon.Jingle4.au"
142   "Name of the Gnus startup jingle file.")
143
144 (defun gnus-play-jingle ()
145   "Play the Gnus startup jingle, unless that's inhibited."
146   (interactive)
147   (gnus-audio-play gnus-startup-jingle))
148
149 (provide 'gnus-audio)
150
151 (run-hooks 'gnus-audio-load-hook)
152
153 ;;; gnus-audio.el ends here