Hello,
Apologies for this slightly off-topic question, but it may relate to slime's `group' settings (Much off this email is a copy of a post to gnu.emacs.help)
I am trying to display text following an underscore as a subscript and following a caret as a superscript. By looking at various pieces of code (tex-mode.el and pretty-greek.el from Pascal Bourgignon), I came up with the following (which, of course does not work):
(defvar suscript-height-minimum 0) (defvar suscript-height-ratio 0.8)
(defun suscript-height (height) "Return the integer height of subscript/superscript font in 1/10 points. Not smaller than the value set by `tex-suscript-height-minimum'." (ceiling (max (if (integerp suscript-height-minimum) suscript-height-minimum ;; For bootstrapping. (condition-case nil (* suscript-height-minimum (face-attribute 'default :height)) (error 0))) ;; NB assumes height is integer. (* height suscript-height-ratio))))
(defface superscript '((t :height suscript-height)) "Face used for superscripts.")
(defface subscript '((t :height suscript-height)) "Face used for subscripts.")
(defun suscript-match-regexp (escape-char) "regexp for suscripted text match in common-lisp code" (let ((terminating-string (format "_^ )$-"))) (format "%s\(.*?\)[%s]" escape-char terminating-string terminating-string)))
(defvar subscript-match (suscript-match-regexp "_") "Matches _whatever[_|^|SPACE|TAB|)") (defvar superscript-match (suscript-match-regexp "\^") "Matches ^whatever[_|^|SPACE|TAB|)")
(defun pretty-suscript () "Load super&subscript keywords into `suscript-flk' and load that into `font-lock-keywords'" (interactive) (setq suscript-flk `((,subscript-match (1 (face subscript display (raise 0.2)))) (,superscript-match (1 (face superscript display (raise -0.2)))))) (font-lock-add-keywords nil suscript-flk))
(defun cancel-pretty-suscript () "Remove `suscript-flk' keywords from `font-lock-keywords'" (interactive) (font-lock-remove-keywords nil suscript-flk))
The contents `font-lock-keywords' are as follows:
(t (("_\(.*?\)[_^ )$-]" (1 (face subscript display (raise 0.2)))) ("\^\(.*?\)[_^ )$-]" (1 (face superscript display (raise -0.2)))) ...)
My question is whether I need to specify a group in the `defface' commands. For example: (defface superscript '((t :height 0.8));;suscript-height)) "Face used for superscripts." :group 'slime-mode-faces)
I found several groups in slime.el, and I am not sure which one to apply in defface.
Thanks,
Mirko
* Mirko Vukovic [2010-04-20 02:30+0200] writes:
My question is whether I need to specify a group in the `defface' commands. For example: (defface superscript '((t :height 0.8));;suscript-height)) "Face used for superscripts." :group 'slime-mode-faces)
I found several groups in slime.el, and I am not sure which one to apply in defface.
The :group attribute is only used by the customization machinery it has no effect on the face itself. It's not even required. If you use this code just for yourself you don't need to do anything. If you want to share it than it's more important that you add some prefix rather than "superscript" alone; that avoids name clashes.
When your package gets bigger you will most likely already have a name for the package and also define a customization group with the same name or you can use one of the general groups like "slime" or "lisp".
Helmut