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