;;; semantic/decorate/mode.el --- Minor mode for decorating tags
-;; Copyright (C) 2000-2005, 2007-2011 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2005, 2007-2016 Free Software Foundation, Inc.
;; Author: Eric M. Ludlam <zappo@gnu.org>
;; Keywords: syntax
"Return the STYLE's highlighter function."
(intern (format "%s-highlight" style)))
+(defsubst semantic-decorate-style-predicate-default (style)
+ "Return the STYLE's predicate function."
+ (intern (format "%s-p-default" style)))
+
+(defsubst semantic-decorate-style-highlighter-default (style)
+ "Return the STYLE's highlighter function."
+ (intern (format "%s-highlight-default" style)))
+
;;; Base decoration API
;;
(defsubst semantic-decoration-p (object)
'semantic-decorate-tags-after-full-reparse nil t)
;; Add decorations to available tags. The above hooks ensure
;; that new tags will be decorated when they become available.
- (semantic-decorate-add-decorations (semantic-fetch-available-tags)))
+ ;; However, don't do this immediately, because EDE will be
+ ;; activated later by find-file-hook, and includes might not
+ ;; be found yet.
+ (run-with-idle-timer
+ 0.1 nil
+ (lambda ()
+ (semantic-decorate-add-decorations (semantic-fetch-available-tags)))))
;; Remove decorations from available tags.
(semantic-decorate-clear-decorations (semantic-fetch-available-tags))
;; Cleanup any leftover crap too.
(flag (if arg
(> (prefix-numeric-value arg) 0)
(not (cdr style)))))
+ (when (null style)
+ (error "Unknown decoration style %s" name))
(unless (eq (cdr style) flag)
;; Store the new flag.
(setcdr style flag)
"Define a new decoration style with NAME.
DOC is a documentation string describing the decoration style NAME.
It is appended to auto-generated doc strings.
-An Optional list of FLAGS can also be specified. Flags are:
+An optional list of FLAGS can also be specified. Flags are:
:enabled <value> - specify the default enabled value for NAME.
-
+ :load <value> - specify a feature (as a string) with the rest of
+ the definition for decoration mode NAME.
This defines two new overload functions respectively called `NAME-p'
and `NAME-highlight', for which you must provide a default
`NAME-highlight'.
To put primary decorations on a tag `NAME-highlight' must use
-functions like `semantic-set-tag-face', `semantic-set-tag-intangible',
+functions like `semantic-set-tag-face', `semantic-set-tag-read-only',
etc., found in the semantic-decorate library.
To add other kind of decorations on a tag, `NAME-highlight' must use
decoration API found in this library."
(let ((predicate (semantic-decorate-style-predicate name))
(highlighter (semantic-decorate-style-highlighter name))
+ (predicatedef (semantic-decorate-style-predicate-default name))
+ (highlighterdef (semantic-decorate-style-highlighter-default name))
(defaultenable (if (plist-member flags :enabled)
(plist-get flags :enabled)
t))
+ (loadfile (if (plist-member flags :load)
+ (plist-get flags :load)
+ nil))
)
`(progn
;; Clear the menu cache so that new items are added when
(add-to-list 'semantic-decoration-styles
(cons ',(symbol-name name)
,defaultenable))
- )))
+ ;; If there is a load file, then create the autoload tokens for
+ ;; those functions to load the token, but only if the fsym
+ ;; doesn't exist yet.
+ (when (stringp ,loadfile)
+ (unless (fboundp ',predicatedef)
+ (autoload ',predicatedef ',loadfile "Return non-nil to decorate TAG."
+ ))
+
+ (unless (fboundp ',highlighterdef)
+ (autoload ',highlighterdef ',loadfile "Decorate TAG."))
+ ))
+ ))
\f
;;; Predefined decoration styles
;;
(:overline "cyan"))
(((class color) (background light))
(:overline "blue")))
- "*Face used to show long tags in.
+ "Face used to show long tags in.
Used by decoration style: `semantic-tag-boundary'."
:group 'semantic-faces)
(:background "#200000"))
(((class color) (background light))
(:background "#8fffff")))
- "*Face used to show privately scoped tags in.
+ "Face used to show privately scoped tags in.
Used by the decoration style: `semantic-decoration-on-private-members'."
:group 'semantic-faces)
(:background "#000020"))
(((class color) (background light))
(:background "#fffff8")))
- "*Face used to show protected scoped tags in.
+ "Face used to show protected scoped tags in.
Used by the decoration style: `semantic-decoration-on-protected-members'."
:group 'semantic-faces)
(semantic-set-tag-face
tag 'semantic-decoration-on-protected-members-face))
+;;; Decoration Modes in other files
+;;
+(declare-function semantic-decoration-on-includes-p-default
+ "semantic/decorate/include")
+(declare-function semantic-decoration-on-includes-highlight-default
+ "semantic/decorate/include")
+(define-semantic-decoration-style semantic-decoration-on-includes
+ "Highlight class members that are includes.
+This mode provides a nice context menu on the include statements."
+ :enabled t
+ :load "semantic/decorate/include")
+
+
+
(provide 'semantic/decorate/mode)
;; Local variables: