unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* Mode-specific font setting?
@ 2005-04-25 18:35 David Reitter
  2005-04-26 19:43 ` Kevin Rodgers
  0 siblings, 1 reply; 3+ messages in thread
From: David Reitter @ 2005-04-25 18:35 UTC (permalink / raw)


How do I set a mode-specific font?
I've tried this hack:

  (add-hook 'after-change-major-mode-hook	
  	  (lambda ()
  	  (case major-mode
	  ('text-mode
  		(set-frame-font "fontset-lucida14")
)))
)

Unfortunately it doesn't work, obviously because the selected frame is 
a different one when the hook is called (find-file-other-frame was used 
to open a file), so the font gets set in the wrong frame.

Maybe there is a more elegant way (customization?) than using a hook, 
anyways.

Thanks!

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Mode-specific font setting?
@ 2005-04-26  6:42 David Reitter
  0 siblings, 0 replies; 3+ messages in thread
From: David Reitter @ 2005-04-26  6:42 UTC (permalink / raw)


> How do I set a mode-specific font?

To elaborate on this, I want a generic solution that allows me to 
assign special fonts to all major modes.
Another thing I have tried is to find the frame for the current buffer 
(see code below). This doesn't work either, because although the 
current buffer exists, it seems like it doesn't have a window yet (or 
walk-windows ignores it.)

What to do?

---

(defun find-all-frames-internal (buffer)
   (let ((frames nil))
     (walk-windows '(lambda (wind)
                      (if (eq (window-buffer wind) buffer)
                        (let ((frm (window-frame wind)))
                          (unless (memq frm frames)
                            (push frm frames)))))
                   nil t)
     frames))

(add-hook  'after-change-major-mode-hook
           (lambda ()
            ;; this doesn't work yet
;; somehow, the window doesn't exist at this point :(
;; the current-buffer is correct
	    (setq fr (car (find-all-frames-internal (current-buffer))))
	
(if fr	
            (case major-mode
  	  ('text-mode
	     (select-frame fr)
  		(set-frame-font "fontset-lucida14")
)))))

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Mode-specific font setting?
  2005-04-25 18:35 David Reitter
@ 2005-04-26 19:43 ` Kevin Rodgers
  0 siblings, 0 replies; 3+ messages in thread
From: Kevin Rodgers @ 2005-04-26 19:43 UTC (permalink / raw)


David Reitter wrote:
 > How do I set a mode-specific font?

You can't.  Fonts are frame-specific, not window- or mode-specific.

 > I've tried this hack:
 >
 >  (add-hook 'after-change-major-mode-hook
 >        (lambda ()
 >        (case major-mode
 >       ('text-mode
 >          (set-frame-font "fontset-lucida14")
 > )))
 > )
 >
 > Unfortunately it doesn't work, obviously because the selected frame is a
 > different one when the hook is called (find-file-other-frame was used to
 > open a file), so the font gets set in the wrong frame.

It also won't change the font when you select a buffer in a different
mode with `C-x b'.

 > Maybe there is a more elegant way (customization?) than using a hook,
 > anyways.

Use after-make-frame-functions, and make each frame's initial window
dedicated to that buffer for good measure.

-- 
Kevin Rodgers

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2005-04-26 19:43 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-04-26  6:42 Mode-specific font setting? David Reitter
  -- strict thread matches above, loose matches on Subject: below --
2005-04-25 18:35 David Reitter
2005-04-26 19:43 ` Kevin Rodgers

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).