aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog43
-rw-r--r--src/abbrev.c4
-rw-r--r--src/callint.c3
-rw-r--r--src/data.c4
-rw-r--r--src/editfns.c5
-rw-r--r--src/eval.c11
-rw-r--r--src/indent.c79
-rw-r--r--src/keyboard.c4
-rw-r--r--src/keymap.c5
-rw-r--r--src/process.c12
-rw-r--r--src/window.c2
11 files changed, 132 insertions, 40 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index d06be958790..0194c4b8c6f 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,46 @@
12004-08-03 Kim F. Storm <storm@cua.dk>
2
3 * indent.c (compute_motion): Fix check for full width window
4 in non-window case. Do not count left truncation glyph on
5 window systems.
6
72004-08-02 Luc Teirlinck <teirllm@auburn.edu>
8
9 * data.c (Finteractive_form): Doc fix.
10
112004-08-02 Kim F. Storm <storm@cua.dk>
12
13 * indent.c (compute_motion): Use actual window width if WIDTH is -1,
14 properly accounting for continuation glyph on non-window systems.
15 (Fcompute_motion): Use actual window width if WIDTH is nil, and
16 actual window width/height if TOPOS is nil, properly accounting for
17 continuation glyphs on non-window systems, and optional header lines.
18 (vmotion): Let compute_motion calculate actual window width.
19
20 * window.c (window_scroll_line_based): Let compute_motion
21 calculate actual window width.
22
232004-08-02 Kim F. Storm <storm@cua.dk>
24
25 * process.c (read_process_output): Use whole read buffer.
26 Don't trigger adaptive read buffering on errors.
27
282004-07-31 Luc Teirlinck <teirllm@auburn.edu>
29
30 * keymap.c (Fset_keymap_parent, Fdefine_prefix_command): Doc fixes.
31
32 * keyboard.c (syms_of_keyboard) <disable-point-adjustment>: Doc fix.
33
34 * callint.c (Fcall_interactively): Doc fix.
35
362004-07-30 Kim F. Storm <storm@cua.dk>
37
38 * editfns.c (Fformat): Allocate extra (dummy) element in info.
39
402004-07-28 Luc Teirlinck <teirllm@auburn.edu>
41
42 * eval.c (Fdefvar, Fdefconst): Doc fixes.
43
12004-07-27 Kim F. Storm <storm@cua.dk> 442004-07-27 Kim F. Storm <storm@cua.dk>
2 45
3 * xdisp.c (move_it_in_display_line_to): Check BUFFER_POS_REACHED_P after 46 * xdisp.c (move_it_in_display_line_to): Check BUFFER_POS_REACHED_P after
diff --git a/src/abbrev.c b/src/abbrev.c
index 7e68011955d..086a58021fb 100644
--- a/src/abbrev.c
+++ b/src/abbrev.c
@@ -248,6 +248,8 @@ Returns the abbrev symbol, if expansion took place. */)
248 248
249 value = Qnil; 249 value = Qnil;
250 250
251 Frun_hooks (1, &Qpre_abbrev_expand_hook);
252
251 wordstart = 0; 253 wordstart = 0;
252 if (!(BUFFERP (Vabbrev_start_location_buffer) 254 if (!(BUFFERP (Vabbrev_start_location_buffer)
253 && XBUFFER (Vabbrev_start_location_buffer) == current_buffer)) 255 && XBUFFER (Vabbrev_start_location_buffer) == current_buffer))
@@ -324,8 +326,6 @@ Returns the abbrev symbol, if expansion took place. */)
324 if (INTEGERP (sym) || NILP (SYMBOL_VALUE (sym))) 326 if (INTEGERP (sym) || NILP (SYMBOL_VALUE (sym)))
325 return value; 327 return value;
326 328
327 Frun_hooks (1, &Qpre_abbrev_expand_hook);
328
329 if (INTERACTIVE && !EQ (minibuf_window, selected_window)) 329 if (INTERACTIVE && !EQ (minibuf_window, selected_window))
330 { 330 {
331 /* Add an undo boundary, in case we are doing this for 331 /* Add an undo boundary, in case we are doing this for
diff --git a/src/callint.c b/src/callint.c
index a3e4984fd16..8b8cb032095 100644
--- a/src/callint.c
+++ b/src/callint.c
@@ -256,7 +256,8 @@ Optional second arg RECORD-FLAG non-nil
256means unconditionally put this command in the command-history. 256means unconditionally put this command in the command-history.
257Otherwise, this is done only if an arg is read using the minibuffer. 257Otherwise, this is done only if an arg is read using the minibuffer.
258Optional third arg KEYS, if given, specifies the sequence of events to 258Optional third arg KEYS, if given, specifies the sequence of events to
259supply if the command inquires which events were used to invoke it. */) 259supply if the command inquires which events were used to invoke it.
260If KEYS is omitted or nil, the return value of `this-command-keys' is used. */)
260 (function, record_flag, keys) 261 (function, record_flag, keys)
261 Lisp_Object function, record_flag, keys; 262 Lisp_Object function, record_flag, keys;
262{ 263{
diff --git a/src/data.c b/src/data.c
index 1071107947c..558c7a974af 100644
--- a/src/data.c
+++ b/src/data.c
@@ -776,8 +776,8 @@ SUBR must be a built-in function. */)
776 776
777DEFUN ("interactive-form", Finteractive_form, Sinteractive_form, 1, 1, 0, 777DEFUN ("interactive-form", Finteractive_form, Sinteractive_form, 1, 1, 0,
778 doc: /* Return the interactive form of CMD or nil if none. 778 doc: /* Return the interactive form of CMD or nil if none.
779CMD must be a command. Value, if non-nil, is a list 779If CMD is not a command, the return value is nil.
780\(interactive SPEC). */) 780Value, if non-nil, is a list \(interactive SPEC). */)
781 (cmd) 781 (cmd)
782 Lisp_Object cmd; 782 Lisp_Object cmd;
783{ 783{
diff --git a/src/editfns.c b/src/editfns.c
index 2782a966bf0..7fdd5598bf8 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -3410,6 +3410,7 @@ usage: (format STRING &rest OBJECTS) */)
3410 /* Piggyback on this loop to initialize precision[N]. */ 3410 /* Piggyback on this loop to initialize precision[N]. */
3411 precision[n] = -1; 3411 precision[n] = -1;
3412 } 3412 }
3413 precision[nargs] = -1;
3413 3414
3414 CHECK_STRING (args[0]); 3415 CHECK_STRING (args[0]);
3415 /* We may have to change "%S" to "%s". */ 3416 /* We may have to change "%S" to "%s". */
@@ -3433,11 +3434,11 @@ usage: (format STRING &rest OBJECTS) */)
3433 3434
3434 /* Allocate the info and discarded tables. */ 3435 /* Allocate the info and discarded tables. */
3435 { 3436 {
3436 int nbytes = nargs * sizeof *info; 3437 int nbytes = (nargs+1) * sizeof *info;
3437 int i; 3438 int i;
3438 info = (struct info *) alloca (nbytes); 3439 info = (struct info *) alloca (nbytes);
3439 bzero (info, nbytes); 3440 bzero (info, nbytes);
3440 for (i = 0; i < nargs; i++) 3441 for (i = 0; i <= nargs; i++)
3441 info[i].start = -1; 3442 info[i].start = -1;
3442 discarded = (char *) alloca (SBYTES (args[0])); 3443 discarded = (char *) alloca (SBYTES (args[0]));
3443 bzero (discarded, SBYTES (args[0])); 3444 bzero (discarded, SBYTES (args[0]));
diff --git a/src/eval.c b/src/eval.c
index f28105ac987..ee74215b2ee 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -742,6 +742,13 @@ If DOCSTRING starts with *, this variable is identified as a user option.
742 This means that M-x set-variable recognizes it. 742 This means that M-x set-variable recognizes it.
743 See also `user-variable-p'. 743 See also `user-variable-p'.
744If INITVALUE is missing, SYMBOL's value is not set. 744If INITVALUE is missing, SYMBOL's value is not set.
745
746If SYMBOL has a local binding, then this form affects the local
747binding. This is usually not what you want. Thus, if you need to
748load a file defining variables, with this form or with `defconst' or
749`defcustom', you should always load that file _outside_ any bindings
750for these variables. \(`defconst' and `defcustom' behave similarly in
751this respect.)
745usage: (defvar SYMBOL &optional INITVALUE DOCSTRING) */) 752usage: (defvar SYMBOL &optional INITVALUE DOCSTRING) */)
746 (args) 753 (args)
747 Lisp_Object args; 754 Lisp_Object args;
@@ -784,6 +791,10 @@ Always sets the value of SYMBOL to the result of evalling INITVALUE.
784If SYMBOL is buffer-local, its default value is what is set; 791If SYMBOL is buffer-local, its default value is what is set;
785 buffer-local values are not affected. 792 buffer-local values are not affected.
786DOCSTRING is optional. 793DOCSTRING is optional.
794
795If SYMBOL has a local binding, then this form sets the local binding's
796value. However, you should normally not make local bindings for
797variables defined with this form.
787usage: (defconst SYMBOL INITVALUE [DOCSTRING]) */) 798usage: (defconst SYMBOL INITVALUE [DOCSTRING]) */)
788 (args) 799 (args)
789 Lisp_Object args; 800 Lisp_Object args;
diff --git a/src/indent.c b/src/indent.c
index a5de1431e4b..d8bd5f5c663 100644
--- a/src/indent.c
+++ b/src/indent.c
@@ -1131,6 +1131,9 @@ struct position val_compute_motion;
1131 1131
1132 WIDTH is the number of columns available to display text; 1132 WIDTH is the number of columns available to display text;
1133 compute_motion uses this to handle continuation lines and such. 1133 compute_motion uses this to handle continuation lines and such.
1134 If WIDTH is -1, use width of window's text area adjusted for
1135 continuation glyph when needed.
1136
1134 HSCROLL is the number of columns not being displayed at the left 1137 HSCROLL is the number of columns not being displayed at the left
1135 margin; this is usually taken from a window's hscroll member. 1138 margin; this is usually taken from a window's hscroll member.
1136 TAB_OFFSET is the number of columns of the first tab that aren't 1139 TAB_OFFSET is the number of columns of the first tab that aren't
@@ -1228,6 +1231,7 @@ compute_motion (from, fromvpos, fromhpos, did_motion, to, tovpos, tohpos, width,
1228 int prev_vpos = 0; 1231 int prev_vpos = 0;
1229 int contin_hpos; /* HPOS of last column of continued line. */ 1232 int contin_hpos; /* HPOS of last column of continued line. */
1230 int prev_tab_offset; /* Previous tab offset. */ 1233 int prev_tab_offset; /* Previous tab offset. */
1234 int continuation_glyph_width;
1231 1235
1232 XSETBUFFER (buffer, current_buffer); 1236 XSETBUFFER (buffer, current_buffer);
1233 XSETWINDOW (window, win); 1237 XSETWINDOW (window, win);
@@ -1245,6 +1249,23 @@ compute_motion (from, fromvpos, fromhpos, did_motion, to, tovpos, tohpos, width,
1245 if (tab_width <= 0 || tab_width > 1000) 1249 if (tab_width <= 0 || tab_width > 1000)
1246 tab_width = 8; 1250 tab_width = 8;
1247 1251
1252 /* Negative width means use all available text columns. */
1253 if (width < 0)
1254 {
1255 width = window_box_text_cols (win);
1256 /* We must make room for continuation marks if we don't have fringes. */
1257#ifdef HAVE_WINDOW_SYSTEM
1258 if (!FRAME_WINDOW_P (XFRAME (win->frame)))
1259#endif
1260 width -= 1;
1261 }
1262
1263 continuation_glyph_width = 0;
1264#ifdef HAVE_WINDOW_SYSTEM
1265 if (!FRAME_WINDOW_P (XFRAME (win->frame)))
1266 continuation_glyph_width = 1;
1267#endif
1268
1248 immediate_quit = 1; 1269 immediate_quit = 1;
1249 QUIT; 1270 QUIT;
1250 1271
@@ -1368,7 +1389,8 @@ compute_motion (from, fromvpos, fromhpos, did_motion, to, tovpos, tohpos, width,
1368 { 1389 {
1369 if (hscroll 1390 if (hscroll
1370 || (truncate_partial_width_windows 1391 || (truncate_partial_width_windows
1371 && width + 1 < FRAME_COLS (XFRAME (WINDOW_FRAME (win)))) 1392 && ((width + continuation_glyph_width)
1393 < FRAME_COLS (XFRAME (WINDOW_FRAME (win)))))
1372 || !NILP (current_buffer->truncate_lines)) 1394 || !NILP (current_buffer->truncate_lines))
1373 { 1395 {
1374 /* Truncating: skip to newline, unless we are already past 1396 /* Truncating: skip to newline, unless we are already past
@@ -1652,7 +1674,7 @@ compute_motion (from, fromvpos, fromhpos, did_motion, to, tovpos, tohpos, width,
1652 hpos -= hscroll; 1674 hpos -= hscroll;
1653 /* Count the truncation glyph on column 0 */ 1675 /* Count the truncation glyph on column 0 */
1654 if (hscroll > 0) 1676 if (hscroll > 0)
1655 hpos++; 1677 hpos += continuation_glyph_width;
1656 tab_offset = 0; 1678 tab_offset = 0;
1657 } 1679 }
1658 contin_hpos = 0; 1680 contin_hpos = 0;
@@ -1737,12 +1759,14 @@ assuming it is at position FROMPOS--a cons of the form (HPOS . VPOS)--
1737to position TO or position TOPOS--another cons of the form (HPOS . VPOS)-- 1759to position TO or position TOPOS--another cons of the form (HPOS . VPOS)--
1738and return the ending buffer position and screen location. 1760and return the ending buffer position and screen location.
1739 1761
1762If TOPOS is nil, the actual width and height of the window's
1763text area are used.
1764
1740There are three additional arguments: 1765There are three additional arguments:
1741 1766
1742WIDTH is the number of columns available to display text; 1767WIDTH is the number of columns available to display text;
1743this affects handling of continuation lines. 1768this affects handling of continuation lines. A value of nil
1744This is usually the value returned by `window-width', less one (to allow 1769corresponds to the actual number of available text columns.
1745for the continuation glyph).
1746 1770
1747OFFSETS is either nil or a cons cell (HSCROLL . TAB-OFFSET). 1771OFFSETS is either nil or a cons cell (HSCROLL . TAB-OFFSET).
1748HSCROLL is the number of columns not being displayed at the left 1772HSCROLL is the number of columns not being displayed at the left
@@ -1774,6 +1798,7 @@ visible section of the buffer, and pass LINE and COL as TOPOS. */)
1774 Lisp_Object from, frompos, to, topos; 1798 Lisp_Object from, frompos, to, topos;
1775 Lisp_Object width, offsets, window; 1799 Lisp_Object width, offsets, window;
1776{ 1800{
1801 struct window *w;
1777 Lisp_Object bufpos, hpos, vpos, prevhpos; 1802 Lisp_Object bufpos, hpos, vpos, prevhpos;
1778 struct position *pos; 1803 struct position *pos;
1779 int hscroll, tab_offset; 1804 int hscroll, tab_offset;
@@ -1783,10 +1808,15 @@ visible section of the buffer, and pass LINE and COL as TOPOS. */)
1783 CHECK_NUMBER_CAR (frompos); 1808 CHECK_NUMBER_CAR (frompos);
1784 CHECK_NUMBER_CDR (frompos); 1809 CHECK_NUMBER_CDR (frompos);
1785 CHECK_NUMBER_COERCE_MARKER (to); 1810 CHECK_NUMBER_COERCE_MARKER (to);
1786 CHECK_CONS (topos); 1811 if (!NILP (topos))
1787 CHECK_NUMBER_CAR (topos); 1812 {
1788 CHECK_NUMBER_CDR (topos); 1813 CHECK_CONS (topos);
1789 CHECK_NUMBER (width); 1814 CHECK_NUMBER_CAR (topos);
1815 CHECK_NUMBER_CDR (topos);
1816 }
1817 if (!NILP (width))
1818 CHECK_NUMBER (width);
1819
1790 if (!NILP (offsets)) 1820 if (!NILP (offsets))
1791 { 1821 {
1792 CHECK_CONS (offsets); 1822 CHECK_CONS (offsets);
@@ -1802,6 +1832,7 @@ visible section of the buffer, and pass LINE and COL as TOPOS. */)
1802 window = Fselected_window (); 1832 window = Fselected_window ();
1803 else 1833 else
1804 CHECK_LIVE_WINDOW (window); 1834 CHECK_LIVE_WINDOW (window);
1835 w = XWINDOW (window);
1805 1836
1806 if (XINT (from) < BEGV || XINT (from) > ZV) 1837 if (XINT (from) < BEGV || XINT (from) > ZV)
1807 args_out_of_range_3 (from, make_number (BEGV), make_number (ZV)); 1838 args_out_of_range_3 (from, make_number (BEGV), make_number (ZV));
@@ -1810,9 +1841,20 @@ visible section of the buffer, and pass LINE and COL as TOPOS. */)
1810 1841
1811 pos = compute_motion (XINT (from), XINT (XCDR (frompos)), 1842 pos = compute_motion (XINT (from), XINT (XCDR (frompos)),
1812 XINT (XCAR (frompos)), 0, 1843 XINT (XCAR (frompos)), 0,
1813 XINT (to), XINT (XCDR (topos)), 1844 XINT (to),
1814 XINT (XCAR (topos)), 1845 (NILP (topos)
1815 XINT (width), hscroll, tab_offset, 1846 ? window_internal_height (w)
1847 : XINT (XCDR (topos))),
1848 (NILP (topos)
1849 ? (window_box_text_cols (w)
1850 - (
1851#ifdef HAVE_WINDOW_SYSTEM
1852 FRAME_WINDOW_P (XFRAME (w->frame)) ? 0 :
1853#endif
1854 1))
1855 : XINT (XCAR (topos))),
1856 (NILP (width) ? -1 : XINT (width)),
1857 hscroll, tab_offset,
1816 XWINDOW (window)); 1858 XWINDOW (window));
1817 1859
1818 XSETFASTINT (bufpos, pos->bufpos); 1860 XSETFASTINT (bufpos, pos->bufpos);
@@ -1837,7 +1879,6 @@ vmotion (from, vtarget, w)
1837 register int from, vtarget; 1879 register int from, vtarget;
1838 struct window *w; 1880 struct window *w;
1839{ 1881{
1840 int width = window_box_text_cols (w);
1841 int hscroll = XINT (w->hscroll); 1882 int hscroll = XINT (w->hscroll);
1842 struct position pos; 1883 struct position pos;
1843 /* vpos is cumulative vertical position, changed as from is changed */ 1884 /* vpos is cumulative vertical position, changed as from is changed */
@@ -1858,12 +1899,6 @@ vmotion (from, vtarget, w)
1858 1899
1859 XSETWINDOW (window, w); 1900 XSETWINDOW (window, w);
1860 1901
1861 /* We must make room for continuation marks if we don't have fringes. */
1862#ifdef HAVE_WINDOW_SYSTEM
1863 if (!FRAME_WINDOW_P (XFRAME (w->frame)))
1864#endif
1865 width -= 1;
1866
1867 /* If the window contains this buffer, use it for getting text properties. 1902 /* If the window contains this buffer, use it for getting text properties.
1868 Otherwise use the current buffer as arg for doing that. */ 1903 Otherwise use the current buffer as arg for doing that. */
1869 if (EQ (w->buffer, Fcurrent_buffer ())) 1904 if (EQ (w->buffer, Fcurrent_buffer ()))
@@ -1905,7 +1940,7 @@ vmotion (from, vtarget, w)
1905 1 << (BITS_PER_SHORT - 1), 1940 1 << (BITS_PER_SHORT - 1),
1906 /* ... nor HPOS. */ 1941 /* ... nor HPOS. */
1907 1 << (BITS_PER_SHORT - 1), 1942 1 << (BITS_PER_SHORT - 1),
1908 width, hscroll, 1943 -1, hscroll,
1909 /* This compensates for start_hpos 1944 /* This compensates for start_hpos
1910 so that a tab as first character 1945 so that a tab as first character
1911 still occupies 8 columns. */ 1946 still occupies 8 columns. */
@@ -1964,7 +1999,7 @@ vmotion (from, vtarget, w)
1964 1 << (BITS_PER_SHORT - 1), 1999 1 << (BITS_PER_SHORT - 1),
1965 /* ... nor HPOS. */ 2000 /* ... nor HPOS. */
1966 1 << (BITS_PER_SHORT - 1), 2001 1 << (BITS_PER_SHORT - 1),
1967 width, hscroll, 2002 -1, hscroll,
1968 (XFASTINT (prevline) == BEG ? -start_hpos : 0), 2003 (XFASTINT (prevline) == BEG ? -start_hpos : 0),
1969 w); 2004 w);
1970 did_motion = 1; 2005 did_motion = 1;
@@ -1978,7 +2013,7 @@ vmotion (from, vtarget, w)
1978 } 2013 }
1979 return compute_motion (from, vpos, pos.hpos, did_motion, 2014 return compute_motion (from, vpos, pos.hpos, did_motion,
1980 ZV, vtarget, - (1 << (BITS_PER_SHORT - 1)), 2015 ZV, vtarget, - (1 << (BITS_PER_SHORT - 1)),
1981 width, hscroll, 2016 -1, hscroll,
1982 pos.tab_offset - (from == BEG ? start_hpos : 0), 2017 pos.tab_offset - (from == BEG ? start_hpos : 0),
1983 w); 2018 w);
1984} 2019}
diff --git a/src/keyboard.c b/src/keyboard.c
index a6cc2836315..23e29e3f878 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -11369,8 +11369,8 @@ It's called with one argument, the help string to display. */);
11369 11369
11370After a command is executed, if point is moved into a region that has 11370After a command is executed, if point is moved into a region that has
11371special properties (e.g. composition, display), we adjust point to 11371special properties (e.g. composition, display), we adjust point to
11372the boundary of the region. But, several special commands sets this 11372the boundary of the region. But, when a command sets this variable to
11373variable to non-nil, then we suppress the point adjustment. 11373non-nil, we suppress the point adjustment.
11374 11374
11375This variable is set to nil before reading a command, and is checked 11375This variable is set to nil before reading a command, and is checked
11376just after executing the command. */); 11376just after executing the command. */);
diff --git a/src/keymap.c b/src/keymap.c
index 4c23977ef41..98e04f65717 100644
--- a/src/keymap.c
+++ b/src/keymap.c
@@ -343,7 +343,7 @@ keymap_memberp (map, maps)
343 343
344DEFUN ("set-keymap-parent", Fset_keymap_parent, Sset_keymap_parent, 2, 2, 0, 344DEFUN ("set-keymap-parent", Fset_keymap_parent, Sset_keymap_parent, 2, 2, 0,
345 doc: /* Modify KEYMAP to set its parent map to PARENT. 345 doc: /* Modify KEYMAP to set its parent map to PARENT.
346PARENT should be nil or another keymap. */) 346Return PARENT. PARENT should be nil or another keymap. */)
347 (keymap, parent) 347 (keymap, parent)
348 Lisp_Object keymap, parent; 348 Lisp_Object keymap, parent;
349{ 349{
@@ -1719,7 +1719,8 @@ If a second optional argument MAPVAR is given, the map is stored as
1719its value instead of as COMMAND's value; but COMMAND is still defined 1719its value instead of as COMMAND's value; but COMMAND is still defined
1720as a function. 1720as a function.
1721The third optional argument NAME, if given, supplies a menu name 1721The third optional argument NAME, if given, supplies a menu name
1722string for the map. This is required to use the keymap as a menu. */) 1722string for the map. This is required to use the keymap as a menu.
1723This function returns COMMAND. */)
1723 (command, mapvar, name) 1724 (command, mapvar, name)
1724 Lisp_Object command, mapvar, name; 1725 Lisp_Object command, mapvar, name;
1725{ 1726{
diff --git a/src/process.c b/src/process.c
index 0b3f6bfbbd2..24ec816a699 100644
--- a/src/process.c
+++ b/src/process.c
@@ -4196,7 +4196,7 @@ wait_reading_process_input (time_limit, microsecs, read_kbd, do_display)
4196 present (for reading) at stdin, even when none is. This 4196 present (for reading) at stdin, even when none is. This
4197 causes the call to SELECT below to return 1 and 4197 causes the call to SELECT below to return 1 and
4198 status_notify not to be called. As a result output of 4198 status_notify not to be called. As a result output of
4199 subprocesses are incorrectly discarded. 4199 subprocesses are incorrectly discarded.
4200 */ 4200 */
4201 FD_CLR (0, &Atemp); 4201 FD_CLR (0, &Atemp);
4202#endif 4202#endif
@@ -4763,16 +4763,16 @@ read_process_output (proc, channel)
4763 if (DATAGRAM_CHAN_P (channel)) 4763 if (DATAGRAM_CHAN_P (channel))
4764 { 4764 {
4765 int len = datagram_address[channel].len; 4765 int len = datagram_address[channel].len;
4766 nbytes = recvfrom (channel, chars + carryover, readmax - carryover, 4766 nbytes = recvfrom (channel, chars + carryover, readmax,
4767 0, datagram_address[channel].sa, &len); 4767 0, datagram_address[channel].sa, &len);
4768 } 4768 }
4769 else 4769 else
4770#endif 4770#endif
4771 if (proc_buffered_char[channel] < 0) 4771 if (proc_buffered_char[channel] < 0)
4772 { 4772 {
4773 nbytes = emacs_read (channel, chars + carryover, readmax - carryover); 4773 nbytes = emacs_read (channel, chars + carryover, readmax);
4774#ifdef ADAPTIVE_READ_BUFFERING 4774#ifdef ADAPTIVE_READ_BUFFERING
4775 if (!NILP (p->adaptive_read_buffering)) 4775 if (nbytes > 0 && !NILP (p->adaptive_read_buffering))
4776 { 4776 {
4777 int delay = XINT (p->read_output_delay); 4777 int delay = XINT (p->read_output_delay);
4778 if (nbytes < 256) 4778 if (nbytes < 256)
@@ -4784,7 +4784,7 @@ read_process_output (proc, channel)
4784 delay += READ_OUTPUT_DELAY_INCREMENT * 2; 4784 delay += READ_OUTPUT_DELAY_INCREMENT * 2;
4785 } 4785 }
4786 } 4786 }
4787 else if (delay > 0 && (nbytes == readmax - carryover)) 4787 else if (delay > 0 && (nbytes == readmax))
4788 { 4788 {
4789 delay -= READ_OUTPUT_DELAY_INCREMENT; 4789 delay -= READ_OUTPUT_DELAY_INCREMENT;
4790 if (delay == 0) 4790 if (delay == 0)
@@ -4803,7 +4803,7 @@ read_process_output (proc, channel)
4803 { 4803 {
4804 chars[carryover] = proc_buffered_char[channel]; 4804 chars[carryover] = proc_buffered_char[channel];
4805 proc_buffered_char[channel] = -1; 4805 proc_buffered_char[channel] = -1;
4806 nbytes = emacs_read (channel, chars + carryover + 1, readmax - 1 - carryover); 4806 nbytes = emacs_read (channel, chars + carryover + 1, readmax - 1);
4807 if (nbytes < 0) 4807 if (nbytes < 0)
4808 nbytes = 1; 4808 nbytes = 1;
4809 else 4809 else
diff --git a/src/window.c b/src/window.c
index 9c94a43c3cd..e2c3fe51744 100644
--- a/src/window.c
+++ b/src/window.c
@@ -4707,7 +4707,7 @@ window_scroll_line_based (window, n, whole, noerror)
4707 4707
4708 posit = *compute_motion (startpos, 0, 0, 0, 4708 posit = *compute_motion (startpos, 0, 0, 0,
4709 PT, ht, 0, 4709 PT, ht, 0,
4710 window_box_text_cols (w), XINT (w->hscroll), 4710 -1, XINT (w->hscroll),
4711 0, w); 4711 0, w);
4712 original_vpos = posit.vpos; 4712 original_vpos = posit.vpos;
4713 4713