unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Is there a built-in way to tell how many lines are in a window in a given face?
@ 2017-04-15  5:14 Zachary Kanfer
  2017-04-15  7:44 ` Eli Zaretskii
  0 siblings, 1 reply; 4+ messages in thread
From: Zachary Kanfer @ 2017-04-15  5:14 UTC (permalink / raw)
  To: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 753 bytes --]

If I want to know how wide a window is, in terms of characters of a given
face, I can use #'window-max-chars-per-line (
https://www.gnu.org/software/emacs/manual/html_node/elisp/Window-Sizes.html#index-window_002dmax_002dchars_002dper_002dline
).

But if I want to know how tall a window is in terms of characters of a
given face, I don't think there's a built-in method to do so. At least, I
can't seem to find it.

So I wrote one. This would be nice to get into Emacs if I haven't missed
any existing functionality. My code :

(defun zck--window-max-lines-per-window (face &optional window)
  "Calculate how many lines of text with face FACE can fit in WINDOW."
  (truncate (window-body-height window t)
            (window-font-height window face)))

[-- Attachment #2: Type: text/html, Size: 1024 bytes --]

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

* Re: Is there a built-in way to tell how many lines are in a window in a given face?
  2017-04-15  5:14 Is there a built-in way to tell how many lines are in a window in a given face? Zachary Kanfer
@ 2017-04-15  7:44 ` Eli Zaretskii
  2017-04-15 20:27   ` Zachary Kanfer
  0 siblings, 1 reply; 4+ messages in thread
From: Eli Zaretskii @ 2017-04-15  7:44 UTC (permalink / raw)
  To: Zachary Kanfer; +Cc: emacs-devel

> From: Zachary Kanfer <zkanfer@gmail.com>
> Date: Sat, 15 Apr 2017 01:14:43 -0400
> 
> (defun zck--window-max-lines-per-window (face &optional window)
> "Calculate how many lines of text with face FACE can fit in WINDOW."
> (truncate (window-body-height window t)
> (window-font-height window face)))

This doesn't take line-spacing into account, I think.

What are the use cases where you need these metrics of the window?
I'm not sure I understand the need for these facilities; e.g., why not
do all your calculations in pixels?  Or maybe fit-window-to-buffer
will do what you want?



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

* Re: Is there a built-in way to tell how many lines are in a window in a given face?
  2017-04-15  7:44 ` Eli Zaretskii
@ 2017-04-15 20:27   ` Zachary Kanfer
  2017-04-17  9:05     ` Eli Zaretskii
  0 siblings, 1 reply; 4+ messages in thread
From: Zachary Kanfer @ 2017-04-15 20:27 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 1623 bytes --]

Thanks for the response. I'll look into line-spacing.

What I'm doing is making a presentation mode (
https://bitbucket.org/zck/zpresent.el;, available on Melpa) that presents
from Emacs. I want to be able to, for example, make a title slide that
looks like this (monospaced font required for this to look right):

+--------------------------------+
|                                |
|                                |
|                                |
|       Title goes here!         |
|                                |
|    $DATE         by $PERSON    |
|                                |
|                                |
+--------------------------------+

I'm certainly open to other ways of making this look right. I don't think
doing calculations in pixels would work, unless there's a way to insert
text at a specific pixel inside Emacs. And even if there were, that seems
like a bunch more work to basically reproduce LaTeX.

On Sat, Apr 15, 2017 at 3:44 AM, Eli Zaretskii <eliz@gnu.org> wrote:

> > From: Zachary Kanfer <zkanfer@gmail.com>
> > Date: Sat, 15 Apr 2017 01:14:43 -0400
> >
> > (defun zck--window-max-lines-per-window (face &optional window)
> > "Calculate how many lines of text with face FACE can fit in WINDOW."
> > (truncate (window-body-height window t)
> > (window-font-height window face)))
>
> This doesn't take line-spacing into account, I think.
>
> What are the use cases where you need these metrics of the window?
> I'm not sure I understand the need for these facilities; e.g., why not
> do all your calculations in pixels?  Or maybe fit-window-to-buffer
> will do what you want?
>

[-- Attachment #2: Type: text/html, Size: 2491 bytes --]

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

* Re: Is there a built-in way to tell how many lines are in a window in a given face?
  2017-04-15 20:27   ` Zachary Kanfer
@ 2017-04-17  9:05     ` Eli Zaretskii
  0 siblings, 0 replies; 4+ messages in thread
From: Eli Zaretskii @ 2017-04-17  9:05 UTC (permalink / raw)
  To: Zachary Kanfer; +Cc: emacs-devel

> From: Zachary Kanfer <zkanfer@gmail.com>
> Date: Sat, 15 Apr 2017 16:27:12 -0400
> Cc: emacs-devel@gnu.org
> 
> What I'm doing is making a presentation mode (https://bitbucket.org/zck/zpresent.el;, available on Melpa) that
> presents from Emacs. I want to be able to, for example, make a title slide that looks like this (monospaced
> font required for this to look right):
> 
> +--------------------------------+
> | |
> | |
> | |
> | Title goes here! |
> | |
> | $DATE by $PERSON |
> | |
> | |
> +--------------------------------+
> 
> I'm certainly open to other ways of making this look right. I don't think doing calculations in pixels would work,
> unless there's a way to insert text at a specific pixel inside Emacs. And even if there were, that seems like a
> bunch more work to basically reproduce LaTeX.

Thanks, but I don't think I have a clear understanding how the above
is related to your zck--window-max-lines-per-window.  Let me guess:

Is it correct that you want to calculate how many empty lines to
insert before inserting the Title line, such that the text is
vertically centered in the window?  If so, then I'd begin by inserting
newlines until pos-at-point tells me I'm at the right vertical pixel
coordinate, which can be calculated given the pixel height of the
window and the number of lines you want to be centered in the window
multiplied by what window-font-height returns.  Does this work for
you?



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

end of thread, other threads:[~2017-04-17  9:05 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-04-15  5:14 Is there a built-in way to tell how many lines are in a window in a given face? Zachary Kanfer
2017-04-15  7:44 ` Eli Zaretskii
2017-04-15 20:27   ` Zachary Kanfer
2017-04-17  9:05     ` Eli Zaretskii

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

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).