Subject: RE: bug#6930: 24.0.50; (elisp) Layout Parameters: What is ""the standard fringe width"?

From: "Drew Adams" <[email-masked]>
Date: Sat, 28 Aug 2010 08:06:03 -0700

> > The text says this:
> >  
> >      The default width of the left and right fringes of 
> >      windows in this
> >      frame (*note Fringes::).  If either of these is zero, that
> >      effectively removes the corresponding fringe.  A value of `nil'
> >      stands for the standard fringe width, which is the 
> >      width needed to display the fringe bitmaps.
> >  
> > If Lisp code wants to know how wide the left fringe is for a certain
> > frame, it can look at the value of parameter `left-fringe' (and at
> > variable `fringe-mode').  But if parameter `left-fringe' is 
> > nil, then the fringe width is what?
> 
> This works for me:
> 
>    (frame-parameter FRAME 'left-fringe) => 8
> 
> FRAME can be nil, meaning the currently selected frame.
> 
> Calling frame-parameter is the standard way of accessing values of
> frame parameters.
> 
> So I'm closing this bug.

Yes, either `frame-parameter' or `frame-parameters' will show the actual fringe
width.  I know that.  I wasn't clear enough in my report.

1. The product is not clear/consistent wrt setting frame parameters such as the
fringe params.  We speak here of setting the `left-fringe' parameter to nil, and
calling `set-frame-parameter' or `modify-frame-parameters' passing nil for that
parameter should, according to the description of those functions, set the value
to...(drum roll) nil.  But it does not.  In fact, fringe params are exceptional.
"Setting" them to nil actually sets them to the default width, which is 8.

Should this exceptional behavior be corrected?  Dunno.  At the very least, the
doc should tell users about such exceptions.  We cannot honestly tell users that
they are setting the param value to nil and say it's not a bug if they see that
the result is that the value was set to 8.

Such exceptional behavior needs to be mentioned when documenting these fringe
params - but also when documenting any function that changes frame params, and
when documenting Customize.  We need to say that for some exceptional params,
even though you think you are setting the value to one thing the actual setting
might become something else.

2. The doc is not clear here, in any case.  It should not speak about "the
standard fringe width", with no explanation of what that might be.  (There is no
standard fringe width.)  It should say clearly that there is a `default' width
of 8 (chosen via Customize or `fringe-mode' using the name `default'), and that
that value is what is actually used when you _try_ to set the value to nil.  (It
should not speak of actually setting the value to nil, since that is
impossible.)

Thx.