annotate lisp/progmodes/glasses.el @ 63308:51d38cfbe542

Warn about using "cvs up -kb" if one intends to commit changes. Add a pointer to another site with detailed configure and build instructions. Suggest to look at config.log when configure fails. Add MinGW Make 3.80 to the list of successful combinations.
author Eli Zaretskii <eliz@gnu.org>
date Sat, 11 Jun 2005 11:31:29 +0000
parents bb8465da2472
children 18a818a2ee7c 02f1dbc4a199
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27469
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1 ;;; glasses.el --- make cantReadThis readable
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2
61285
bb8465da2472 (glasses-mode): Specify :group.
Lute Kamstra <lute@gnu.org>
parents: 52401
diff changeset
3 ;; Copyright (C) 1999, 2000, 2001, 2005 Free Software Foundation, Inc.
27469
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
4
38176
2a85f8119924 (glasses-make-readable): Consider
Gerd Moellmann <gerd@gnu.org>
parents: 34473
diff changeset
5 ;; Author: Milan Zamazal <pdm@zamazal.org>
2a85f8119924 (glasses-make-readable): Consider
Gerd Moellmann <gerd@gnu.org>
parents: 34473
diff changeset
6 ;; Maintainer: Milan Zamazal <pdm@zamazal.org>
27469
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
7 ;; Keywords: tools
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
8
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
10
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
14 ;; any later version.
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
15
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
19 ;; GNU General Public License for more details.
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
20
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
24 ;; Boston, MA 02111-1307, USA.
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
25
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
26 ;;; Commentary:
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
27
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
28 ;; This file defines a minor mode for making unreadableIdentifiersLikeThis
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
29 ;; readable. In some environments, for instance Java, it is common to use such
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
30 ;; unreadable identifiers. It is not good to use underscores in identifiers of
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
31 ;; your own project in such an environment to make your sources more readable,
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
32 ;; since it introduces undesirable confusion, which is worse than the
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
33 ;; unreadability. Fortunately, you use Emacs for the subproject, so the
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
34 ;; problem can be solved some way.
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
35 ;;
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
36 ;; This file defines the `glasses-mode' minor mode, which displays underscores
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
37 ;; between all the pairs of lower and upper English letters. (This only
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
38 ;; displays underscores, the text is not changed actually.) Alternatively, you
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
39 ;; can say you want the capitals in some given face (e.g. bold).
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
40 ;;
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
41 ;; The mode does something usable, though not perfect. Improvement suggestions
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
42 ;; from Emacs experts are welcome.
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
43 ;;
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
44 ;; If you like in-identifier separators different from underscores, change the
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
45 ;; value of the variable `glasses-separator' appropriately. See also the
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
46 ;; variables `glasses-face' and `glasses-convert-on-write-p'. You can also use
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
47 ;; the command `M-x customize-group RET glasses RET'.
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
48 ;;
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
49 ;; If you set any of the variables `glasses-separator' or `glasses-face' after
28498
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
50 ;; glasses.el is loaded in a different way than through customize, you
27469
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
51 ;; should call the function `glasses-set-overlay-properties' afterwards.
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
52
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
53 ;;; Code:
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
54
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
55
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
56 (eval-when-compile
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
57 (require 'cl))
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
58
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
59
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
60 ;;; User variables
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
61
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
62
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
63 (defgroup glasses nil
28498
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
64 "Make unreadable code likeThis(one) readable."
30814
1b2e8bd62f76 (glasses) <defgroup>: Add :version.
Dave Love <fx@gnu.org>
parents: 30523
diff changeset
65 :version "21.1"
27469
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
66 :group 'tools)
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
67
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
68
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
69 (defcustom glasses-separator "_"
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
70 "*String to be displayed as a visual separator in unreadable identifiers."
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
71 :group 'glasses
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
72 :type 'string
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
73 :set 'glasses-custom-set
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
74 :initialize 'custom-initialize-default)
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
75
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
76
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
77 (defcustom glasses-face nil
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
78 "*Face to be put on capitals of an identifier looked through glasses.
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
79 If it is nil, no face is placed at the capitalized letter.
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
80
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
81 For example, you can set `glasses-separator' to an empty string and
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
82 `glasses-face' to `bold'. Then unreadable identifiers will have no separators,
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
83 but will have their capitals in bold."
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
84 :group 'glasses
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
85 :type 'symbol
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
86 :set 'glasses-custom-set
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
87 :initialize 'custom-initialize-default)
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
88
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
89
28498
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
90 (defcustom glasses-separate-parentheses-p t
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
91 "*If non-nil, ensure space between an identifier and an opening parenthesis."
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
92 :group 'glasses
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
93 :type 'boolean)
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
94
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
95
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
96 (defcustom glasses-uncapitalize-p nil
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
97 "*If non-nil, downcase embedded capital letters in identifiers.
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
98 Only identifiers starting with lower case letters are affected, letters inside
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
99 other identifiers are unchanged."
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
100 :group 'glasses
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
101 :type 'boolean
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
102 :set 'glasses-custom-set
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
103 :initialize 'custom-initialize-default)
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
104
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
105
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
106 (defcustom glasses-uncapitalize-regexp "[a-z]"
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
107 "*Regexp matching beginnings of words to be uncapitalized.
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
108 Only words starting with this regexp are uncapitalized.
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
109 The regexp is case sensitive.
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
110 It has any effect only when `glasses-uncapitalize-p' is non-nil."
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
111 :group 'glasses
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
112 :type 'regexp
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
113 :set 'glasses-custom-set
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
114 :initialize 'custom-initialize-default)
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
115
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
116
27469
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
117 (defcustom glasses-convert-on-write-p nil
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
118 "*If non-nil, remove separators when writing glasses buffer to a file.
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
119 If you are confused by glasses so much, that you write the separators into code
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
120 during coding, set this variable to t. The separators will be removed on each
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
121 file write then.
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
122
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
123 Note the removal action does not try to be much clever, so it can remove real
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
124 separators too."
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
125 :group 'glasses
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
126 :type 'boolean)
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
127
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
128
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
129 (defun glasses-custom-set (symbol value)
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
130 "Set value of the variable SYMBOL to VALUE and update overlay categories.
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
131 Used in :set parameter of some customized glasses variables."
30814
1b2e8bd62f76 (glasses) <defgroup>: Add :version.
Dave Love <fx@gnu.org>
parents: 30523
diff changeset
132 (set-default symbol value)
27469
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
133 (glasses-set-overlay-properties))
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
134
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
135
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
136 ;;; Utility functions
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
137
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
138
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
139 (defun glasses-set-overlay-properties ()
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
140 "Set properties of glasses overlays.
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
141 Consider current setting of user variables."
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
142 ;; In-identifier overlay
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
143 (put 'glasses 'evaporate t)
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
144 (put 'glasses 'before-string glasses-separator)
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
145 (put 'glasses 'face glasses-face)
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
146 ;; Beg-identifier overlay
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
147 (put 'glasses-init 'evaporate t)
28498
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
148 (put 'glasses-init 'face glasses-face)
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
149 ;; Parenthesis overlay
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
150 (put 'glasses-parenthesis 'evaporate t)
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
151 (put 'glasses-parenthesis 'before-string " "))
27469
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
152
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
153 (glasses-set-overlay-properties)
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
154
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
155
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
156 (defun glasses-overlay-p (overlay)
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
157 "Return whether OVERLAY is an overlay of glasses mode."
28498
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
158 (memq (overlay-get overlay 'category)
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
159 '(glasses glasses-init glasses-parenthesis)))
27469
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
160
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
161
28498
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
162 (defun glasses-make-overlay (beg end &optional category)
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
163 "Create and return readability overlay over the region from BEG to END.
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
164 CATEGORY is the overlay category. If it is nil, use the `glasses' category."
27469
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
165 (let ((overlay (make-overlay beg end)))
28498
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
166 (overlay-put overlay 'category (or category 'glasses))
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
167 overlay))
27469
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
168
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
169
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
170 (defun glasses-make-readable (beg end)
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
171 "Make identifiers in the region from BEG to END readable."
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
172 (let ((case-fold-search nil))
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
173 (save-excursion
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
174 (save-match-data
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
175 ;; Face only
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
176 (goto-char beg)
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
177 (while (re-search-forward
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
178 "\\<\\([A-Z]\\)[a-zA-Z]*\\([a-z][A-Z]\\|[A-Z][a-z]\\)"
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
179 end t)
28498
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
180 (glasses-make-overlay (match-beginning 1) (match-end 1)
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
181 'glasses-init))
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
182 ;; Face + separator
27469
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
183 (goto-char beg)
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
184 (while (re-search-forward "[a-z]\\([A-Z]\\)\\|[A-Z]\\([A-Z]\\)[a-z]"
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
185 end t)
28498
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
186 (let* ((n (if (match-string 1) 1 2))
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
187 (o (glasses-make-overlay (match-beginning n) (match-end n))))
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
188 (goto-char (match-beginning n))
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
189 (when (and glasses-uncapitalize-p
30523
87bca20b7a83 (glasses-make-readable): Fix uncapitalization of
Gerd Moellmann <gerd@gnu.org>
parents: 28810
diff changeset
190 (save-match-data
87bca20b7a83 (glasses-make-readable): Fix uncapitalization of
Gerd Moellmann <gerd@gnu.org>
parents: 28810
diff changeset
191 (looking-at "[A-Z]\\($\\|[^A-Z]\\)"))
28498
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
192 (save-excursion
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
193 (save-match-data
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
194 (re-search-backward "\\<.")
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
195 (looking-at glasses-uncapitalize-regexp))))
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
196 (overlay-put o 'invisible t)
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
197 (overlay-put o 'after-string (downcase (match-string n))))))
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
198 ;; Parentheses
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
199 (when glasses-separate-parentheses-p
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
200 (goto-char beg)
38176
2a85f8119924 (glasses-make-readable): Consider
Gerd Moellmann <gerd@gnu.org>
parents: 34473
diff changeset
201 (while (re-search-forward "[a-zA-Z]_*\\(\(\\)" end t)
28498
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
202 (glasses-make-overlay (match-beginning 1) (match-end 1)
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
203 'glasses-parenthesis)))))))
27469
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
204
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
205
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
206 (defun glasses-make-unreadable (beg end)
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
207 "Return identifiers in the region from BEG to END to their unreadable state."
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
208 (dolist (o (overlays-in beg end))
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
209 (when (glasses-overlay-p o)
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
210 (delete-overlay o))))
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
211
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
212
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
213 (defun glasses-convert-to-unreadable ()
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
214 "Convert current buffer to unreadable identifiers and return nil.
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
215 This function modifies buffer contents, it removes all the separators,
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
216 recognized according to the current value of the variable `glasses-separator'."
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
217 (when (and glasses-convert-on-write-p
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
218 (not (string= glasses-separator "")))
28810
4756047a4398 (glasses-convert-to-unreadable): Use
Gerd Moellmann <gerd@gnu.org>
parents: 28498
diff changeset
219 (let ((case-fold-search nil)
4756047a4398 (glasses-convert-to-unreadable): Use
Gerd Moellmann <gerd@gnu.org>
parents: 28498
diff changeset
220 (separator (regexp-quote glasses-separator)))
27469
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
221 (save-excursion
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
222 (goto-char (point-min))
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
223 (while (re-search-forward
28810
4756047a4398 (glasses-convert-to-unreadable): Use
Gerd Moellmann <gerd@gnu.org>
parents: 28498
diff changeset
224 (format "[a-z]\\(%s\\)[A-Z]\\|[A-Z]\\(%s\\)[A-Z][a-z]"
4756047a4398 (glasses-convert-to-unreadable): Use
Gerd Moellmann <gerd@gnu.org>
parents: 28498
diff changeset
225 separator separator)
4756047a4398 (glasses-convert-to-unreadable): Use
Gerd Moellmann <gerd@gnu.org>
parents: 28498
diff changeset
226 nil t)
27469
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
227 (let ((n (if (match-string 1) 1 2)))
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
228 (replace-match "" t nil nil n)
28498
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
229 (goto-char (match-end n))))
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
230 (when glasses-separate-parentheses-p
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
231 (goto-char (point-min))
39088
2fc21ed3beac (glasses-convert-to-unreadable): Consider
Gerd Moellmann <gerd@gnu.org>
parents: 38176
diff changeset
232 (while (re-search-forward "[a-zA-Z]_*\\( \\)\(" nil t)
28498
809168962c9b Provide facilities for inserting space before left
Gerd Moellmann <gerd@gnu.org>
parents: 27469
diff changeset
233 (replace-match "" t nil nil 1))))))
27469
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
234 ;; nil must be returned to allow use in write file hooks
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
235 nil)
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
236
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
237
34473
e859388caea4 Use `define-minor-mode' for the minor mode
Gerd Moellmann <gerd@gnu.org>
parents: 34338
diff changeset
238 (defun glasses-change (beg end &optional old-len)
27469
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
239 "After-change function updating glass overlays."
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
240 (let ((beg-line (save-excursion (goto-char beg) (line-beginning-position)))
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
241 (end-line (save-excursion (goto-char end) (line-end-position))))
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
242 (glasses-make-unreadable beg-line end-line)
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
243 (glasses-make-readable beg-line end-line)))
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
244
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
245
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
246 ;;; Minor mode definition
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
247
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
248
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
249 ;;;###autoload
34473
e859388caea4 Use `define-minor-mode' for the minor mode
Gerd Moellmann <gerd@gnu.org>
parents: 34338
diff changeset
250 (define-minor-mode glasses-mode
27469
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
251 "Minor mode for making identifiers likeThis readable.
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
252 When this mode is active, it tries to add virtual separators (like underscores)
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
253 at places they belong to."
61285
bb8465da2472 (glasses-mode): Specify :group.
Lute Kamstra <lute@gnu.org>
parents: 52401
diff changeset
254 :group 'glasses :lighter " o^o"
34473
e859388caea4 Use `define-minor-mode' for the minor mode
Gerd Moellmann <gerd@gnu.org>
parents: 34338
diff changeset
255 (save-excursion
e859388caea4 Use `define-minor-mode' for the minor mode
Gerd Moellmann <gerd@gnu.org>
parents: 34338
diff changeset
256 (save-restriction
e859388caea4 Use `define-minor-mode' for the minor mode
Gerd Moellmann <gerd@gnu.org>
parents: 34338
diff changeset
257 (widen)
e859388caea4 Use `define-minor-mode' for the minor mode
Gerd Moellmann <gerd@gnu.org>
parents: 34338
diff changeset
258 ;; We erase all the overlays anyway, to avoid dual sight in some
e859388caea4 Use `define-minor-mode' for the minor mode
Gerd Moellmann <gerd@gnu.org>
parents: 34338
diff changeset
259 ;; circumstances
e859388caea4 Use `define-minor-mode' for the minor mode
Gerd Moellmann <gerd@gnu.org>
parents: 34338
diff changeset
260 (glasses-make-unreadable (point-min) (point-max))
e859388caea4 Use `define-minor-mode' for the minor mode
Gerd Moellmann <gerd@gnu.org>
parents: 34338
diff changeset
261 (if glasses-mode
e859388caea4 Use `define-minor-mode' for the minor mode
Gerd Moellmann <gerd@gnu.org>
parents: 34338
diff changeset
262 (progn
e859388caea4 Use `define-minor-mode' for the minor mode
Gerd Moellmann <gerd@gnu.org>
parents: 34338
diff changeset
263 (jit-lock-register 'glasses-change)
e859388caea4 Use `define-minor-mode' for the minor mode
Gerd Moellmann <gerd@gnu.org>
parents: 34338
diff changeset
264 (add-hook 'local-write-file-hooks
e859388caea4 Use `define-minor-mode' for the minor mode
Gerd Moellmann <gerd@gnu.org>
parents: 34338
diff changeset
265 'glasses-convert-to-unreadable nil t))
e859388caea4 Use `define-minor-mode' for the minor mode
Gerd Moellmann <gerd@gnu.org>
parents: 34338
diff changeset
266 (jit-lock-unregister 'glasses-change)
e859388caea4 Use `define-minor-mode' for the minor mode
Gerd Moellmann <gerd@gnu.org>
parents: 34338
diff changeset
267 (remove-hook 'local-write-file-hooks
e859388caea4 Use `define-minor-mode' for the minor mode
Gerd Moellmann <gerd@gnu.org>
parents: 34338
diff changeset
268 'glasses-convert-to-unreadable t)))))
27469
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
269
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
270
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
271 ;;; Announce
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
272
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
273 (provide 'glasses)
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
274
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
275
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 39088
diff changeset
276 ;;; arch-tag: a3515167-c89e-484f-90a1-d85143e52b12
27469
98f24cb3efa5 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
277 ;;; glasses.el ends here