[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] /srv/bzr/emacs/trunk r111647: * window.h (struct window):
From: |
Dmitry Antipov |
Subject: |
[Emacs-diffs] /srv/bzr/emacs/trunk r111647: * window.h (struct window): Convert base_line_number, base_line_pos |
Date: |
Fri, 01 Feb 2013 11:23:18 +0400 |
User-agent: |
Bazaar (2.5.0) |
------------------------------------------------------------
revno: 111647
committer: Dmitry Antipov <address@hidden>
branch nick: trunk
timestamp: Fri 2013-02-01 11:23:18 +0400
message:
* window.h (struct window): Convert base_line_number, base_line_pos
and column_number_displayed members from Lisp_Object to ptrdiff_t.
Convert region_showing member from Lisp_Object to bitfield.
Remove sequence_number member. Adjust comments.
* window.c (sequence_number): Remove.
(make_window): Initialize column_number_displayed.
* print.c (print_object): Follow the printed representation of
frames and print window pointer to distinguish between windows.
(adjust_window_count): Invalidate base_line_pos. Adjust comment.
* xdisp.c (wset_base_line_number, wset_base_line_pos)
(wset_column_number_displayed, wset_region_showing): Remove.
(window_buffer_changed, mode_line_update_needed, redisplay_internal)
(try_scrolling, try_cursor_movement, redisplay_window)
(try_window_reusing_current_matrix, try_window_id, display_line)
(display_mode_lines, decode_mode_spec): Adjust users.
* .gdbinit (pwinx): Do not print sequence_number.
modified:
src/.gdbinit
src/ChangeLog
src/print.c
src/window.c
src/window.h
src/xdisp.c
=== modified file 'src/.gdbinit'
--- a/src/.gdbinit 2013-01-02 16:13:04 +0000
+++ b/src/.gdbinit 2013-02-01 07:23:18 +0000
@@ -358,7 +358,6 @@
define pwinx
set $w = $arg0
- xgetint $w->sequence_number
if ($w->mini_p != Qnil)
printf "Mini "
end
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog 2013-02-01 06:30:51 +0000
+++ b/src/ChangeLog 2013-02-01 07:23:18 +0000
@@ -1,3 +1,22 @@
+2013-02-01 Dmitry Antipov <address@hidden>
+
+ * window.h (struct window): Convert base_line_number, base_line_pos
+ and column_number_displayed members from Lisp_Object to ptrdiff_t.
+ Convert region_showing member from Lisp_Object to bitfield.
+ Remove sequence_number member. Adjust comments.
+ * window.c (sequence_number): Remove.
+ (make_window): Initialize column_number_displayed.
+ * print.c (print_object): Follow the printed representation of
+ frames and print window pointer to distinguish between windows.
+ (adjust_window_count): Invalidate base_line_pos. Adjust comment.
+ * xdisp.c (wset_base_line_number, wset_base_line_pos)
+ (wset_column_number_displayed, wset_region_showing): Remove.
+ (window_buffer_changed, mode_line_update_needed, redisplay_internal)
+ (try_scrolling, try_cursor_movement, redisplay_window)
+ (try_window_reusing_current_matrix, try_window_id, display_line)
+ (display_mode_lines, decode_mode_spec): Adjust users.
+ * .gdbinit (pwinx): Do not print sequence_number.
+
2013-02-01 Paul Eggert <address@hidden>
Use fdopendir, fstatat and readlinkat, for efficiency (Bug#13539).
=== modified file 'src/print.c'
--- a/src/print.c 2013-01-14 17:46:14 +0000
+++ b/src/print.c 2013-02-01 07:23:18 +0000
@@ -1766,7 +1766,7 @@
{
int len;
strout ("#<window ", -1, -1, printcharfun);
- len = sprintf (buf, "%d", XWINDOW (obj)->sequence_number);
+ len = sprintf (buf, "%p", XWINDOW (obj));
strout (buf, len, len, printcharfun);
if (!NILP (XWINDOW (obj)->buffer))
{
=== modified file 'src/window.c'
--- a/src/window.c 2013-01-24 05:41:28 +0000
+++ b/src/window.c 2013-02-01 07:23:18 +0000
@@ -116,9 +116,6 @@
/* Hook run at end of temp_output_buffer_show. */
static Lisp_Object Qtemp_buffer_show_hook;
-/* Incremented for each window created. */
-static int sequence_number;
-
/* Nonzero after init_window_once has finished. */
static int window_initialized;
@@ -286,8 +283,9 @@
b = b->base_buffer;
b->window_count += arg;
eassert (b->window_count >= 0);
- /* Catch redisplay's attention. */
+ /* These should be recalculated by redisplay code. */
w->window_end_valid = 0;
+ w->base_line_pos = 0;
}
}
@@ -3429,8 +3427,6 @@
adjust_window_count (p, 1);
XSETWINDOW (parent, p);
- p->sequence_number = ++sequence_number;
-
replace_window (window, parent, 1);
wset_next (o, Qnil);
@@ -3479,7 +3475,7 @@
w->nrows_scale_factor = w->ncols_scale_factor = 1;
w->phys_cursor_type = -1;
w->phys_cursor_width = -1;
- w->sequence_number = ++sequence_number;
+ w->column_number_displayed = -1;
/* Reset window_list. */
Vwindow_list = Qnil;
=== modified file 'src/window.h'
--- a/src/window.h 2013-01-22 11:48:00 +0000
+++ b/src/window.h 2013-02-01 07:23:18 +0000
@@ -192,23 +192,6 @@
and Qt, so bitfield can't be used here. */
Lisp_Object dedicated;
- /* Line number and position of a line somewhere above the top of the
- screen. If this field is nil, it means we don't have a base
- line. */
- Lisp_Object base_line_number;
- /* If this field is nil, it means we don't have a base line.
- If it is a buffer, it means don't display the line number
- as long as the window shows that buffer. */
- Lisp_Object base_line_pos;
-
- /* If we have highlighted the region (or any part of it),
- this is the mark position that we used, as an integer. */
- Lisp_Object region_showing;
-
- /* The column number currently displayed in this window's mode line,
- or nil if column numbers are not being displayed. */
- Lisp_Object column_number_displayed;
-
/* If redisplay in this window goes beyond this buffer position,
must run the redisplay-end-trigger-hook. */
Lisp_Object redisplay_end_trigger;
@@ -238,9 +221,6 @@
/* Number saying how recently window was selected. */
int use_time;
- /* Unique number of window assigned when it was created. */
- int sequence_number;
-
/* Number of columns display within the window is scrolled to the left. */
ptrdiff_t hscroll;
@@ -260,6 +240,19 @@
it should be positive. */
ptrdiff_t last_point;
+ /* Line number and position of a line somewhere above the top of the
+ screen. If this field is zero, it means we don't have a base line. */
+ ptrdiff_t base_line_number;
+
+ /* If this field is zero, it means we don't have a base line.
+ If it is -1, it means don't display the line number as long
+ as the window shows its buffer. */
+ ptrdiff_t base_line_pos;
+
+ /* The column number currently displayed in this window's mode
+ line, or -1 if column numbers are not being displayed. */
+ ptrdiff_t column_number_displayed;
+
/* Scaling factor for the glyph_matrix size calculation in this window.
Used if window contains many small images or uses proportional fonts,
as the normal may yield a matrix which is too small. */
@@ -340,6 +333,9 @@
the frame image that window_end_pos did not get onto the frame. */
unsigned window_end_valid : 1;
+ /* Nonzero if we have highlighted the region (or any part of it). */
+ unsigned region_showing : 1;
+
/* Amount by which lines of this window are scrolled in
y-direction (smooth scrolling). */
int vscroll;
=== modified file 'src/xdisp.c'
--- a/src/xdisp.c 2013-01-25 17:13:31 +0000
+++ b/src/xdisp.c 2013-02-01 07:23:18 +0000
@@ -367,28 +367,6 @@
static Lisp_Object Qmargin, Qpointer;
static Lisp_Object Qline_height;
-/* These setters are used only in this file, so they can be private. */
-static void
-wset_base_line_number (struct window *w, Lisp_Object val)
-{
- w->base_line_number = val;
-}
-static void
-wset_base_line_pos (struct window *w, Lisp_Object val)
-{
- w->base_line_pos = val;
-}
-static void
-wset_column_number_displayed (struct window *w, Lisp_Object val)
-{
- w->column_number_displayed = val;
-}
-static void
-wset_region_showing (struct window *w, Lisp_Object val)
-{
- w->region_showing = val;
-}
-
#ifdef HAVE_WINDOW_SYSTEM
/* Test if overflow newline into fringe. Called with iterator IT
@@ -10775,7 +10753,7 @@
return (((BUF_SAVE_MODIFF (b) < BUF_MODIFF (b)) != w->last_had_star)
|| ((!NILP (Vtransient_mark_mode) && !NILP (BVAR (b, mark_active)))
- != !NILP (w->region_showing)));
+ != w->region_showing));
}
/* Nonzero if W has %c in its mode line and mode line should be updated. */
@@ -10783,9 +10761,9 @@
static int
mode_line_update_needed (struct window *w)
{
- return (!NILP (w->column_number_displayed)
+ return (w->column_number_displayed != -1
&& !(PT == w->last_point && !window_outdated (w))
- && (XFASTINT (w->column_number_displayed) != current_column ()));
+ && (w->column_number_displayed != current_column ()));
}
/***********************************************************************
@@ -13038,18 +13016,6 @@
clear_garbaged_frames ();
}
-
- /* If showing the region, and mark has changed, we must redisplay
- the whole window. The assignment to this_line_start_pos prevents
- the optimization directly below this if-statement. */
- if (((!NILP (Vtransient_mark_mode)
- && !NILP (BVAR (XBUFFER (w->buffer), mark_active)))
- != !NILP (w->region_showing))
- || (!NILP (w->region_showing)
- && !EQ (w->region_showing,
- Fmarker_position (BVAR (XBUFFER (w->buffer), mark)))))
- CHARPOS (this_line_start_pos) = 0;
-
/* Optimize the case that only the line containing the cursor in the
selected window has changed. Variables starting with this_ are
set in display_line and record information about the line
@@ -13213,7 +13179,7 @@
&& (EQ (selected_window,
BVAR (current_buffer, last_selected_window))
|| highlight_nonselected_windows)
- && NILP (w->region_showing)
+ && !w->region_showing
&& NILP (Vshow_trailing_whitespace)
&& !cursor_in_echo_area)
{
@@ -14710,7 +14676,7 @@
if (!just_this_one_p
|| current_buffer->clip_changed
|| BEG_UNCHANGED < CHARPOS (startp))
- wset_base_line_number (w, Qnil);
+ w->base_line_number = 0;
/* If cursor ends up on a partially visible line,
treat that as being off the bottom of the screen. */
@@ -14859,7 +14825,7 @@
region exists, cursor movement has to do more than just
set the cursor. */
&& markpos_of_region () < 0
- && NILP (w->region_showing)
+ && !w->region_showing
&& NILP (Vshow_trailing_whitespace)
/* This code is not used for mini-buffer for the sake of the case
of redisplaying to replace an echo area message; since in
@@ -15425,7 +15391,7 @@
/* Forget any recorded base line for line number display. */
if (!buffer_unchanged_p)
- wset_base_line_number (w, Qnil);
+ w->base_line_number = 0;
/* Redisplay the mode line. Select the buffer properly for that.
Also, run the hook window-scroll-functions
@@ -15665,7 +15631,7 @@
|| current_buffer->clip_changed
|| BEG_UNCHANGED < CHARPOS (startp))
/* Forget any recorded base line for line number display. */
- wset_base_line_number (w, Qnil);
+ w->base_line_number = 0;
if (!cursor_row_fully_visible_p (w, 1, 0))
{
@@ -15732,11 +15698,9 @@
debug_method_add (w, "recenter");
#endif
- /* w->vscroll = 0; */
-
/* Forget any previously recorded base line for line number display. */
if (!buffer_unchanged_p)
- wset_base_line_number (w, Qnil);
+ w->base_line_number = 0;
/* Determine the window start relative to point. */
init_iterator (&it, w, PT, PT_BYTE, NULL, DEFAULT_FACE_ID);
@@ -15956,10 +15920,10 @@
&& !FRAME_WINDOW_P (f)
&& !WINDOW_FULL_WIDTH_P (w))
/* Line number to display. */
- || INTEGERP (w->base_line_pos)
+ || w->base_line_pos > 0
/* Column number is displayed and different from the one displayed. */
- || (!NILP (w->column_number_displayed)
- && (XFASTINT (w->column_number_displayed) != current_column ())))
+ || (w->column_number_displayed != -1
+ && (w->column_number_displayed != current_column ())))
/* This means that the window has a mode line. */
&& (WINDOW_WANTS_MODELINE_P (w)
|| WINDOW_WANTS_HEADER_LINE_P (w)))
@@ -15990,11 +15954,10 @@
goto need_larger_matrices;
}
- if (!line_number_displayed
- && !BUFFERP (w->base_line_pos))
+ if (!line_number_displayed && w->base_line_pos != -1)
{
- wset_base_line_pos (w, Qnil);
- wset_base_line_number (w, Qnil);
+ w->base_line_pos = 0;
+ w->base_line_number = 0;
}
finish_menu_bars:
@@ -16231,7 +16194,7 @@
/* Can't do this if region may have changed. */
if (0 <= markpos_of_region ()
- || !NILP (w->region_showing)
+ || w->region_showing
|| !NILP (Vshow_trailing_whitespace))
return 0;
@@ -17070,7 +17033,7 @@
GIVE_UP (11);
/* Likewise if showing a region. */
- if (!NILP (w->region_showing))
+ if (w->region_showing)
GIVE_UP (10);
/* Can't use this if overlay arrow position and/or string have
@@ -19157,7 +19120,7 @@
}
/* Is IT->w showing the region? */
- wset_region_showing (it->w, it->region_beg_charpos > 0 ? Qt : Qnil);
+ it->w->region_showing = it->region_beg_charpos > 0;
/* Clear the result glyph row and enable it. */
prepare_desired_row (row);
@@ -20161,7 +20124,7 @@
/* These will be set while the mode line specs are processed. */
line_number_displayed = 0;
- wset_column_number_displayed (w, Qnil);
+ w->column_number_displayed = -1;
if (WINDOW_WANTS_MODELINE_P (w))
{
@@ -21184,8 +21147,7 @@
returned with spaces to that value. Return a Lisp string in
*STRING if the resulting string is taken from that Lisp string.
- Note we operate on the current buffer for most purposes,
- the exception being w->base_line_pos. */
+ Note we operate on the current buffer for most purposes. */
static char lots_of_dashes[] =
"--------------------------------------------------------------------------------------------------------------------------------------------";
@@ -21296,7 +21258,7 @@
else
{
ptrdiff_t col = current_column ();
- wset_column_number_displayed (w, make_number (col));
+ w->column_number_displayed = col;
pint2str (decode_mode_spec_buf, width, col);
return decode_mode_spec_buf;
}
@@ -21355,27 +21317,24 @@
/* If we decided that this buffer isn't suitable for line numbers,
don't forget that too fast. */
- if (EQ (w->base_line_pos, w->buffer))
+ if (w->base_line_pos == -1)
goto no_value;
- /* But do forget it, if the window shows a different buffer now. */
- else if (BUFFERP (w->base_line_pos))
- wset_base_line_pos (w, Qnil);
/* If the buffer is very big, don't waste time. */
if (INTEGERP (Vline_number_display_limit)
&& BUF_ZV (b) - BUF_BEGV (b) > XINT (Vline_number_display_limit))
{
- wset_base_line_pos (w, Qnil);
- wset_base_line_number (w, Qnil);
+ w->base_line_pos = 0;
+ w->base_line_number = 0;
goto no_value;
}
- if (INTEGERP (w->base_line_number)
- && INTEGERP (w->base_line_pos)
- && XFASTINT (w->base_line_pos) <= startpos)
+ if (w->base_line_number > 0
+ && w->base_line_pos > 0
+ && w->base_line_pos <= startpos)
{
- line = XFASTINT (w->base_line_number);
- linepos = XFASTINT (w->base_line_pos);
+ line = w->base_line_number;
+ linepos = w->base_line_pos;
linepos_byte = buf_charpos_to_bytepos (b, linepos);
}
else
@@ -21398,8 +21357,8 @@
go back past it. */
if (startpos == BUF_BEGV (b))
{
- wset_base_line_number (w, make_number (topline));
- wset_base_line_pos (w, make_number (BUF_BEGV (b)));
+ w->base_line_number = topline;
+ w->base_line_pos = BUF_BEGV (b);
}
else if (nlines < height + 25 || nlines > height * 3 + 50
|| linepos == BUF_BEGV (b))
@@ -21425,13 +21384,13 @@
give up on line numbers for this window. */
if (position == limit_byte && limit == startpos - distance)
{
- wset_base_line_pos (w, w->buffer);
- wset_base_line_number (w, Qnil);
+ w->base_line_pos = -1;
+ w->base_line_number = 0;
goto no_value;
}
- wset_base_line_number (w, make_number (topline - nlines));
- wset_base_line_pos (w, make_number (BYTE_TO_CHAR (position)));
+ w->base_line_number = topline - nlines;
+ w->base_line_pos = BYTE_TO_CHAR (position);
}
/* Now count lines from the start pos to point. */
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] /srv/bzr/emacs/trunk r111647: * window.h (struct window): Convert base_line_number, base_line_pos,
Dmitry Antipov <=