]> git.eshelyaron.com Git - emacs.git/commitdiff
Give `window-text-pixel-size' optional BUFFER argument.
authorMartin Rudalics <rudalics@gmx.at>
Sun, 1 Feb 2015 15:49:46 +0000 (16:49 +0100)
committerMartin Rudalics <rudalics@gmx.at>
Sun, 1 Feb 2015 15:49:46 +0000 (16:49 +0100)
* xdisp.c (Fwindow_text_pixel_size): Add optional argument BUFFER.
* display.texi (Size of Displayed Text): Describe optional
argument BUFFER of `window-text-pixel-size'.

doc/lispref/ChangeLog
doc/lispref/display.texi
src/ChangeLog
src/xdisp.c

index 2cde2fb6f48dda4fa81bc67ad4390bdbb2db4e41..aa4d320083096324f5263e7319b36cfad4b2eca4 100644 (file)
@@ -1,3 +1,8 @@
+2015-02-01  Martin Rudalics  <rudalics@gmx.at>
+
+       * display.texi (Size of Displayed Text): Describe optional
+       argument BUFFER of `window-text-pixel-size'.
+
 2015-01-28  Eli Zaretskii  <eliz@gnu.org>
 
        * searching.texi (Regexp Search): Add a cross-reference to "Syntax
index b09b82a6724a4bddeba7e5167896dae3a59507f9..10b17a3f3895011ae3fb649b977316e12b112d14 100644 (file)
@@ -1880,7 +1880,7 @@ displayed in a given window.  This function is used by
 @code{fit-frame-to-buffer} (@pxref{Size and Position}) to make a window
 exactly as large as the text it contains.
 
-@defun window-text-pixel-size &optional window from to x-limit y-limit mode-and-header-line
+@defun window-text-pixel-size &optional window from to x-limit y-limit mode-and-header-line buffer
 This function returns the size of the text of @var{window}'s buffer in
 pixels.  @var{window} must be a live window and defaults to the selected
 one.  The return value is a cons of the maximum pixel-width of any text
@@ -1919,6 +1919,13 @@ means to not include the height of the mode- or header-line of
 @code{mode-line} or @code{header-line}, include only the height of that
 line, if present, in the return value.  If it is @code{t}, include the
 height of both, if present, in the return value.
+
+The optional argument @var{buffer} allows to specify an alternate buffer
+whose text size will be calculated.  If @var{buffer} is @code{nil} or
+omitted, then operate on the buffer of @var{window}.  If it is @code{t},
+then operate on the current buffer as if it were displayed in
+@var{window}.  If it specifies a live buffer, then operate on that
+buffer as if it were displayed in @var{window}.
 @end defun
 
 
index 5635e1b5e8ff8db842da7896f7e923249132627e..d45b4e332c69df3b856230a22f9fe0ea60a0ce50 100644 (file)
@@ -1,3 +1,7 @@
+2015-02-01  Martin Rudalics  <rudalics@gmx.at>
+
+       * xdisp.c (Fwindow_text_pixel_size): Add optional argument BUFFER.
+
 2015-02-01  Joakim Verona  <joakim@verona.se>
        Support for the new Xwidget feature.
        * window.c, Makefile.in, buffer.c, dispextern.h, dispnew.c, emacs.c:
index 01d598fe2c2d2f5281b192cd8d652bacedf93cfb..2da6c7676df9d64c8f13671b81e30e7b03f7aedd 100644 (file)
@@ -9703,7 +9703,7 @@ in_display_vector_p (struct it *it)
          && it->dpvec + it->current.dpvec_index != it->dpend);
 }
 
-DEFUN ("window-text-pixel-size", Fwindow_text_pixel_size, Swindow_text_pixel_size, 0, 6, 0,
+DEFUN ("window-text-pixel-size", Fwindow_text_pixel_size, Swindow_text_pixel_size, 0, 7, 0,
        doc: /* Return the size of the text of WINDOW's buffer in pixels.
 WINDOW must be a live window and defaults to the selected one.  The
 return value is a cons of the maximum pixel-width of any text line and
@@ -9736,28 +9736,42 @@ Optional argument MODE-AND-HEADER-LINE nil or omitted means do not
 include the height of the mode- or header-line of WINDOW in the return
 value.  If it is either the symbol `mode-line' or `header-line', include
 only the height of that line, if present, in the return value.  If t,
-include the height of both, if present, in the return value.  */)
-  (Lisp_Object window, Lisp_Object from, Lisp_Object to, Lisp_Object x_limit, Lisp_Object y_limit,
-   Lisp_Object mode_and_header_line)
+include the height of both, if present, in the return value.
+
+Optional argument BUFFER nil means to return the size of the text of
+WINDOW's buffer.  BUFFER t means to return the size of the text of the
+current buffer as if it were displayed in WINDOW.  Else BUFFER has to
+specify a live buffer and this function returns the size of the text of
+BUFFER as if it were displayed in WINDOW.  */)
+  (Lisp_Object window, Lisp_Object from, Lisp_Object to, Lisp_Object x_limit,
+   Lisp_Object y_limit, Lisp_Object mode_and_header_line, Lisp_Object buffer)
 {
   struct window *w = decode_live_window (window);
-  Lisp_Object buf;
   struct buffer *b;
   struct it it;
-  struct buffer *old_buffer = NULL;
+  struct buffer *old_b = NULL;
   ptrdiff_t start, end, pos;
   struct text_pos startp;
   void *itdata = NULL;
   int c, max_y = -1, x = 0, y = 0;
 
-  buf = w->contents;
-  CHECK_BUFFER (buf);
-  b = XBUFFER (buf);
-
-  if (b != current_buffer)
+  if (EQ (buffer, Qt))
+    b = current_buffer;
+  else
     {
-      old_buffer = current_buffer;
-      set_buffer_internal (b);
+      if (NILP (buffer))
+       buffer = w->contents;
+
+      CHECK_BUFFER (buffer);
+      if (!BUFFER_LIVE_P (XBUFFER (buffer)))
+       error ("Not a live buffer");
+
+      b = XBUFFER (buffer);
+      if (b != current_buffer)
+       {
+         old_b = current_buffer;
+         set_buffer_internal (b);
+       }
     }
 
   if (NILP (from))
@@ -9833,8 +9847,8 @@ include the height of both, if present, in the return value.  */)
 
   bidi_unshelve_cache (itdata, 0);
 
-  if (old_buffer)
-    set_buffer_internal (old_buffer);
+  if (old_b)
+    set_buffer_internal (old_b);
 
   return Fcons (make_number (x), make_number (y));
 }