123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- (require 'erc)
- (define-erc-module page ctcp-page
- "Process CTCP PAGE requests from IRC."
- nil nil)
- (erc-define-catalog-entry 'english 'CTCP-PAGE "Page from %n (%u@%h): %m")
- (defgroup erc-page nil
- "React to CTCP PAGE messages."
- :group 'erc)
- (defcustom erc-page-function nil
- "A function to process a \"page\" request.
- If nil, this prints the page message in the minibuffer and calls
- `beep'. If non-nil, it must be a function that takes two arguments:
- SENDER and MSG, both strings.
- Example for your ~/.emacs file:
- \(setq erc-page-function
- (lambda (sender msg)
- (play-sound-file \"/home/alex/elisp/erc/sounds/ni.wav\")
- (message \"IRC Page from %s: %s\" sender msg)))"
- :group 'erc-page
- :type '(choice (const nil)
- (function)))
- (defcustom erc-ctcp-query-PAGE-hook '(erc-ctcp-query-PAGE)
- "List of functions to be called when a CTCP PAGE is received.
- This is called from `erc-process-ctcp-query'. The functions are called
- with six arguments: PROC NICK LOGIN HOST TO MSG. Note that you can
- also set `erc-page-function' to a function, which only gets two arguments,
- SENDER and MSG, so that might be easier to use."
- :group 'erc-page
- :type '(repeat function))
- (defun erc-ctcp-query-PAGE (proc nick login host to msg)
- "Deal with an CTCP PAGE query, if `erc-page-mode' is non-nil.
- This will call `erc-page-function', if defined, or it will just print
- a message and `beep'. In addition to that, the page message is also
- inserted into the server buffer."
- (when (and erc-page-mode
- (string-match "PAGE\\(\\s-+.*\\)?$" msg))
- (let* ((m (match-string 1 msg))
- (page-msg (if m (erc-controls-interpret (substring m 1))
- "[no message]"))
- text)
- (if m (setq m (substring m 1)))
- (setq text (erc-format-message 'CTCP-PAGE
- ?n nick ?u login
- ?h host ?m page-msg))
- (if erc-page-function
- (funcall erc-page-function nick page-msg)
-
- (message "%s" text)
- (beep))
-
- (erc-display-message
- nil 'notice nil text)))
- nil)
- (defun erc-cmd-PAGE (line &optional force)
- "Send a CTCP page to the user given as the first word in LINE.
- The rest of LINE is the message to send. Note that you will only
- receive pages if `erc-page-mode' is on."
- (when (string-match "^\\s-*\\(\\S-+\\) ?\\(.*\\)" line)
- (let ((nick (match-string 1 line))
- (msg (match-string 2 line)))
- (erc-cmd-CTCP nick "PAGE" msg))))
- (put 'erc-cmd-PAGE 'do-not-parse-args t)
- (provide 'erc-page)
|