help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Is Default face a per frame attribute or a global one?


From: Alexandros Prekates
Subject: Re: Is Default face a per frame attribute or a global one?
Date: Wed, 27 Aug 2014 04:49:44 +0300
User-agent: Mozilla/5.0 (X11; Linux i686; rv:24.0) Gecko/20100101 Thunderbird/24.5.0


On 26/08/2014 07:55 πμ, Alex Kost wrote:
Alexandros Prekates (2014-08-26 03:07 +0400) wrote:

On 25/08/2014 03:03 μμ, Alex Kost wrote:
Alexandros Prekates (2014-08-25 14:07 +0400) wrote:

On 25/08/2014 08:54 πμ, Alex Kost wrote:
Alexandros Prekates (2014-08-25 03:29 +0400) wrote:

Continuing little experiments to better undestand the relation among
fonts, faces, frames etc, i noticed
that  if i have 2 frames (A and B) and  i evaluate from ielm in frame A
(set-frame-font "liberation serif" nil nil) . when i check the default
face's font i see different values in frame A from frame B.

So it seems that default face is a frame's variable.

i mean every frame has its own default face? Is that right?
As you can see after "C-h f set-frame-font":

“...
If FRAMES is nil, apply the font to the selected frame only.
...”

So the second nil in your expression means you set a font only for the
current frame A.


So default face is not a global emacs session variable. It's an
attribute per frame.
I thought you were talking about frame fonts.  AFAIU there is only one
‘default’ face (defined in "faces.el"), if that's what you mean.

But the assumption that there is only one global default face
contradicts with what i see.

In two frames (of the same emacs session)  M-x describe-face (default)
gives me different font families ( i changed in each frame the font with
set-frame-font.)
I didn't mean there is always only one global value of a face for all
frames.  As you could see it is possible to set face attributes for a
particular frame.  Here is a paragraph from (info "(elisp) Faces"):

“...
    By default, each face name corresponds to the same set of attributes
in all frames.  But you can also assign a face name a special set of
attributes in one frame (*note Attribute Functions::).
”

You can look at (info "(elisp) Attribute Functions") to read how it can
be done.  And ‘set-frame-font’ does exactly that: it calls
‘set-face-attribute’ to specify a font for the current frame.


Thanks. That makes things more clear now.

set-frame-font --> set-face-attribute --> internal-set-lisp-face-attribute (c function). That last one somehow implements the http://www.emacswiki.org/emacs/FacesPerFrame funtionality.

Although i 'm curious  of how you do  that in a non-OO language :-)

Alexandros




reply via email to

[Prev in Thread] Current Thread [Next in Thread]