X-Git-Url: https://cgit.sxemacs.org/?a=blobdiff_plain;ds=sidebyside;f=lisp%2Fgnus-audio.el;h=785a9367dd4f166b7c3d45b342c0e227fea7147b;hb=ba36b92e54449dbeb32d4a054ec74e564fd51ab2;hp=e84c1dfd9df3cb62ec1d25cc3cd66a3c07efbef2;hpb=4a73592139b4a5d6492a1ecec16a6d0348737b51;p=gnus diff --git a/lisp/gnus-audio.el b/lisp/gnus-audio.el index e84c1dfd9..785a9367d 100644 --- a/lisp/gnus-audio.el +++ b/lisp/gnus-audio.el @@ -1,7 +1,8 @@ ;;; gnus-audio.el --- Sound effects for Gnus -;; Copyright (C) 1996 Free Software Foundation +;; Copyright (C) 1996, 2000, 2003 Free Software Foundation ;; Author: Steven L. Baur +;; Keywords: news, mail, multimedia ;; This file is part of GNU Emacs. @@ -21,30 +22,40 @@ ;; Boston, MA 02111-1307, USA. ;;; Commentary: + ;; This file provides access to sound effects in Gnus. -;; Prerelease: This file is partially stripped to support earcons.el -;; You can safely ignore most of it until Red Gnus. **Evil Laugh** -;;; Code: +;; This file is partially stripped to support earcons.el. -(when (null (boundp 'running-xemacs)) - (defvar running-xemacs (string-match "XEmacs\\|Lucid" emacs-version))) +;;; Code: (require 'nnheader) -(eval-when-compile (require 'cl)) - -(defvar gnus-audio-inline-sound - (and (fboundp 'device-sound-enabled-p) - (device-sound-enabled-p)) - "When t, we will not spawn a subprocess to play sounds.") - -(defvar gnus-audio-directory (nnheader-find-etc-directory "sounds") - "The directory containing the Sound Files.") -(defvar gnus-audio-au-player "/usr/bin/showaudio" - "Executable program for playing sun AU format sound files.") +(defgroup gnus-audio nil + "Playing sound in Gnus." + :version "21.1" + :group 'gnus-visual + :group 'multimedia) -(defvar gnus-audio-wav-player "/usr/local/bin/play" - "Executable program for playing WAV files.") +(defvar gnus-audio-inline-sound + (or (if (fboundp 'device-sound-enabled-p) + (device-sound-enabled-p)) ; XEmacs + (fboundp 'play-sound)) ; Emacs 21 + "Non-nil means try to play sounds without using an external program.") + +(defcustom gnus-audio-directory (nnheader-find-etc-directory "sounds") + "The directory containing the Sound Files." + :type '(choice directory (const nil)) + :group 'gnus-audio) + +(defcustom gnus-audio-au-player (executable-find "play") + "Executable program for playing sun AU format sound files." + :group 'gnus-audio + :type '(choice file (const nil))) + +(defcustom gnus-audio-wav-player (executable-find "play") + "Executable program for playing WAV files." + :group 'gnus-audio + :type '(choice file (const nil))) ;;; The following isn't implemented yet. Wait for Millennium Gnus. ;;(defvar gnus-audio-effects-enabled t @@ -81,26 +92,33 @@ ;;;###autoload (defun gnus-audio-play (file) - "Play a sound through the speaker." - (interactive) + "Play a sound FILE through the speaker." + (interactive "fSound file name: ") (let ((sound-file (if (file-exists-p file) file - (concat gnus-audio-directory file)))) + (expand-file-name file gnus-audio-directory)))) (when (file-exists-p sound-file) - (if gnus-audio-inline-sound - (play-sound-file sound-file) - (cond ((string-match "\\.wav$" sound-file) - (call-process gnus-audio-wav-player - sound-file - 0 - nil - sound-file)) - ((string-match "\\.au$" sound-file) - (call-process gnus-audio-au-player - sound-file - 0 - nil - sound-file))))))) + (cond ((and gnus-audio-inline-sound + (condition-case nil + ;; Even if we have audio, we may fail with the + ;; wrong sort of sound file. + (progn (play-sound-file sound-file) + t) + (error nil)))) + ;; If we don't have built-in sound, or playing it failed, + ;; try with external program. + ((equal "wav" (file-name-extension sound-file)) + (call-process gnus-audio-wav-player + sound-file + 0 + nil + sound-file)) + ((equal "au" (file-name-extension sound-file)) + (call-process gnus-audio-au-player + sound-file + 0 + nil + sound-file)))))) ;;; The following isn't implemented yet, wait for Red Gnus