summaryrefslogtreecommitdiff
path: root/lisp/erc/erc-sound.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/erc/erc-sound.el')
-rw-r--r--lisp/erc/erc-sound.el81
1 files changed, 39 insertions, 42 deletions
diff --git a/lisp/erc/erc-sound.el b/lisp/erc/erc-sound.el
index bbcddafc231..e152d8ed0df 100644
--- a/lisp/erc/erc-sound.el
+++ b/lisp/erc/erc-sound.el
@@ -21,9 +21,26 @@
;;; Commentary:
-;; This used to be in erc.el, I (Jorgen) just extracted it from there
-;; and put it in this file. Bugs and features are those of the
-;; original author.
+;; Play sounds when users send you CTCP SOUND messages.
+
+;; This file also defines the command /sound so that you can send
+;; sound requests to other users.
+
+;;; Usage:
+
+;; Add the following to your .emacs if you want to play sounds.
+;;
+;; (require 'erc-soud)
+;; (erc-sound-enable)
+;;
+;; To send requests to other users from within query buffers, type the
+;; following:
+;;
+;; /sound filename optional-message-text
+;;
+;; You can also type the following:
+;;
+;; /ctcp nickname sound filename optional-message
;;; Code:
@@ -34,9 +51,11 @@
"In ERC sound mode, the client will respond to CTCP SOUND requests
and play sound files as requested."
;; Enable:
- ((define-key erc-mode-map "\C-c\C-s" 'erc-toggle-sound))
+ ((add-hook 'erc-ctcp-query-SOUND-hook 'erc-ctcp-query-SOUND)
+ (define-key erc-mode-map "\C-c\C-s" 'erc-toggle-sound))
;; Disable:
- ((define-key erc-mode-map "\C-c\C-s" 'undefined)))
+ ((remove-hook 'erc-ctcp-query-SOUND-hook 'erc-ctcp-query-SOUND)
+ (define-key erc-mode-map "\C-c\C-s" 'undefined)))
(erc-define-catalog-entry 'english 'CTCP-SOUND "%n (%u@%h) plays %s:%m")
@@ -45,7 +64,7 @@ and play sound files as requested."
:group 'erc)
(defcustom erc-play-sound t
- "*Play sound on SOUND ctcp requests (used in ICQ chat)."
+ "*Play sounds when you receive CTCP SOUND requests."
:group 'erc-sound
:type 'boolean)
@@ -55,18 +74,22 @@ and play sound files as requested."
:type '(repeat directory))
(defcustom erc-default-sound nil
- "Play this sound if the requested file was not found."
+ "Play this sound if the requested file was not found.
+If this is set to nil or the file doesn't exist a beep will sound."
:group 'erc-sound
:type '(choice (const nil)
file))
-(defcustom erc-play-command "play"
- "Command for playing sound samples."
- :group 'erc-sound
- :type 'string)
+(defvar erc-ctcp-query-SOUND-hook nil
+ "Hook to run after receiving a CTCP SOUND request.")
(defun erc-cmd-SOUND (line &optional force)
- "Play the sound given in LINE."
+ "Send a CTCP SOUND message to the default target.
+If `erc-play-sound' is non-nil, play the sound as well.
+
+/sound filename optional-message-text
+
+LINE is the text entered, including the command."
(cond
((string-match "^\\s-*\\(\\S-+\\)\\(\\s-.*\\)?$" line)
(let ((file (match-string 1 line))
@@ -84,8 +107,8 @@ and play sound files as requested."
t))
(t nil)))
-(defvar erc-ctcp-query-SOUND-hook '(erc-ctcp-query-SOUND))
(defun erc-ctcp-query-SOUND (proc nick login host to msg)
+ "Display a CTCP SOUND message and play sound if `erc-play-sound' is non-nil."
(when (string-match "^SOUND\\s-+\\(\\S-+\\)\\(\\(\\s-+.*\\)\\|\\(\\s-*\\)\\)$" msg)
(let ((sound (match-string 1 msg))
(comment (match-string 2 msg)))
@@ -96,42 +119,16 @@ and play sound files as requested."
nil)
(defun erc-play-sound (file)
- "Plays a sound file located in one of the directories in `erc-sound-path'
-with a command `erc-play-command'."
+ "Play a sound file located in one of the directories in `erc-sound-path'.
+See also `play-sound-file'."
(let ((filepath (erc-find-file file erc-sound-path)))
(if (and (not filepath) erc-default-sound)
(setq filepath erc-default-sound))
(cond ((and filepath (file-exists-p filepath))
- (if (and (fboundp 'device-sound-enabled-p)
- (device-sound-enabled-p))
- ; For XEmacs
- (play-sound-file filepath)
-; (start-process "erc-sound" nil erc-play-command filepath)
- (start-process "erc-sound" nil "/bin/tcsh" "-c"
- (concat erc-play-command " " filepath))))
+ (play-sound-file filepath))
(t (beep)))
(erc-log (format "Playing sound file %S" filepath))))
-;(defun erc-play-sound (file)
-; "Plays a sound file located in one of the directories in `erc-sound-path'
-; with a command `erc-play-command'."
-; (let ((filepath nil)
-; (paths erc-sound-path))
-; (while (and paths
-; (progn (setq filepath (expand-file-name file (car paths)))
-; (not (file-exists-p filepath))))
-; (setq paths (cdr paths)))
-; (if (and (not (and filepath (file-exists-p filepath)))
-; erc-default-sound)
-; (setq filepath erc-default-sound))
-; (cond ((and filepath (file-exists-p filepath))
-;; (start-process "erc-sound" nil erc-play-command filepath)
-; (start-process "erc-sound" nil "/bin/tcsh" "-c"
-; (concat erc-play-command " " filepath))
-; )
-; (t (beep)))
-; (erc-log (format "Playing sound file %S" filepath))))
-
(defun erc-toggle-sound (&optional arg)
"Toggles playing sounds on and off. With positive argument,
turns them on. With any other argument turns sounds off."