1 ;;; cap-words.el --- minor mode for motion in CapitalizedWordIdentifiers
3 ;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008
4 ;; Free Software Foundation, Inc.
6 ;; Author: Dave Love <fx@gnu.org>
9 ;; This file is free software; you can redistribute it and/or modify
10 ;; it under the terms of the GNU General Public License as published by
11 ;; the Free Software Foundation; either version 3, or (at your option)
14 ;; This file is distributed in the hope that it will be useful,
15 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
16 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 ;; GNU General Public License for more details.
19 ;; You should have received a copy of the GNU General Public License
20 ;; along with GNU Emacs; see the file COPYING. If not, write to the
21 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
22 ;; Boston, MA 02110-1301, USA.
26 ;; Provides Capitalized Words minor mode for word movement in
27 ;; identifiers CapitalizedLikeThis.
29 ;; Note that the same effect could be obtained by frobbing the
30 ;; category of upper case characters to produce word boundaries, but
31 ;; the necessary processing isn't done for ASCII characters.
33 ;; Fixme: This doesn't work properly for mouse double clicks.
37 (defun capitalized-find-word-boundary (pos limit
)
38 "Function for use in `find-word-boundary-function-table'.
39 Looks for word boundaries before capitals."
42 (let (case-fold-search)
44 ;; Fixme: Are these regexps the best?
45 (or (and (re-search-forward "\\=.\\w*[[:upper:]]"
47 (progn (backward-char)
49 (re-search-forward "\\>" limit t
))
50 (or (re-search-backward "[[:upper:]]\\w*\\=" limit t
)
51 (re-search-backward "\\<" limit t
))))
55 (defconst capitalized-find-word-boundary-function-table
56 (let ((tab (make-char-table nil
)))
57 (set-char-table-range tab t
#'capitalized-find-word-boundary
)
59 "Assigned to `find-word-boundary-function-table' in Capitalized Words mode.")
62 (define-minor-mode capitalized-words-mode
63 "Toggle Capitalized- Words mode.
65 In this minor mode, a word boundary occurs immediately before an
66 uppercase letter in a symbol. This is in addition to all the normal
67 boundaries given by the syntax and category tables. There is no
70 E.g. the beginning of words in the following identifier are as marked:
75 Note that these word boundaries only apply for word motion and
76 marking commands such as \\[forward-word]. This mode does not affect word
77 boundaries in found by regexp matching (`\\>', `\\w' &c).
79 This style of identifiers is common in environments like Java ones,
80 where underscores aren't trendy enough. Capitalization rules are
81 sometimes part of the language, e.g. Haskell, which may thus encourage
82 such a style. It is appropriate to add `capitalized-words-mode' to
83 the mode hook for programming langauge modes in which you encounter
84 variables like this, e.g. `java-mode-hook'. It's unlikely to cause
85 trouble if such identifiers aren't used.
87 See also `glasses-mode' and `studlify-word'.
88 Obsoletes `c-forward-into-nomenclature'."
89 nil
" Caps" nil
:group
'programming
90 (set (make-local-variable 'find-word-boundary-function-table
)
91 capitalized-find-word-boundary-function-table
))
95 ;;; arch-tag: 46513b64-fe5a-4c0b-902c-ed235c22975f
96 ;;; cap-words.el ends here