X-Git-Url: https://cgit.sxemacs.org/?p=riece;a=blobdiff_plain;f=lisp%2Friece-ctcp.el;h=5fc14e0bc0923f7833136e99d5f78db3fb4c92b6;hp=8baad1dc6b19a8e4becc75280ee8336e07724dc3;hb=2d67acd4af1122a36fcc09b47a479b927ca03904;hpb=cdb2a45112b9ef60f88df1ff511a659a22caf85c diff --git a/lisp/riece-ctcp.el b/lisp/riece-ctcp.el index 8baad1d..5fc14e0 100644 --- a/lisp/riece-ctcp.el +++ b/lisp/riece-ctcp.el @@ -26,8 +26,8 @@ (require 'riece-version) (require 'riece-misc) -(require 'riece-display) (require 'riece-highlight) +(require 'riece-display) (defface riece-ctcp-action-face '((((class color) @@ -49,27 +49,13 @@ (defvar riece-dialogue-mode-map) -(defun riece-ctcp-requires () - (if (memq 'riece-highlight riece-addons) - '(riece-highlight))) +(defvar riece-ctcp-enabled nil) -(defun riece-ctcp-insinuate () - (add-hook 'riece-privmsg-hook 'riece-handle-ctcp-request) - (add-hook 'riece-notice-hook 'riece-handle-ctcp-response) - (if (memq 'riece-highlight riece-addons) - (setq riece-dialogue-font-lock-keywords - (cons (list (concat "^" riece-time-prefix-regexp "\\(" - (regexp-quote riece-ctcp-action-prefix) - ".*\\)$") - 1 riece-ctcp-action-face t t) - riece-dialogue-font-lock-keywords))) - (define-key riece-dialogue-mode-map "\C-cv" 'riece-command-ctcp-version) - (define-key riece-dialogue-mode-map "\C-cp" 'riece-command-ctcp-ping) - (define-key riece-dialogue-mode-map "\C-ca" 'riece-command-ctcp-action) - (define-key riece-dialogue-mode-map "\C-cc" 'riece-command-ctcp-clientinfo)) +(defconst riece-ctcp-description + "CTCP (Client To Client Protocol) support") (defun riece-handle-ctcp-request (prefix string) - (when (and prefix string + (when (and riece-ctcp-enabled prefix string (riece-prefix-nickname prefix)) (let* ((parameters (riece-split-parameters string)) (targets (split-string (car parameters) ",")) @@ -91,29 +77,29 @@ hook prefix (car targets) message) (error (if riece-debug - (message "Error occurred in `%S': %S" hook error)) + (message "Error in `%S': %S" hook error)) nil)) (if function (condition-case error (funcall function prefix (car targets) message) (error (if riece-debug - (message "Error occurred in `%S': %S" + (message "Error in `%S': %S" function error)))))) (condition-case error (run-hook-with-args-until-success after-hook prefix (car targets) message) (error (if riece-debug - (message "Error occurred in `%S': %S" + (message "Error in `%S': %S" after-hook error))))) t))))) (defun riece-handle-ctcp-version-request (prefix target string) - (let ((buffer (if (riece-channel-p target) - (riece-channel-buffer (riece-make-identity - target riece-server-name)))) - (user (riece-prefix-nickname prefix))) + (let* ((target-identity (riece-make-identity target riece-server-name)) + (buffer (if (riece-channel-p target) + (riece-channel-buffer target-identity))) + (user (riece-prefix-nickname prefix))) (riece-send-string (format "NOTICE %s :\1VERSION %s\1\r\n" user (riece-extended-version))) (riece-insert-change buffer (format "CTCP VERSION from %s\n" user)) @@ -127,14 +113,14 @@ (format "CTCP VERSION from %s (%s) to %s" user (riece-strip-user-at-host (riece-prefix-user-at-host prefix)) - (riece-format-identity target t))) + (riece-format-identity target-identity t))) "\n")))) (defun riece-handle-ctcp-ping-request (prefix target string) - (let ((buffer (if (riece-channel-p target) - (riece-channel-buffer (riece-make-identity - target riece-server-name)))) - (user (riece-prefix-nickname prefix))) + (let* ((target-identity (riece-make-identity target riece-server-name)) + (buffer (if (riece-channel-p target) + (riece-channel-buffer target-identity))) + (user (riece-prefix-nickname prefix))) (riece-send-string (if string (format "NOTICE %s :\1PING %s\1\r\n" user string) @@ -150,14 +136,14 @@ (format "CTCP PING from %s (%s) to %s" user (riece-strip-user-at-host (riece-prefix-user-at-host prefix)) - (riece-format-identity target t))) + (riece-format-identity target-identity t))) "\n")))) (defun riece-handle-ctcp-clientinfo-request (prefix target string) - (let ((buffer (if (riece-channel-p target) - (riece-channel-buffer (riece-make-identity - target riece-server-name)))) - (user (riece-prefix-nickname prefix))) + (let* ((target-identity (riece-make-identity target riece-server-name)) + (buffer (if (riece-channel-p target) + (riece-channel-buffer target-identity))) + (user (riece-prefix-nickname prefix))) (riece-send-string (format "NOTICE %s :\1CLIENTINFO %s\1\r\n" user @@ -186,7 +172,7 @@ (format "CTCP CLIENTINFO from %s (%s) to %s" user (riece-strip-user-at-host (riece-prefix-user-at-host prefix)) - (riece-format-identity target t))) + (riece-format-identity target-identity t))) "\n")))) (defun riece-handle-ctcp-action-request (prefix target string) @@ -205,7 +191,7 @@ " " string)) "\n")))) (defun riece-handle-ctcp-response (prefix string) - (when (and prefix string + (when (and riece-ctcp-enabled prefix string (riece-prefix-nickname prefix)) (let* ((parameters (riece-split-parameters string)) (targets (split-string (car parameters) ",")) @@ -226,21 +212,21 @@ hook prefix (car targets) message) (error (if riece-debug - (message "Error occurred in `%S': %S" hook error)) + (message "Error in `%S': %S" hook error)) nil)) (if function (condition-case error (funcall function prefix (car targets) message) (error (if riece-debug - (message "Error occurred in `%S': %S" + (message "Error in `%S': %S" function error)))))) (condition-case error (run-hook-with-args-until-success after-hook prefix (car targets) message) (error (if riece-debug - (message "Error occurred in `%S': %S" + (message "Error in `%S': %S" after-hook error))))) t))))) @@ -344,6 +330,35 @@ " (in " (riece-format-identity target t) ")"))) "\n")))) +(defun riece-ctcp-requires () + (if (memq 'riece-highlight riece-addons) + '(riece-highlight))) + +(defun riece-ctcp-insinuate () + (add-hook 'riece-privmsg-hook 'riece-handle-ctcp-request) + (add-hook 'riece-notice-hook 'riece-handle-ctcp-response) + (if (memq 'riece-highlight riece-addons) + (setq riece-dialogue-font-lock-keywords + (cons (list (concat "^" riece-time-prefix-regexp "\\(" + (regexp-quote riece-ctcp-action-prefix) + ".*\\)$") + 1 riece-ctcp-action-face t t) + riece-dialogue-font-lock-keywords)))) + +(defun riece-ctcp-enable () + (define-key riece-dialogue-mode-map "\C-cv" 'riece-command-ctcp-version) + (define-key riece-dialogue-mode-map "\C-cp" 'riece-command-ctcp-ping) + (define-key riece-dialogue-mode-map "\C-ca" 'riece-command-ctcp-action) + (define-key riece-dialogue-mode-map "\C-cc" 'riece-command-ctcp-clientinfo) + (setq riece-ctcp-enabled t)) + +(defun riece-ctcp-disable () + (define-key riece-dialogue-mode-map "\C-cv" nil) + (define-key riece-dialogue-mode-map "\C-cp" nil) + (define-key riece-dialogue-mode-map "\C-ca" nil) + (define-key riece-dialogue-mode-map "\C-cc" nil) + (setq riece-ctcp-enabled nil)) + (provide 'riece-ctcp) ;;; riece-ctcp.el ends here