[OS X Emacs] fit-frame resizes frames too large in Aquamacs

Pete Siemsen siemsen at ucar.edu
Mon Nov 2 00:32:18 EST 2009


David,

I've traded some email with Drew Adams about my problems with fit- 
frame in Aquamacs.  The thread is appended.  At this point, I think  
it's best to ask you for some help.


On October 21, 2009 4:32:49 PM MDT <siemsen at ucar.edu>  
<siemsen at ucar.edu> wrote:

>> I'm using Aquamacs "2.0preview2".
>>
>> When I open a file, I'd like the frame to automatically resize to  
>> fit the text, as much as possible.  I found fit-frame on the web,  
>> which seems exactly what I want.  I discovered that it's  
>> distributed with Aquamacs.  When I did M-x fit-frame, it resized  
>> the frame.  Very cool!
>>
>> Trouble is, it makes the frame wider than needed.  I think this is  
>> because I've customized Aquamacs to use a default font height of  
>> "120", while fit-frame uses the height attribute of the "default"  
>> face, which is 130.  In other words, in my customizations.el file I  
>> have
>>
>> (custom-set-faces
>> '(autoface-default ((((type ns)) (:inherit default :height  
>> 120 :family "Monaco" :background "#02053c"))))
>>
>> ...but when I evaluate (face-attribute `default :height) I get  
>> 130.  I think fit-frame is using 130, hence my frames are resized  
>> too large.  Admittedly, I'm guessing a bit here.
>>
>> To try to fix it, I put this in my Preferences.el:
>>
>> (set-face-attribute `default nil :height 120)
>>
>> It didn't work.  It doesn't set the value used by fit-frame.   
>> Instead, it seems to set the height of the font of the current  
>> frame, not of the height of the default face.
>>
>> Am I in the right ballpark?


On October 21, 2009 4:59:59 PM MDT, David Reitter wrote:

> Yes you are.  Emacs calculates dimensions and coordinates based on  
> the frame font because you're setting the "frame size".  You can  
> change the fit-frame function to be smarter - it should be pretty  
> easy.  Convert to pixels based on the default face, then convert  
> back to frame chars.
> But even so: the "width" of the default face is just an  
> approximation, because the default face may well be a variable-width  
> font.
>
> If you do improve fit-frame, please post the new code.  (You can  
> check if Drew Adams has an updated version.)


I asked for Drew Adams for help.  Here's the relevant bits ( I've  
tried to put them into a sensible order):


On October 21, 2009 12:10:05 PM MDT, Pete Siemsen wrote:

> Drew,
>
> I'm a brand new user of fit-frame.  Very cool, and I'm definitely  
> going to explore your other stuff.  I have this problem:  I use  
> Aquamacs, and I set the font size with this call in my  
> "customizations.el" startup file:
>
> '(autoface-default ((((type ns)) (:inherit default :height  
> 120 :family "Monaco" :background "#02053c"))))
>
> Fit-frame works, but miscalculates the frame size because it thinks  
> the font size is something other than the one I'm using.  How can I  
> make fit-frame base its calculations on the "Monaco 12" that I use?
>
> -- Pete



On October 21, 2009 12:25:07 PM MDT, Drew Adams wrote:

> I never heard of `autoface-default'. I don't know much about  
> Aquamacs - perhaps that's an Aquamaces thing? I searched for  
> `autoface-default' throughout the vanilla Emacs libraries - no hits.  
> Googling for it suggests that it's an Aquamacs thing. You should  
> perhaps ask the Aquamacs folks about this.
>
> What I would use is just the `default' face. You can customize that.  
> The `font' attribute of face `default' corresponds to frame  
> parameter `font'. And it corresponds to what is returned by  
> functions `frame-char-height' and `frame-char-width', which is what  
> fit-frame.el uses.
>
> You can also use various commands to change the current font or font  
> size.
>
> HTH - Drew


On October 22, 2009 3:38:35 PM MDT, Pete Siemsen wrote:

> Yes, it's an Aquamacs thing.  It was added to allow per-mode fonts.   
> It works well.

> I tried doing this in my startup file:
>
> (set-face-attribute `default nil :height 120)
>
> ...but it didn't affect fit-frame's behavior.  I confess to some  
> confusion.  I can't do C-h v frame-char-width - Aquamacs doesn't  
> know the variable.  Yet fit-frame works, sorta.


On October 22, 2009 4:20:41 PM MDT, Drew Adams wrote:

> Use M-: (face-attribute 'default :height) to see if the setting  
> actually took effect.
>
> Do also M-: (frame-char-height). It should show the same height that  
> you just set. If it does, then fit-frame should work, because it  
> uses that function.
>
> If, for some reason, set-face-attribute didn't work, try instead `M- 
> x customize-face default'. In the Customize buffer, change the  
> Height value to the height you want (use Height in 1/10 pt from the  
> Value Menu). Open a new Emacs session and see if that customization  
> worked.
>
> This works for me, on Windows (with normal Emacs 23.1.1, not with  
> Aquamacs). If I use `set-face-attribute' as you did, then `frame- 
> char-height' reflects that, and fit-frame works.


On October 22, 2009 3:38:35 PM MDT, Pete Siemsen wrote:

> David Reitter, the author of Aquamacs, has suggested that I might  
> "fix" fit-frame to make it work better.  I doubt that there's a  
> problem in fit-frame.  I am sure that my Lisp skills are  
> insufficient to "fix" it :-)


On October 22, 2009 4:20:41 PM MDT, Drew Adams wrote:

> To fix it, we need to first find out what the problem is. David  
> should be able to help you with that, as there seems to be some  
> interaction with Aquamacs changes to Emacs. I cannot reproduce the  
> problem (without Aquamacs).
>
> I will help if I can from my end, but I'll need to know more about  
> what's happening in your case, and why. Either you or David will  
> need to debug this a bit, to see where the problem is.
>
> The first thing to see is what the value of (frame-char-height) is.  
> That is what fit-frame uses. If it is correct (same as what you set  
> using set-face-attribute), then we can try to see why fit-frame  
> didn't do the right thing. If it is not correct (different from the  
> value you set), then I'd suggest that it's an Aquamacs problem.  
> AFAIK, set-face-attribute for the `default' face should always be  
> reflected in `frame-char-height' (and -width). The `default' face is  
> just shorthand for a certain number of frame parameters (or vice  
> versa).
>
> Let me know what you can find out. Sorry for your trouble.
>
> Thx - Drew


On October 22, 2009 3:38:35 PM MDT, Pete Siemsen wrote:

> Perhaps this is due to Aquamacs' incomplete implementation of your  
> libraries.  Aquamacs comes with these:
>
> autofit-frame.el frame+.el        icomplete+.el    strings.el        
> upd2
> files+.el        frame-cmds.el    misc-fns.el      thingatpt+.el
> fit-frame.el     frame-fns.el     oneonone.el      upd

On October 22, 2009 4:20:41 PM MDT, Drew Adams wrote:

> No; for fit-frame.el to work, you do not need any other libraries at  
> all.


David, that's the thread.  When I use set-face-attribute to change the  
height of the default font, my frames resize, but to a size that is  
too small vertically and too wide horizontally.

It seems like things almost work, but I don't understand the missing  
piece.  What I want is: when I open a "thin" file, containing, like, a  
column of numbers, I'd like the frame to appear sized just wide enough  
to contain the numbers.  Similarly, when I open a file that contains  
only 10 lines, I'd like the frame to be large enough vertically to  
show the 10 lines, and no more.  If a file is too big for its frame to  
fit horizontally or vertically on the screen, I'd like the initial  
frame to be some maximum number of lines or columns.  If I add content  
to such a buffer, scroll bars should appear, and I can then evaluate  
fit-frame again to make the frames use the right amount of real  
estate.  It seems that fit-frame can do all this.

I realize fit-frame won't work well with proportional fonts, but I  
don't use proportional fonts.

Thanks again for Aquamacs, it's fantastic!

- Pete

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://email.esm.psu.edu/pipermail/macosx-emacs/attachments/20091101/d5960f7c/attachment.html>


More information about the MacOSX-Emacs mailing list