X-Git-Url: http://cgit.sxemacs.org/?p=riece;a=blobdiff_plain;f=lisp%2Friece-alias.el;h=1fd0314eb410437c9e27ab7bc8fcba64366bbfd5;hp=47553105144db44fe0cc09c72ffba0c8a98a1f06;hb=74171ef56b0be17199a1542975dc18244c23be89;hpb=107d20094003503fbc588b00e239c490f17d5c67 diff --git a/lisp/riece-alias.el b/lisp/riece-alias.el index 4755310..1fd0314 100644 --- a/lisp/riece-alias.el +++ b/lisp/riece-alias.el @@ -1,4 +1,4 @@ -;;; riece-alias.el --- define aliases of names +;;; riece-alias.el --- define aliases for IRC names ;; Copyright (C) 1998-2003 Daiki Ueno ;; Author: Daiki Ueno @@ -21,21 +21,23 @@ ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. -;; This add-on allows you to define aliases for IRC names. +;;; Commentary: + +;; NOTE: This is an add-on module for Riece. -;; To use, add the following line to your ~/.riece/init.el: -;; (add-to-list 'riece-addons 'riece-alias) +;; This add-on allows you to define aliases for IRC names. -;; For example, if you want to define an alias `#l' for `#Liece', you +;; For example, if you want to define an alias `#r' for `#riece', you ;; can customize riece-alias-alist as follows: -;; (setq riece-alias-alist '(("#Liece" . "#l"))) +;; (setq riece-alias-alist '(("#riece" . "#r"))) ;;; Code: (require 'riece-identity) +(require 'riece-signal) (defgroup riece-alias nil - "Define aliases of names" + "Aliases of channel/user names." :prefix "riece-" :group 'riece) @@ -49,11 +51,19 @@ :type 'boolean :group 'riece-alias) +(defcustom riece-alias-alternate-separator "@" + "A string to separate prefix and server." + :type '(choice (const nil) string) + :group 'riece-alias) + (defcustom riece-alias-alist nil "An alist mapping aliases to names." :type 'list :group 'riece-alias) +(defconst riece-alias-description + "Define aliases for IRC names.") + (defun riece-alias-abbrev-percent-hack (string) (if (string-match (concat "^#\\([^ ]+\\):" (regexp-quote riece-alias-percent-hack-mask) @@ -68,33 +78,99 @@ nil nil string) string)) +(defun riece-alias-escape-alternate-separator (string) + (let ((index 0)) + (while (string-match (regexp-quote riece-alias-alternate-separator) + string index) + (setq index (1+ (match-end 0)) + string (replace-match (concat riece-alias-alternate-separator + riece-alias-alternate-separator) + nil t string))) + string)) + +(defun riece-alias-abbrev-alternate-separator (string) + (if (string-match " " string) + (let ((prefix (substring string 0 (match-beginning 0))) + (server (substring string (match-end 0)))) + (concat (riece-alias-escape-alternate-separator prefix) + riece-alias-alternate-separator + (riece-alias-escape-alternate-separator server))) + (riece-alias-escape-alternate-separator string))) + +(defun riece-alias-expand-alternate-separator (string) + (let ((index 0) + prefix + server) + (while (and (null prefix) + (string-match + (concat (regexp-quote riece-alias-alternate-separator) + (regexp-quote riece-alias-alternate-separator) + "\\|\\(" + (regexp-quote riece-alias-alternate-separator) + "\\)") + string index)) + (if (match-beginning 1) ;found a separator + (setq prefix (substring string 0 (match-beginning 1)) + index (match-end 1)) + (setq string (replace-match riece-alias-alternate-separator + nil t string) + index (- (match-end 0) + (length riece-alias-alternate-separator))))) + (if (null prefix) + string + (setq server (substring string index) + index 0) + (if (equal server "") + (while (string-match (regexp-quote + (concat riece-alias-alternate-separator + riece-alias-alternate-separator)) + server index) + (setq server (replace-match riece-alias-alternate-separator + nil t server) + index (- (match-end 0) + (length riece-alias-alternate-separator)))) + (concat prefix " " server))))) + (defun riece-alias-abbrev-identity-string (string) (if riece-alias-enable-percent-hack (setq string (riece-alias-abbrev-percent-hack string))) + (if riece-alias-alternate-separator + (setq string (riece-alias-abbrev-alternate-separator string))) (let ((alist riece-alias-alist)) - (catch 'done - (while alist - (if (equal (car (car alist)) string) - (throw 'done (cdr (car alist)))) - (setq alist (cdr alist))) - string))) + (while alist + (if (equal (downcase (car (car alist))) (downcase string)) + (setq string (cdr (car alist)) + alist nil) + (setq alist (cdr alist))))) + (copy-sequence string)) (defun riece-alias-expand-identity-string (string) + (let ((alist riece-alias-alist)) + (while alist + (if (equal (downcase (cdr (car alist))) (downcase string)) + (setq string (car (car alist)) + alist nil) + (setq alist (cdr alist))))) + (if riece-alias-alternate-separator + (setq string (riece-alias-expand-alternate-separator string))) (if riece-alias-enable-percent-hack (setq string (riece-alias-expand-percent-hack string))) - (let ((alist riece-alias-alist)) - (catch 'done - (while alist - (if (equal (cdr (car alist)) string) - (throw 'done (car (car alist)))) - (setq alist (cdr alist))) - string))) + (copy-sequence string)) (defun riece-alias-insinuate () + ) + +(defun riece-alias-enable () (setq riece-abbrev-identity-string-function #'riece-alias-abbrev-identity-string riece-expand-identity-string-function - #'riece-alias-expand-identity-string)) + #'riece-alias-expand-identity-string) + (riece-emit-signal 'channel-list-changed)) + +(defun riece-alias-disable () + (setq riece-abbrev-identity-string-function nil + riece-expand-identity-string-function nil) + (riece-emit-signal 'channel-list-changed)) (provide 'riece-alias)