I added this to my .emacs: (defun t-face () "to pass org-footnote automatically to toggle-face" (interactive) (toggle-face 'org-footnote)) (defun toggle-face (&optional face-from) (interactive (list (read-face-name "Face" (face-at-point)))) (let ((f (assq face-from face-remapping-alist)) (face-to 'default)) (if f (setq face-remapping-alist (delq f face-remapping-alist)) (push (cons face-from face-to) face-remapping-alist)))) On Thu, Nov 29, 2012 at 1:20 AM, Jambunathan K wrote: > Nick Dokos writes: > > > 42 147 wrote: > > > >> Very nice. > >> > >> However, I'd like to write a function that toggles the color value > (without > >> recourse to the customize menu), since it would be useful to highlight > the > >> footnotes from time to time. > >> > > > > Anything that can be done interactively can also be done > > programatically. You know what face you are dealing with, you can get > > its foreground color with face-foreground, and you can set it with > > set-face-attribute. A crude implementation to show the basic outline: > > > > > > (setq org-footnote-fg-color (face-foreground 'org-footnote)) > > > > (setq org-text-fg-color (face-foreground 'default)) > > > > (defun my-toggle-footnote-fg-color () > > "Toggle the org-footnote face foreground color." > > (interactive) > > (let ((fg (face-foreground 'org-footnote))) > > (if (string-equal fg org-footnote-fg-color) > > (set-face-attribute 'org-footnote nil :foreground > org-text-fg-color) > > (set-face-attribute 'org-footnote nil :foreground > org-footnote-fg-color)))) > > > > > > The difficulties start (but do not end) with footnotes in all sorts of > > weird places (e.g. headlines) with all sorts of different > > fontifications. You'd want to blend the footnote with its immediate > > surroundings. > > > > Taking care of such situations (and various others that the above code > > mishandles) is left as an exercise... > > Install the following defun, put the cursor on fontified text and do M-x > toggle-face. > > (defun toggle-face (&optional face-from) > (interactive (list (read-face-name "Face" (face-at-point)))) > (let ((f (assq face-from face-remapping-alist)) > (face-to 'default)) > (if f (setq face-remapping-alist (delq f face-remapping-alist)) > (push (cons face-from face-to) face-remapping-alist)))) > > See also (info "(elisp) Face Remapping") > > > > > Nick > > > > > > -- >