# HG changeset patch # User Eli Zaretskii # Date 1139658341 0 # Node ID 29a4ce0514ee4c1b619a0b7937df9e4bb51f76b1 # Parent 200cf03b899c9c17a6450026e5b209fecbf940d6 (glasses-separator): Doc fix. (glasses-original-separator): New defcustom. (glasses-make-readable, glasses-convert-to-unreadable): Use it. diff -r 200cf03b899c -r 29a4ce0514ee lisp/progmodes/glasses.el --- a/lisp/progmodes/glasses.el Sat Feb 11 11:32:31 2006 +0000 +++ b/lisp/progmodes/glasses.el Sat Feb 11 11:45:41 2006 +0000 @@ -67,13 +67,31 @@ (defcustom glasses-separator "_" - "*String to be displayed as a visual separator in unreadable identifiers." + "*String to be displayed as a visual separator in identifiers. +It is used both for adding missing separators and for replacing separators +defined by `glasses-original-separator'. If you don't want to add missing +separators, set `glasses-separator' to an empty string. If you don't want to +replace existent separators, set `glasses-original-separator' to an empty +string." :group 'glasses :type 'string :set 'glasses-custom-set :initialize 'custom-initialize-default) +(defcustom glasses-original-separator "_" + "*String to be displayed as `glasses-separator' in separator positions. +For instance, if you set it to \"_\" and set `glasses-separator' to \"-\", +underscore separators are displayed as hyphens. +If `glasses-original-separator' is an empty string, no such display change is +performed." + :group 'glasses + :type 'string + :set 'glasses-custom-set + :initialize 'custom-initialize-default + :version "22.1") + + (defcustom glasses-face nil "*Face to be put on capitals of an identifier looked through glasses. If it is nil, no face is placed at the capitalized letter. @@ -196,15 +214,20 @@ (overlay-put o 'invisible t) (overlay-put o 'after-string (downcase (match-string n)))))) ;; Separator change - (unless (string= glasses-separator "_") + (when (and (not (string= glasses-original-separator glasses-separator)) + (not (string= glasses-original-separator ""))) (goto-char beg) - (while (re-search-forward "[a-zA-Z0-9]\\(_+\\)[a-zA-Z0-9]" end t) - (goto-char (match-beginning 1)) - (while (eql (char-after) ?\_) - (let ((o (glasses-make-overlay (point) (1+ (point))))) - ;; `concat' ensures the character properties won't merge - (overlay-put o 'display (concat glasses-separator))) - (forward-char)))) + (let ((original-regexp (regexp-quote glasses-original-separator))) + (while (re-search-forward + (format "[a-zA-Z0-9]\\(\\(%s\\)+\\)[a-zA-Z0-9]" + original-regexp) + end t) + (goto-char (match-beginning 1)) + (while (looking-at original-regexp) + (let ((o (glasses-make-overlay (point) (1+ (point))))) + ;; `concat' ensures the character properties won't merge + (overlay-put o 'display (concat glasses-separator))) + (goto-char (match-end 0)))))) ;; Parentheses (when glasses-separate-parentheses-p (goto-char beg) @@ -237,13 +260,13 @@ (let ((n (if (match-string 1) 1 2))) (replace-match "" t nil nil n) (goto-char (match-end n)))) - (unless (string= glasses-separator "_") - (goto-char (point-min)) - (while (re-search-forward (format "[a-zA-Z0-9]\\(%s+\\)[a-zA-Z0-9]" - separator) - nil t) - (replace-match "_" nil nil nil 1) - (goto-char (match-beginning 1)))) + (unless (string= glasses-separator glasses-original-separator) + (goto-char (point-min)) + (while (re-search-forward (format "[a-zA-Z0-9]\\(%s+\\)[a-zA-Z0-9]" + separator) + nil t) + (replace-match glasses-original-separator nil nil nil 1) + (goto-char (match-beginning 1)))) (when glasses-separate-parentheses-p (goto-char (point-min)) (while (re-search-forward "[a-zA-Z]_*\\( \\)\(" nil t)