X-Git-Url: http://cgit.sxemacs.org/?p=riece;a=blobdiff_plain;f=lisp%2Friece-alias.el;h=f2bb6953aae4feace2fac76954204fedb844b978;hp=c55d0458e49676d01dd281ab52e401e418928128;hb=5a45c8b53ddb25f03bdab9f3491a92c064c47c7a;hpb=f77e2ad3c384eb426615207dbad26f14d80a4db5 diff --git a/lisp/riece-alias.el b/lisp/riece-alias.el index c55d045..f2bb695 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 @@ -18,17 +18,18 @@ ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, 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: @@ -36,7 +37,7 @@ (require 'riece-signal) (defgroup riece-alias nil - "Define aliases of names" + "Aliases of channel/user names." :prefix "riece-" :group 'riece) @@ -50,7 +51,7 @@ :type 'boolean :group 'riece-alias) -(defcustom riece-alias-alternate-separator nil +(defcustom riece-alias-alternate-separator "@" "A string to separate prefix and server." :type '(choice (const nil) string) :group 'riece-alias) @@ -60,10 +61,8 @@ :type 'list :group 'riece-alias) -(defvar riece-alias-enabled nil) - (defconst riece-alias-description - "Define aliases of channel/user names") + "Define aliases for IRC names.") (defun riece-alias-abbrev-percent-hack (string) (if (string-match (concat "^#\\([^ ]+\\):" @@ -101,27 +100,22 @@ (defun riece-alias-expand-alternate-separator (string) (let ((index 0) prefix - server - length) + server) (while (and (null prefix) (string-match - (concat "\\(" + (concat (regexp-quote riece-alias-alternate-separator) + (regexp-quote riece-alias-alternate-separator) + "\\|\\(" (regexp-quote riece-alias-alternate-separator) - "\\)+") + "\\)") string index)) - (setq length (/ (- (match-end 0) (match-beginning 0)) - (length riece-alias-alternate-separator)) - string (replace-match - (mapconcat #'identity - (make-list (/ length 2) - riece-alias-alternate-separator) - "") - nil t string) - index (+ (match-beginning 0) - (* (/ length 2) - (length riece-alias-alternate-separator)))) - (unless (zerop (% length 2)) - (setq prefix (substring string 0 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) @@ -131,10 +125,10 @@ (concat riece-alias-alternate-separator riece-alias-alternate-separator)) server index) - (setq server (replace-match - riece-alias-alternate-separator - nil t server) - index (1- (match-end 0)))) + (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) @@ -143,25 +137,25 @@ (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) - (if riece-alias-enable-percent-hack - (setq string (riece-alias-expand-percent-hack 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))) - (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))) + (if riece-alias-enable-percent-hack + (setq string (riece-alias-expand-percent-hack string))) + (copy-sequence string)) (defun riece-alias-insinuate () ) @@ -171,14 +165,12 @@ #'riece-alias-abbrev-identity-string riece-expand-identity-string-function #'riece-alias-expand-identity-string) - (riece-emit-signal 'channel-list-changed) - (setq riece-alias-enabled t)) + (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) - (setq riece-alias-enabled nil)) + (riece-emit-signal 'channel-list-changed)) (provide 'riece-alias)