* mode-specific font specifications?
@ 2009-08-24 9:12 Jim McCloskey
0 siblings, 0 replies; 5+ messages in thread
From: Jim McCloskey @ 2009-08-24 9:12 UTC (permalink / raw)
To: help-gnu-emacs
Just getting used to Emacs 23.1, and especially enjoying the improved
font-rendering. Thanks to all who made this possible. It's really great.
There's one thing that I haven't figured out yet, though, so I thought
I might ask for help here. I suspect that I am not alone in wanting to
be able to do this.
I'd like to be able to set a default font for text and latex mode (for
prose composition essentially) and to have a nice proportional font
for that context (Linux Libertine or something). But such a font makes
little or no sense for dired-mode, for example, where you really want
a monospace font like Inconsolata (so that the alignment looks right).
I thought I could do what I wanted by setting a default font in the
init file with (set-default-font "FONTNAME") and then:
(add-hook 'dired-mode-hook
(function
(lambda ()
(font-lock-mode 1)
(require 'dired-x)
(set-frame-font "Inconsolata-11")
)))
or:
(add-hook 'dired-mode-hook
(function
(lambda ()
(font-lock-mode 1)
(require 'dired-x)
(set-default-font "Inconsolata-11")
)))
and that sort of works, in the sense that the first buffer visited is
displayed in the proportional font FONTNAME, and then when you switch
to dired-mode, you get 11pt Inconsolata. However, when you then go
from dired-mode back to the first buffer (in latex-mode, say), the
font used is now Inconsolata. I had hoped to limit the scope of that
second font declaration by putting it inside:
(add-hook 'dired-mode-hook
.... )
but, once called, its effects in fact seem to be global rather than
local to that mode.
Is there a way for me to do what I'd like to be able to do?
Thanks very much for any advice or any pointers to relevant documentation.
Jim
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: mode-specific font specifications?
[not found] <mailman.5251.1251123404.2239.help-gnu-emacs@gnu.org>
@ 2009-08-24 16:14 ` A.Politz
2009-09-01 17:50 ` Xah Lee
2009-09-01 21:28 ` Oliver Scholz
2 siblings, 0 replies; 5+ messages in thread
From: A.Politz @ 2009-08-24 16:14 UTC (permalink / raw)
To: help-gnu-emacs
On Aug 24, 11:12 am, Jim McCloskey <mccl...@ucsc.edu> wrote:
> Just getting used to Emacs 23.1 [...]
> I'd like to be able to set a default font for text and latex mode [...]
> Jim
It's called face remapping.
(info "(elisp) Face Remapping")
-ap
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: mode-specific font specifications?
[not found] <mailman.5251.1251123404.2239.help-gnu-emacs@gnu.org>
2009-08-24 16:14 ` A.Politz
@ 2009-09-01 17:50 ` Xah Lee
2009-09-01 21:28 ` Oliver Scholz
2 siblings, 0 replies; 5+ messages in thread
From: Xah Lee @ 2009-09-01 17:50 UTC (permalink / raw)
To: help-gnu-emacs
am also interested in this, however, so far i have not been
successful.
here's a work-round command.
(defun cycle-font ()
"Change font in current frame.
When called repeatedly, cycle thru a predefined set of fonts.
Warning: expected to work for Windows only, and you need to install
Code2000 font."
(interactive)
(if (not (eq last-command this-command))
;; correct syntax for some fonts
;; "-*-Courier New-normal-r-*-*-14-112-96-96-c-*-iso8859-1"
;; "-outline-Lucida Sans Unicode-normal-normal-normal-sans-13-*-*-*-p-
*-iso8859-1"
;; "-outline-Code2000-normal-normal-normal-*-15-*-*-*-p-*-iso8859-1"
;; "-raster-Fixedsys-normal-normal-normal-mono-15-*-*-*-c-*-iso8859-1"
;; "-outline-FixedsysTTF-semi-bold-normal-normal-mono-16-*-*-*-c-*-
iso8859-1"
(progn
(set-frame-parameter nil 'font "Courier New-10")
(put this-command 'state "2"))
(cond
((string= (get this-command 'state) "1")
(set-frame-parameter nil 'font "Courier New-10") (put this-
command 'state "2"))
((string= (get this-command 'state) "2" )
(set-frame-parameter nil 'font "Lucida Sans Unicode-10") (put
this-command 'state "1"))
;; ((string= (get this-command 'state) "3")
;; (set-frame-parameter nil 'font "fixedsys-10") (put
;; this-command 'state "1"))
) ) )
to automatically change font by mode, i tried this:
(defun set-font-by-mode ()
"Change font in current frame according to the major mode."
(interactive)
(message (symbol-name major-mode) )
(cond
((equal major-mode 'dired-mode) (set-frame-parameter nil 'font
"Courier New-10") (message "aaaaaa"))
(t (set-frame-parameter nil 'font "Lucida Sans Unicode-10")
(message "bbbbb"))
)
)
(add-hook 'after-change-major-mode-hook 'set-font-by-mode)
it does work when you go into a dired dir first time. However,
switching buffer doesn't work...
might want to try to get the hook to run when buffer is switched, or
attached it to find-file-hook. Or, also try to find a exit-major-mode
hook...
ps: looking at your post, seems you stuck at the same problem as me.
Xah
∑ http://xahlee.org/
☄
On Aug 24, 2:12 am, Jim McCloskey <mccl...@ucsc.edu> wrote:
> Just getting used to Emacs 23.1, and especially enjoying the improved
> font-rendering. Thanks to all who made this possible. It's really great.
>
> There's one thing that I haven't figured out yet, though, so I thought
> I might ask for help here. I suspect that I am not alone in wanting to
> be able to do this.
>
> I'd like to be able to set a default font for text and latex mode (for
> prose composition essentially) and to have a nice proportional font
> for that context (Linux Libertine or something). But such a font makes
> little or no sense for dired-mode, for example, where you really want
> a monospace font like Inconsolata (so that the alignment looks right).
>
> I thought I could do what I wanted by setting a default font in the
> init file with (set-default-font "FONTNAME") and then:
>
> (add-hook 'dired-mode-hook
> (function
> (lambda ()
> (font-lock-mode 1)
> (require 'dired-x)
> (set-frame-font "Inconsolata-11")
> )))
>
> or:
>
> (add-hook 'dired-mode-hook
> (function
> (lambda ()
> (font-lock-mode 1)
> (require 'dired-x)
> (set-default-font "Inconsolata-11")
> )))
>
> and that sort of works, in the sense that the first buffer visited is
> displayed in the proportional font FONTNAME, and then when you switch
> to dired-mode, you get 11pt Inconsolata. However, when you then go
> from dired-mode back to the first buffer (in latex-mode, say), the
> font used is now Inconsolata. I had hoped to limit the scope of that
> second font declaration by putting it inside:
>
> (add-hook 'dired-mode-hook
> .... )
>
> but, once called, its effects in fact seem to be global rather than
> local to that mode.
>
> Is there a way for me to do what I'd like to be able to do?
>
> Thanks very much for any advice or any pointers to relevant documentation.
>
> Jim
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: mode-specific font specifications?
[not found] <mailman.5251.1251123404.2239.help-gnu-emacs@gnu.org>
2009-08-24 16:14 ` A.Politz
2009-09-01 17:50 ` Xah Lee
@ 2009-09-01 21:28 ` Oliver Scholz
2009-09-01 21:38 ` Oliver Scholz
2 siblings, 1 reply; 5+ messages in thread
From: Oliver Scholz @ 2009-09-01 21:28 UTC (permalink / raw)
To: help-gnu-emacs
I have a similar problem. But I use muse for my prose and verse, rather
than text mode.
Jim McCloskey <mcclosk@ucsc.edu> writes:
[...]
> I'd like to be able to set a default font for text and latex mode (for
> prose composition essentially) and to have a nice proportional font
> for that context (Linux Libertine or something). But such a font makes
> little or no sense for dired-mode, for example, where you really want
> a monospace font like Inconsolata (so that the alignment looks right).
>
> I thought I could do what I wanted by setting a default font in the
> init file with (set-default-font "FONTNAME") and then:
>
> (add-hook 'dired-mode-hook
> (function
> (lambda ()
> (font-lock-mode 1)
> (require 'dired-x)
> (set-frame-font "Inconsolata-11")
> )))
>
[...]
This changes the font of the frame's default face, only when you
activate dired-mode. What you probably want, instead of changing the
default face globally or for the frame, is specifying the font only for
the specific buffer.
Unfortunately, as far as I know, Gnu Emacs provides no means to make a
face buffer-local. There is the variable `default-text-properties',
though, which provides something close, but not quite close. Something
like ....
(add-hook 'text-mode-hook
(lambda ()
(set (make-local-variable 'default-text-properties)
'(face variable-pitch))))
... would probably do the job for text-mode. It has, however, no
effect on text that is already fontified (for instance, because
it is italic.)
I use overlays:
(defface egoge-proportional
'((((type x))
(:family "monotype-Garamond" :height 1.4))
(((type w32))
(:family "Sylfaen" :height 1.4)))
"Basic face with variable width font.")
(defvar egoge-font-overlay nil)
(defun egoge-add-font-overlay ()
(interactive)
(let ((from (point-min))
(to (point-max)))
(when (eq major-mode 'message-mode)
(save-excursion
(message-goto-body)
(setq from (point)
to (if (message-goto-signature)
(progn (forward-line -1)
(point))
(point-max)))))
(let ((overlay (make-overlay from to)))
(overlay-put overlay 'face 'egoge-proportional)
(set (make-local-variable 'egoge-font-overlay)
overlay))))
(add-hook 'muse-mode-hook
#'egoge-add-font-overlay)
Oliver
--
15 Fructidor an 217 de la Révolution
Liberté, Egalité, Fraternité!
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: mode-specific font specifications?
2009-09-01 21:28 ` Oliver Scholz
@ 2009-09-01 21:38 ` Oliver Scholz
0 siblings, 0 replies; 5+ messages in thread
From: Oliver Scholz @ 2009-09-01 21:38 UTC (permalink / raw)
To: help-gnu-emacs
Oliver Scholz <alkibiades@gmx.de> writes:
> Unfortunately, as far as I know, Gnu Emacs provides no means to make a
> face buffer-local.
I just read A. Politz' post; I stand corrected. Forget what I wrote.
Nice!
Oliver
--
15 Fructidor an 217 de la Révolution
Liberté, Egalité, Fraternité!
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2009-09-01 21:38 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-08-24 9:12 mode-specific font specifications? Jim McCloskey
[not found] <mailman.5251.1251123404.2239.help-gnu-emacs@gnu.org>
2009-08-24 16:14 ` A.Politz
2009-09-01 17:50 ` Xah Lee
2009-09-01 21:28 ` Oliver Scholz
2009-09-01 21:38 ` Oliver Scholz
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).