X-Git-Url: https://cgit.sxemacs.org/?p=riece;a=blobdiff_plain;f=lisp%2Friece-alias.el;h=f935d11d18e9059d91ea76633c0b6c69711d765b;hp=bbf7db96895b18a0d5d6e2ff9df45156d59f4cad;hb=b62fd356f4588eee7ad91a251851e64e6e7f7543;hpb=0082eb0326335a2d208ed93331d86228aaea233c diff --git a/lisp/riece-alias.el b/lisp/riece-alias.el index bbf7db9..f935d11 100644 --- a/lisp/riece-alias.el +++ b/lisp/riece-alias.el @@ -50,6 +50,11 @@ :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 @@ -74,27 +79,84 @@ 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 (car (car alist)) 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 (cdr (car alist)) 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 () )