aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChong Yidong2011-11-08 15:25:56 +0800
committerChong Yidong2011-11-08 15:25:56 +0800
commit105216ed03e65f32a7477ba3d27ab05c94bd3449 (patch)
tree3e43f81d57d93cc600c80e729bc03abbd68b5ff1 /src
parent0a9f9ab528d1b73d033e2cd93e89e6f42e6ad132 (diff)
downloademacs-105216ed03e65f32a7477ba3d27ab05c94bd3449.tar.gz
emacs-105216ed03e65f32a7477ba3d27ab05c94bd3449.zip
Move low-level window width/height functions to C, and high-level functions to Lisp.
* lisp/window.el (window-total-height, window-total-width): Doc fix. (window-body-size): Move from C. (window-body-height, window-body-width): Move to C. * src/window.c (Fwindow_left_column, Fwindow_top_line): Doc fix. (Fwindow_body_height, Fwindow_body_width): Move from Lisp. Signal an error if not a live window. (Fwindow_total_width, Fwindow_total_height): Move from Lisp. (Fwindow_total_size, Fwindow_body_size): Move to Lisp.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog8
-rw-r--r--src/window.c113
2 files changed, 73 insertions, 48 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 54d8af7c708..8d413a21fa5 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,11 @@
12011-11-08 Chong Yidong <cyd@gnu.org>
2
3 * window.c (Fwindow_left_column, Fwindow_top_line): Doc fix.
4 (Fwindow_body_height, Fwindow_body_width): Move from Lisp. Signal
5 an error if not a live window.
6 (Fwindow_total_width, Fwindow_total_height): Move from Lisp.
7 (Fwindow_total_size, Fwindow_body_size): Move to Lisp.
8
12011-11-07 Juanma Barranquero <lekktu@gmail.com> 92011-11-07 Juanma Barranquero <lekktu@gmail.com>
2 10
3 * lisp.h (syms_of_abbrev): Remove declaration. 11 * lisp.h (syms_of_abbrev): Remove declaration.
diff --git a/src/window.c b/src/window.c
index 162ae08a00f..00e887436d3 100644
--- a/src/window.c
+++ b/src/window.c
@@ -539,27 +539,34 @@ selected one. */)
539 return decode_window (window)->use_time; 539 return decode_window (window)->use_time;
540} 540}
541 541
542DEFUN ("window-total-size", Fwindow_total_size, Swindow_total_size, 0, 2, 0, 542DEFUN ("window-total-height", Fwindow_total_height, Swindow_total_height, 0, 1, 0,
543 doc: /* Return the total number of lines of window WINDOW. 543 doc: /* Return the total height, in lines, of window WINDOW.
544If WINDOW is omitted or nil, it defaults to the selected window. 544If WINDOW is omitted or nil, it defaults to the selected window.
545 545
546The return value includes WINDOW's mode line and header line, if any. 546The return value includes the mode line and header line, if any.
547If WINDOW is internal, the return value is the sum of the total number 547If WINDOW is an internal window, the total height is the height
548of lines of WINDOW's child windows if these are vertically combined 548of the screen areas spanned by its children.
549and the height of WINDOW's first child otherwise. 549
550 550On a graphical display, this total height is reported as an
551Optional argument HORIZONTAL non-nil means return the total number of 551integer multiple of the default character height. */)
552columns of WINDOW. In this case the return value includes any vertical 552 (Lisp_Object window)
553dividers or scrollbars of WINDOW. If WINDOW is internal, the return
554value is the sum of the total number of columns of WINDOW's child
555windows if they are horizontally combined and the width of WINDOW's
556first child otherwise. */)
557 (Lisp_Object window, Lisp_Object horizontal)
558{ 553{
559 if (NILP (horizontal)) 554 return decode_any_window (window)->total_lines;
560 return decode_any_window (window)->total_lines; 555}
561 else 556
562 return decode_any_window (window)->total_cols; 557DEFUN ("window-total-width", Fwindow_total_width, Swindow_total_width, 0, 1, 0,
558 doc: /* Return the total width, in columns, of window WINDOW.
559If WINDOW is omitted or nil, it defaults to the selected window.
560
561The return value includes any vertical dividers or scroll bars
562belonging to WINDOW. If WINDOW is an internal window, the total width
563is the width of the screen areas spanned by its children.
564
565On a graphical display, this total width is reported as an
566integer multiple of the default character width. */)
567 (Lisp_Object window)
568{
569 return decode_any_window (window)->total_cols;
563} 570}
564 571
565DEFUN ("window-new-total", Fwindow_new_total, Swindow_new_total, 0, 1, 0, 572DEFUN ("window-new-total", Fwindow_new_total, Swindow_new_total, 0, 1, 0,
@@ -592,6 +599,10 @@ If WINDOW is omitted or nil, it defaults to the selected window. */)
592 599
593DEFUN ("window-left-column", Fwindow_left_column, Swindow_left_column, 0, 1, 0, 600DEFUN ("window-left-column", Fwindow_left_column, Swindow_left_column, 0, 1, 0,
594 doc: /* Return left column of window WINDOW. 601 doc: /* Return left column of window WINDOW.
602This is the distance, in columns, between the left edge of WINDOW and
603the left edge of the frame's window area. For instance, the return
604value is 0 if there is no window to the left of WINDOW.
605
595If WINDOW is omitted or nil, it defaults to the selected window. */) 606If WINDOW is omitted or nil, it defaults to the selected window. */)
596 (Lisp_Object window) 607 (Lisp_Object window)
597{ 608{
@@ -600,6 +611,10 @@ If WINDOW is omitted or nil, it defaults to the selected window. */)
600 611
601DEFUN ("window-top-line", Fwindow_top_line, Swindow_top_line, 0, 1, 0, 612DEFUN ("window-top-line", Fwindow_top_line, Swindow_top_line, 0, 1, 0,
602 doc: /* Return top line of window WINDOW. 613 doc: /* Return top line of window WINDOW.
614This is the distance, in lines, between the top of WINDOW and the top
615of the frame's window area. For instance, the return value is 0 if
616there is no window above WINDOW.
617
603If WINDOW is omitted or nil, it defaults to the selected window. */) 618If WINDOW is omitted or nil, it defaults to the selected window. */)
604 (Lisp_Object window) 619 (Lisp_Object window)
605{ 620{
@@ -655,34 +670,34 @@ window_body_cols (struct window *w)
655 return width; 670 return width;
656} 671}
657 672
658DEFUN ("window-body-size", Fwindow_body_size, Swindow_body_size, 0, 2, 0, 673DEFUN ("window-body-height", Fwindow_body_height, Swindow_body_height, 0, 1, 0,
659 doc: /* Return the number of lines or columns of WINDOW's body. 674 doc: /* Return the height, in lines, of WINDOW's text area.
660WINDOW must be a live window and defaults to the selected one. 675If WINDOW is omitted or nil, it defaults to the selected window.
676Signal an error if the window is not live.
661 677
662If the optional argument HORIZONTAL is omitted or nil, the function 678The returned height does not include the mode line or header line.
663returns the number of WINDOW's lines, excluding the mode line and 679On a graphical display, the height is expressed as an integer multiple
664header line, if any. 680of the default character height. If a line at the bottom of the text
665 681area is only partially visible, that counts as a whole line; to
666If HORIZONTAL is non-nil, the function returns the number of columns 682exclude partially-visible lines, use `window-text-height'. */)
667excluding any vertical dividers or scroll bars owned by WINDOW. On a 683 (Lisp_Object window)
668window-system the return value also excludes the number of columns
669used for WINDOW's fringes or display margins.
670
671Note that the return value is measured in canonical units, i.e. for
672the default frame's face. If the window shows some characters with
673non-default face, e.g., if the font of some characters is larger or
674smaller than the default font, the value returned by this function
675will not match the actual number of lines or characters per line
676shown in the window. To get the actual number of columns and lines,
677use `posn-at-point'. */)
678 (Lisp_Object window, Lisp_Object horizontal)
679{ 684{
680 struct window *w = decode_any_window (window); 685 struct window *w = decode_window (window);
686 return make_number (window_body_lines (w));
687}
681 688
682 if (NILP (horizontal)) 689DEFUN ("window-body-width", Fwindow_body_width, Swindow_body_width, 0, 1, 0,
683 return make_number (window_body_lines (w)); 690 doc: /* Return the width, in columns, of WINDOW's text area.
684 else 691If WINDOW is omitted or nil, it defaults to the selected window.
685 return make_number (window_body_cols (w)); 692Signal an error if the window is not live.
693
694The return value does not include any vertical dividers, fringe or
695marginal areas, or scroll bars. On a graphical display, the width is
696expressed as an integer multiple of the default character width. */)
697 (Lisp_Object window)
698{
699 struct window *w = decode_window (window);
700 return make_number (window_body_cols (w));
686} 701}
687 702
688DEFUN ("window-hscroll", Fwindow_hscroll, Swindow_hscroll, 0, 1, 0, 703DEFUN ("window-hscroll", Fwindow_hscroll, Swindow_hscroll, 0, 1, 0,
@@ -5218,10 +5233,10 @@ and redisplay normally--don't erase and redraw the frame. */)
5218DEFUN ("window-text-height", Fwindow_text_height, Swindow_text_height, 5233DEFUN ("window-text-height", Fwindow_text_height, Swindow_text_height,
5219 0, 1, 0, 5234 0, 1, 0,
5220 doc: /* Return the height in lines of the text display area of WINDOW. 5235 doc: /* Return the height in lines of the text display area of WINDOW.
5221WINDOW defaults to the selected window. 5236If WINDOW is omitted or nil, it defaults to the selected window.
5222 5237
5223The return value does not include the mode line, any header line, nor 5238The returned height does not include the mode line, any header line,
5224any partial-height lines in the text display area. */) 5239nor any partial-height lines at the bottom of the text area. */)
5225 (Lisp_Object window) 5240 (Lisp_Object window)
5226{ 5241{
5227 struct window *w = decode_window (window); 5242 struct window *w = decode_window (window);
@@ -6583,14 +6598,16 @@ function `window-nest' and altered by the function `set-window-nest'. */);
6583 defsubr (&Swindow_use_time); 6598 defsubr (&Swindow_use_time);
6584 defsubr (&Swindow_top_line); 6599 defsubr (&Swindow_top_line);
6585 defsubr (&Swindow_left_column); 6600 defsubr (&Swindow_left_column);
6586 defsubr (&Swindow_total_size); 6601 defsubr (&Swindow_total_height);
6602 defsubr (&Swindow_total_width);
6587 defsubr (&Swindow_normal_size); 6603 defsubr (&Swindow_normal_size);
6588 defsubr (&Swindow_new_total); 6604 defsubr (&Swindow_new_total);
6589 defsubr (&Swindow_new_normal); 6605 defsubr (&Swindow_new_normal);
6590 defsubr (&Sset_window_new_total); 6606 defsubr (&Sset_window_new_total);
6591 defsubr (&Sset_window_new_normal); 6607 defsubr (&Sset_window_new_normal);
6592 defsubr (&Swindow_resize_apply); 6608 defsubr (&Swindow_resize_apply);
6593 defsubr (&Swindow_body_size); 6609 defsubr (&Swindow_body_height);
6610 defsubr (&Swindow_body_width);
6594 defsubr (&Swindow_hscroll); 6611 defsubr (&Swindow_hscroll);
6595 defsubr (&Sset_window_hscroll); 6612 defsubr (&Sset_window_hscroll);
6596 defsubr (&Swindow_redisplay_end_trigger); 6613 defsubr (&Swindow_redisplay_end_trigger);