aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoakim Verona2011-10-15 23:07:46 +0200
committerJoakim Verona2011-10-15 23:07:46 +0200
commit38ea27d5ef38b273942e90a095509883320d5c0b (patch)
tree287f8e5419dd385ee5d2cdd24d694f1b2bb2179f
parente1745b4659af41901c02b6320708c5497d9103f9 (diff)
parent21fedf28e5c59fd17e846f4b8abcbb223ae5ed90 (diff)
downloademacs-38ea27d5ef38b273942e90a095509883320d5c0b.tar.gz
emacs-38ea27d5ef38b273942e90a095509883320d5c0b.zip
upstream
-rw-r--r--admin/FOR-RELEASE12
-rw-r--r--doc/emacs/ChangeLog10
-rw-r--r--doc/emacs/display.texi139
-rw-r--r--doc/emacs/killing.texi6
-rw-r--r--doc/emacs/regs.texi35
-rw-r--r--etc/NEWS2
-rw-r--r--lisp/ChangeLog29
-rw-r--r--lisp/emacs-lisp/ert.el41
-rw-r--r--lisp/mail/sendmail.el39
-rw-r--r--lisp/mouse.el6
-rw-r--r--lisp/mpc.el6
-rw-r--r--lisp/net/network-stream.el19
-rw-r--r--lisp/pcmpl-unix.el2
-rw-r--r--src/ChangeLog41
-rw-r--r--src/window.c81
-rw-r--r--src/xterm.c9
-rw-r--r--test/ChangeLog4
-rw-r--r--test/automated/f90.el158
18 files changed, 433 insertions, 206 deletions
diff --git a/admin/FOR-RELEASE b/admin/FOR-RELEASE
index 4481d8cd93b..26e3de63808 100644
--- a/admin/FOR-RELEASE
+++ b/admin/FOR-RELEASE
@@ -152,7 +152,7 @@ abbrevs.texi
152ack.texi 152ack.texi
153anti.texi 153anti.texi
154arevert-xtra.texi 154arevert-xtra.texi
155basic.texi 155basic.texi cyd
156buffers.texi 156buffers.texi
157building.texi 157building.texi
158calendar.texi 158calendar.texi
@@ -172,23 +172,23 @@ fixit.texi
172fortran-xtra.texi 172fortran-xtra.texi
173frames.texi 173frames.texi
174glossary.texi 174glossary.texi
175help.texi 175help.texi cyd
176indent.texi 176indent.texi
177killing.texi 177killing.texi cyd
178kmacro.texi 178kmacro.texi
179macos.texi 179macos.texi
180maintaining.texi 180maintaining.texi
181major.texi 181major.texi
182mark.texi 182mark.texi cyd
183mini.texi 183mini.texi
184misc.texi 184misc.texi
185msdog.texi 185msdog.texi
186msdog-xtra.texi 186msdog-xtra.texi
187mule.texi 187mule.texi
188m-x.texi 188m-x.texi cyd
189picture-xtra.texi 189picture-xtra.texi
190programs.texi 190programs.texi
191regs.texi 191regs.texi cyd
192rmail.texi 192rmail.texi
193screen.texi cyd 193screen.texi cyd
194search.texi 194search.texi
diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog
index 3fa8eece141..a39b703b4dd 100644
--- a/doc/emacs/ChangeLog
+++ b/doc/emacs/ChangeLog
@@ -1,3 +1,13 @@
12011-10-15 Chong Yidong <cyd@stupidchicken.com>
2
3 * display.texi (Scrolling): Tweak explanation of scroll direction.
4 (View Mode): Add index entries.
5
6 * killing.texi (Deletion): Document negative prefix arg to M-SPC.
7
8 * regs.texi (Text Registers): C-x r i does not activate the mark.
9 (Bookmarks): Document new default bookmark location.
10
12011-10-13 Chong Yidong <cyd@stupidchicken.com> 112011-10-13 Chong Yidong <cyd@stupidchicken.com>
2 12
3 * killing.texi (Deletion): Add xref to Using Region. Document 13 * killing.texi (Deletion): Add xref to Using Region. Document
diff --git a/doc/emacs/display.texi b/doc/emacs/display.texi
index 2df31c88c1e..d2f49c62e4a 100644
--- a/doc/emacs/display.texi
+++ b/doc/emacs/display.texi
@@ -6,10 +6,10 @@
6@node Display, Search, Registers, Top 6@node Display, Search, Registers, Top
7@chapter Controlling the Display 7@chapter Controlling the Display
8 8
9 Since only part of a large buffer fits in the window, Emacs tries to 9 Since only part of a large buffer fits in the window, Emacs has to
10show a part that is likely to be interesting. Display-control 10show only a part of it. This chapter describes commands and variables
11commands and variables allow you to specify which part of the text you 11that let you specify which part of the text you want to see, and how
12want to see, and how to display it. 12the text is displayed.
13 13
14@menu 14@menu
15* Scrolling:: Commands to move text up and down in a window. 15* Scrolling:: Commands to move text up and down in a window.
@@ -49,7 +49,14 @@ portion of the buffer is displayed.
49displayed in the window; equivalently, it moves the buffer text 49displayed in the window; equivalently, it moves the buffer text
50upwards relative to the window. Scrolling ``backward'' or ``down'' 50upwards relative to the window. Scrolling ``backward'' or ``down''
51moves the displayed portion backwards, and moves the text downwards 51moves the displayed portion backwards, and moves the text downwards
52relative to the window. 52relative to the window. In Emacs, scrolling ``up'' or ``down'' refers
53to the direction that the text moves in the window, @emph{not} the
54direction that the window moves relative to the text; this terminology
55was taken up by Emacs before the modern meaning of ``scrolling up''
56and ``scrolling down'' became widely adopted. Hence the strange
57result that @key{PageDown} scrolls ``up'' in the Emacs sense. In this
58manual, we refer to scrolling ``foward'' and ``backward'' where
59possible, in order to minimize confusion.
53 60
54 The portion of a buffer displayed in a window always contains point. 61 The portion of a buffer displayed in a window always contains point.
55If you move point past the bottom or top of the window, scrolling 62If you move point past the bottom or top of the window, scrolling
@@ -60,7 +67,7 @@ Scrolling}). You can also scroll explicitly with these commands:
60@item C-l 67@item C-l
61Scroll the selected window so that the current line is the center-most 68Scroll the selected window so that the current line is the center-most
62text line; on subsequent consecutive invocations, make the current 69text line; on subsequent consecutive invocations, make the current
63line the top-most line, the bottom-most line, and so forth in cyclic 70line the top-most line, the bottom-most line, and so on in cyclic
64order; also, maybe redisplay the screen (@code{recenter-top-bottom}). 71order; also, maybe redisplay the screen (@code{recenter-top-bottom}).
65@item C-v 72@item C-v
66@itemx @key{next} 73@itemx @key{next}
@@ -85,29 +92,29 @@ possible.
85 Typing @kbd{C-l} twice in a row (@kbd{C-l C-l}) scrolls the window 92 Typing @kbd{C-l} twice in a row (@kbd{C-l C-l}) scrolls the window
86so that point is on the topmost screen line. Typing a third @kbd{C-l} 93so that point is on the topmost screen line. Typing a third @kbd{C-l}
87scrolls the window so that point is on the bottom-most screen line. 94scrolls the window so that point is on the bottom-most screen line.
88Each successive @kbd{C-l} cycles through these three screen positions. 95Each successive @kbd{C-l} cycles through these three positions.
89 96
90@vindex recenter-positions 97@vindex recenter-positions
91 You can change the cycling order by customizing the list variable 98 You can change the cycling order by customizing the list variable
92@code{recenter-positions}. Each list element should be the symbol 99@code{recenter-positions}. Each list element should be the symbol
93@code{top}, @code{middle}, or @code{bottom}, or a number; an integer 100@code{top}, @code{middle}, or @code{bottom}, or a number; an integer
94number means to move the line to the specified screen line, while a 101means to move the line to the specified screen line, while a
95floating-point number between 0.0 and 1.0 specifies a percentage of 102floating-point number between 0.0 and 1.0 specifies a percentage of
96the screen space from the top. The default, @code{(middle top 103the screen space from the top of the window. The default,
97bottom)}, is the cycling order described above. Furthermore, if you 104@code{(middle top bottom)}, is the cycling order described above.
98change the variable @code{scroll-margin} to a non-zero value @var{n}, 105Furthermore, if you change the variable @code{scroll-margin} to a
99@kbd{C-l} leaves @var{n} screen lines between point and the top or 106non-zero value @var{n}, @kbd{C-l} always leaves at least @var{n}
100bottom of the window (@pxref{Auto Scrolling}). 107screen lines between point and the top or bottom of the window
108(@pxref{Auto Scrolling}).
101 109
102 You can also supply @kbd{C-l} with a prefix argument. With a plain 110 You can also supply @kbd{C-l} with a prefix argument. With a plain
103prefix argument, @kbd{C-u C-l}, Emacs simply recenters point. With a 111prefix argument, @kbd{C-u C-l}, Emacs simply recenters point. With a
104positive argument @var{n}, it scrolls to place point @var{n} lines 112positive argument @var{n}, it scrolls to place point @var{n} lines
105down from the top of the window. An argument of zero puts point on 113down from the top of the window. An argument of zero puts point on
106the topmost line. A negative argument @var{-n} puts point @var{n} 114the topmost line. A negative argument @var{-n} puts point @var{n}
107lines from the bottom of the window. For example, @kbd{C-u - 1 C-l} 115lines from the bottom of the window. When given an argument,
108puts point on the bottom line, and @kbd{C-u - 5 C-l} puts it five 116@kbd{C-l} does not clear the screen or cycle through different screen
109lines from the bottom. When given an argument, @kbd{C-l} does not 117positions.
110clear the screen or cycle through different screen positions.
111 118
112@vindex recenter-redisplay 119@vindex recenter-redisplay
113 If the variable @code{recenter-redisplay} has a non-@code{nil} 120 If the variable @code{recenter-redisplay} has a non-@code{nil}
@@ -117,7 +124,7 @@ text-terminal frames only. Redisplaying is useful in case the screen
117becomes garbled for any reason (@pxref{Screen Garbled}). 124becomes garbled for any reason (@pxref{Screen Garbled}).
118 125
119@findex recenter 126@findex recenter
120 The more primitive command @code{recenter} behaves like 127 The more primitive command @kbd{M-x recenter} behaves like
121@code{recenter-top-bottom}, but does not cycle among screen positions. 128@code{recenter-top-bottom}, but does not cycle among screen positions.
122 129
123@kindex C-v 130@kindex C-v
@@ -128,53 +135,46 @@ becomes garbled for any reason (@pxref{Screen Garbled}).
128@kindex PageUp 135@kindex PageUp
129@findex scroll-up-command 136@findex scroll-up-command
130@findex scroll-down-command 137@findex scroll-down-command
131 The @kbd{C-v} (@code{scroll-up-command}) command scrolls forward by 138 @kbd{C-v} (@code{scroll-up-command}) scrolls forward by nearly the
132nearly the whole window height. The effect is to take the two lines 139whole window height. The effect is to take the two lines at the
133at the bottom of the window and put them at the top, followed by lines 140bottom of the window and put them at the top, followed by lines that
134that were not previously visible. If point was in the text that 141were not previously visible. If point was in the text that scrolled
135scrolled off the top, it ends up at the new top of the window. 142off the top, it ends up on the window's new topmost line.
136 143
137 Similarly, @kbd{M-v} (@code{scroll-down-command}) scrolls backward. 144 Similarly, @kbd{M-v} (@code{scroll-down-command}) scrolls backward.
138 145
146 We refer to @kbd{C-v} and @kbd{M-v} as @dfn{full-screen scroll
147commands}. The function key @key{next}, or @key{PageDown}, is
148equivalent to @kbd{C-v}; the function key @key{prior}, or
149@key{PageUp}, is equivalent to @kbd{M-v}.
150
139@vindex next-screen-context-lines 151@vindex next-screen-context-lines
140 The variable @code{next-screen-context-lines} controls the number of 152 The variable @code{next-screen-context-lines} controls the number of
141lines of overlap left by @kbd{C-v} or @kbd{M-v}; by default, it is 2. 153lines of overlap left by the full-screen scroll commands; by default,
142The function keys @key{next} and @key{prior}, or @key{PageDown} and 154it is 2. You can supply these commands with a numeric prefix argument
143@key{PageUp}, are equivalent to @kbd{C-v} and @kbd{M-v} respectively.
144
145 You can supply @kbd{C-v} or @kbd{M-v} with a numeric prefix argument
146@var{n}. This scrolls the window by @var{n} lines, while attempting 155@var{n}. This scrolls the window by @var{n} lines, while attempting
147to leave point unchanged (so that the text and point move up or down 156to leave point unchanged (so that the text and point move up or down
148together). @kbd{C-v} with a negative argument is like @kbd{M-v} and 157together). @kbd{C-v} with a negative argument is like @kbd{M-v} and
149vice versa. 158vice versa.
150 159
151 The names of scroll commands are based on the direction that the 160@vindex scroll-error-top-bottom
152text moves in the window. For instance, @code{scroll-up-command} 161 By default, the full-screen scroll commands signal an error (by
153moves the text upward on the screen. The keys @key{PageUp} and 162beeping or flashing the screen) if no more scrolling is possible,
154@key{PageDown} derive their names and customary meanings from a 163because the window has reached the beginning or end of the buffer. If
155different convention that developed elsewhere; hence the strange 164you change the variable @code{scroll-error-top-bottom} to @code{t},
156result that @key{PageDown} runs @code{scroll-up-command}. 165Emacs instead moves point to the farthest possible position. If point
166is already there, the command signals an error.
157 167
158@vindex scroll-preserve-screen-position 168@vindex scroll-preserve-screen-position
159 Some users like the full-screen scroll commands to keep point at the 169 Some users like scroll commands to keep point at the same screen
160same screen position. This behavior is convenient because scrolling 170position. Then, scrolling back to the same screen also conveniently
161back to the same screen also returns point to its original position. 171returns point to its original position. You can enable this via the
162You can enable this via the variable 172variable @code{scroll-preserve-screen-position}. If the value is
163@code{scroll-preserve-screen-position}. If the value is @code{t}, 173@code{t}, Emacs adjusts point to keep it at the same vertical position
164Emacs adjusts point to keep it at the same vertical position within 174within the window, rather than the window edge, whenever a scroll
165the window, rather than the window edge, whenever a scroll command 175command moves it off the window. With any other non-@code{nil} value,
166moves it off the window. With any other non-@code{nil} value, Emacs 176Emacs adjusts point this way even if the scroll command leaves point
167adjusts point this way even if the scroll command leaves point in the 177in the window.
168window.
169
170@vindex scroll-error-top-bottom
171 By default, @code{scroll-up-command} and @code{scroll-down-command}
172signal an error (by beeping or flashing the screen) if no more
173scrolling is possible, because the window has reached the beginning or
174end of the buffer. If you change the variable
175@code{scroll-error-top-bottom} to @code{t}, Emacs instead moves point
176to the farthest possible position. If point is already there, the
177command signals an error.
178 178
179@vindex scroll-up 179@vindex scroll-up
180@vindex scroll-down 180@vindex scroll-down
@@ -185,9 +185,9 @@ Emacs 24, these were the default commands for scrolling up and down.
185 185
186@kindex C-M-l 186@kindex C-M-l
187@findex reposition-window 187@findex reposition-window
188 The @kbd{C-M-l} command (@code{reposition-window}) scrolls the current 188 @kbd{C-M-l} (@code{reposition-window}) scrolls the current window
189window heuristically in a way designed to get useful information onto 189heuristically in a way designed to get useful information onto the
190the screen. For example, in a Lisp file, this command tries to get the 190screen. For example, in a Lisp file, this command tries to get the
191entire current defun onto the screen if possible. 191entire current defun onto the screen if possible.
192 192
193@node Auto Scrolling 193@node Auto Scrolling
@@ -225,16 +225,15 @@ how aggressively it scrolls by setting the variables
225The value of @code{scroll-up-aggressively} should be either 225The value of @code{scroll-up-aggressively} should be either
226@code{nil}, or a fraction @var{f} between 0 and 1. A fraction 226@code{nil}, or a fraction @var{f} between 0 and 1. A fraction
227specifies where on the screen to put point when scrolling upward, 227specifies where on the screen to put point when scrolling upward,
228i.e.@: when point moves forward in the buffer, and therefore text 228i.e. forward. When point goes off the window end, the new start
229scrolls up in the window. When point goes off the window end, the new 229position is chosen to put point @var{f} parts of the window height
230start position is chosen to put point @var{f} parts of the window 230from the bottom. Thus, larger @var{f} means more aggressive
231height from the bottom. Thus, larger @var{f} means more aggressive
232scrolling: more new text is brought into view. The default value, 231scrolling: more new text is brought into view. The default value,
233@code{nil}, is equivalent to 0.5. 232@code{nil}, is equivalent to 0.5.
234 233
235 Likewise, @code{scroll-down-aggressively} is used for scrolling 234 Likewise, @code{scroll-down-aggressively} is used for scrolling
236down, i.e.@: moving point back in the buffer. The value specifies how 235down, i.e. backward. The value specifies how far point should be
237far point should be placed from the top of the window; thus, as with 236placed from the top of the window; thus, as with
238@code{scroll-up-aggressively}, a larger value is more aggressive. 237@code{scroll-up-aggressively}, a larger value is more aggressive.
239 238
240 These two variables are ignored if either @code{scroll-step} or 239 These two variables are ignored if either @code{scroll-step} or
@@ -261,7 +260,7 @@ scrolling whenever point moves off the left or right edge of the
261screen. To disable automatic horizontal scrolling, set the variable 260screen. To disable automatic horizontal scrolling, set the variable
262@code{auto-hscroll-mode} to @code{nil}. Note that when the automatic 261@code{auto-hscroll-mode} to @code{nil}. Note that when the automatic
263horizontal scrolling is turned off, if point moves off the edge of the 262horizontal scrolling is turned off, if point moves off the edge of the
264screen, the cursor disappears to indicate that. (On text-mode 263screen, the cursor disappears to indicate that. (On text-only
265terminals, the cursor is left at the edge instead.) 264terminals, the cursor is left at the edge instead.)
266 265
267@vindex hscroll-margin 266@vindex hscroll-margin
@@ -389,6 +388,9 @@ it. @xref{Disabling}.
389@cindex View mode 388@cindex View mode
390@cindex mode, View 389@cindex mode, View
391 390
391@kindex s @r{(View mode)}
392@kindex SPC @r{(View mode)}
393@kindex DEL @r{(View mode)}
392 View mode is a minor mode that lets you scan a buffer by sequential 394 View mode is a minor mode that lets you scan a buffer by sequential
393screenfuls. It provides commands for scrolling through the buffer 395screenfuls. It provides commands for scrolling through the buffer
394conveniently but not for changing it. Apart from the usual Emacs 396conveniently but not for changing it. Apart from the usual Emacs
@@ -396,9 +398,14 @@ cursor motion commands, you can type @key{SPC} to scroll forward one
396windowful, @key{DEL} to scroll backward, and @kbd{s} to start an 398windowful, @key{DEL} to scroll backward, and @kbd{s} to start an
397incremental search. 399incremental search.
398 400
399 Typing @kbd{q} disables View mode, and switches back to the buffer 401@kindex q @r{(View mode)}
400and position before View mode was enabled. Alternatively, typing 402@kindex e @r{(View mode)}
401@kbd{e} disables View mode, keeping the current buffer and position. 403@findex View-quit
404@findex View-exit
405 Typing @kbd{q} (@code{View-quit}) disables View mode, and switches
406back to the buffer and position before View mode was enabled. Typing
407@kbd{e} (@code{View-exit}) disables View mode, keeping the current
408buffer and position.
402 409
403@findex view-buffer 410@findex view-buffer
404@findex view-file 411@findex view-file
diff --git a/doc/emacs/killing.texi b/doc/emacs/killing.texi
index 493316daa52..8689e9c8324 100644
--- a/doc/emacs/killing.texi
+++ b/doc/emacs/killing.texi
@@ -118,10 +118,12 @@ characters: spaces, tabs and newlines. @kbd{M-\}
118(@code{delete-horizontal-space}) deletes all the spaces and tab 118(@code{delete-horizontal-space}) deletes all the spaces and tab
119characters before and after point. With a prefix argument, this only 119characters before and after point. With a prefix argument, this only
120deletes spaces and tab characters before point. @kbd{M-@key{SPC}} 120deletes spaces and tab characters before point. @kbd{M-@key{SPC}}
121(@code{just-one-space}) does likewise but leaves a single space after 121(@code{just-one-space}) does likewise but leaves a single space before
122point, regardless of the number of spaces that existed previously 122point, regardless of the number of spaces that existed previously
123(even if there were none before). With a numeric argument @var{n}, it 123(even if there were none before). With a numeric argument @var{n}, it
124leaves @var{n} spaces after point. 124leaves @var{n} spaces before point if @var{n} is positive; if @var{n}
125is negative, it deletes newlines in addition to spaces and tabs,
126leaving a single space before point.
125 127
126 @kbd{C-x C-o} (@code{delete-blank-lines}) deletes all blank lines 128 @kbd{C-x C-o} (@code{delete-blank-lines}) deletes all blank lines
127after the current line. If the current line is blank, it deletes all 129after the current line. If the current line is blank, it deletes all
diff --git a/doc/emacs/regs.texi b/doc/emacs/regs.texi
index b4b9fd252e1..41a807375a9 100644
--- a/doc/emacs/regs.texi
+++ b/doc/emacs/regs.texi
@@ -30,9 +30,9 @@ Display a description of what register @var{r} contains.
30@end table 30@end table
31 31
32 @dfn{Bookmarks} record files and positions in them, so you can 32 @dfn{Bookmarks} record files and positions in them, so you can
33return to those positions when you look at the file again. 33return to those positions when you look at the file again. Bookmarks
34Bookmarks are similar enough in spirit to registers that they 34are similar in spirit to registers, so they are also documented in
35seem to belong in this chapter. 35this chapter.
36 36
37@menu 37@menu
38* Position Registers:: Saving positions in registers. 38* Position Registers:: Saving positions in registers.
@@ -119,9 +119,9 @@ the region text to the text in the register instead of
119@kindex C-x r i 119@kindex C-x r i
120@findex insert-register 120@findex insert-register
121 @kbd{C-x r i @var{r}} inserts in the buffer the text from register 121 @kbd{C-x r i @var{r}} inserts in the buffer the text from register
122@var{r}. Normally it leaves point before the text and places the mark 122@var{r}. Normally it leaves point before the text and sets the mark
123after, but with a numeric argument (@kbd{C-u}) it puts point after the 123after, without activating it. With a numeric argument, it instead
124text and the mark before. 124puts point after the text and the mark before.
125 125
126@node Rectangle Registers 126@node Rectangle Registers
127@section Saving Rectangles in Registers 127@section Saving Rectangles in Registers
@@ -143,12 +143,9 @@ Insert the rectangle stored in register @var{r} (if it contains a
143rectangle) (@code{insert-register}). 143rectangle) (@code{insert-register}).
144@end table 144@end table
145 145
146 The @kbd{C-x r i @var{r}} command inserts a text string if the 146 The @kbd{C-x r i @var{r}} (@code{insert-register}) command,
147register contains one, and inserts a rectangle if the register contains 147previously documented in @ref{Text Registers}, inserts a rectangle
148one. 148rather than a a text string, if the register contains a rectangle.
149
150 See also the command @code{sort-columns}, which you can think of
151as sorting a rectangle. @xref{Sorting}.
152 149
153@node Configuration Registers 150@node Configuration Registers
154@section Saving Window Configurations in Registers 151@section Saving Window Configurations in Registers
@@ -281,12 +278,14 @@ you can use it to edit your bookmark definitions or annotate the
281bookmarks. Type @kbd{C-h m} in the bookmark buffer for more 278bookmarks. Type @kbd{C-h m} in the bookmark buffer for more
282information about its special editing commands. 279information about its special editing commands.
283 280
284 When you kill Emacs, Emacs offers to save your bookmark values in your 281 When you kill Emacs, Emacs offers to save your bookmark values, if
285default bookmark file, @file{~/.emacs.bmk}, if you have changed any 282you have changed any bookmark values. You can also save the bookmarks
286bookmark values. You can also save the bookmarks at any time with the 283at any time with the @kbd{M-x bookmark-save} command. Bookmarks are
287@kbd{M-x bookmark-save} command. The bookmark commands load your 284saved to the file @file{~/.emacs.d/bookmarks} (for compatibility with
288default bookmark file automatically. This saving and loading is how 285older versions of Emacs, if you have a file named @file{~/.emacs.bmk},
289bookmarks persist from one Emacs session to the next. 286that is used instead). The bookmark commands load your default
287bookmark file automatically. This saving and loading is how bookmarks
288persist from one Emacs session to the next.
290 289
291@vindex bookmark-save-flag 290@vindex bookmark-save-flag
292 If you set the variable @code{bookmark-save-flag} to 1, each command 291 If you set the variable @code{bookmark-save-flag} to 1, each command
diff --git a/etc/NEWS b/etc/NEWS
index 386462fe92e..d8d0741f928 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -251,6 +251,7 @@ highlight strings that indicate failure, caution or successful operation.
251with Xft. To change font, use the X resource font, for example: 251with Xft. To change font, use the X resource font, for example:
252Emacs.pane.menubar.font: Courier-12 252Emacs.pane.menubar.font: Courier-12
253 253
254+++
254** On graphical displays, the mode-line no longer ends in dashes. 255** On graphical displays, the mode-line no longer ends in dashes.
255Also, the first dash (which does not indicate anything) is just 256Also, the first dash (which does not indicate anything) is just
256displayed as a space. 257displayed as a space.
@@ -455,6 +456,7 @@ bound to M-=, which shows the number of lines, words, and characters.
455 456
456** The default value of `backup-by-copying-when-mismatch' is now t. 457** The default value of `backup-by-copying-when-mismatch' is now t.
457 458
459+++
458** The command `just-one-space' (M-SPC), if given a negative argument, 460** The command `just-one-space' (M-SPC), if given a negative argument,
459also deletes newlines around point. 461also deletes newlines around point.
460 462
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 68a85a43387..abae693d0c8 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,32 @@
12011-10-15 Glenn Morris <rgm@gnu.org>
2
3 * emacs-lisp/ert.el (ert--explain-equal-rec, ert-select-tests):
4 Doc fixes.
5
62011-10-15 Chong Yidong <cyd@stupidchicken.com>
7
8 * net/network-stream.el (network-stream-open-starttls): Improve
9 detection of failure due to lack of TLS support.
10
11 * mail/sendmail.el (sendmail-query-once): Tweak prompt message,
12 putting the input text in front and in bold.
13
142011-10-14 Stefan Monnier <monnier@iro.umontreal.ca>
15
16 * pcmpl-unix.el (pcomplete/ssh): SSH does allow ganging.
17
18 * mpc.el (mpc-songs-jump-to): Don't burp if the user clicks in an
19 empty buffer.
20
21 * mouse.el (mouse-drag-mode-line-1): Modify the end-event we pushed on
22 unread-command-events rather than pushing yet-another event.
23
242011-10-14 Eli Zaretskii <eliz@gnu.org>
25
26 * mail/sendmail.el (sendmail-query-once): Improve the wording of
27 the explanation of the possible choices. Make the options passed
28 to completing-read shorter.
29
12011-10-13 Agustín Martín Domingo <agustin.martin@hispalinux.es> 302011-10-13 Agustín Martín Domingo <agustin.martin@hispalinux.es>
2 31
3 * textmodes/flyspell.el (flyspell-large-region): Make sure 32 * textmodes/flyspell.el (flyspell-large-region): Make sure
diff --git a/lisp/emacs-lisp/ert.el b/lisp/emacs-lisp/ert.el
index b2e20843856..2afe42dc070 100644
--- a/lisp/emacs-lisp/ert.el
+++ b/lisp/emacs-lisp/ert.el
@@ -577,8 +577,7 @@ failed."
577 (t x))) 577 (t x)))
578 578
579(defun ert--explain-equal-rec (a b) 579(defun ert--explain-equal-rec (a b)
580 "Returns a programmer-readable explanation of why A and B are not `equal'. 580 "Return a programmer-readable explanation of why A and B are not `equal'.
581
582Returns nil if they are." 581Returns nil if they are."
583 (if (not (equal (type-of a) (type-of b))) 582 (if (not (equal (type-of a) (type-of b)))
584 `(different-types ,a ,b) 583 `(different-types ,a ,b)
@@ -1020,36 +1019,36 @@ t -- Always matches.
1020 (ert-test-result-type-p result (ert-test-expected-result-type test))) 1019 (ert-test-result-type-p result (ert-test-expected-result-type test)))
1021 1020
1022(defun ert-select-tests (selector universe) 1021(defun ert-select-tests (selector universe)
1023 "Return the tests that match SELECTOR. 1022 "Return a list of tests that match SELECTOR.
1024
1025UNIVERSE specifies the set of tests to select from; it should be
1026a list of tests, or t, which refers to all tests named by symbols
1027in `obarray'.
1028 1023
1029Returns the set of tests as a list. 1024UNIVERSE specifies the set of tests to select from; it should be a list
1025of tests, or t, which refers to all tests named by symbols in `obarray'.
1030 1026
1031Valid selectors: 1027Valid SELECTORs:
1032 1028
1033nil -- Selects the empty set. 1029nil -- Selects the empty set.
1034t -- Selects UNIVERSE. 1030t -- Selects UNIVERSE.
1035:new -- Selects all tests that have not been run yet. 1031:new -- Selects all tests that have not been run yet.
1036:failed, :passed -- Select tests according to their most recent result. 1032:failed, :passed -- Select tests according to their most recent result.
1037:expected, :unexpected -- Select tests according to their most recent result. 1033:expected, :unexpected -- Select tests according to their most recent result.
1038a string -- Selects all tests that have a name that matches the string, 1034a string -- A regular expression selecting all tests with matching names.
1039 a regexp. 1035a test -- (i.e., an object of the ert-test data-type) Selects that test.
1040a test -- Selects that test.
1041a symbol -- Selects the test that the symbol names, errors if none. 1036a symbol -- Selects the test that the symbol names, errors if none.
1042\(member TESTS...\) -- Selects TESTS, a list of tests or symbols naming tests. 1037\(member TESTS...) -- Selects the elements of TESTS, a list of tests
1038 or symbols naming tests.
1043\(eql TEST\) -- Selects TEST, a test or a symbol naming a test. 1039\(eql TEST\) -- Selects TEST, a test or a symbol naming a test.
1044\(and SELECTORS...\) -- Selects the tests that match all SELECTORS. 1040\(and SELECTORS...) -- Selects the tests that match all SELECTORS.
1045\(or SELECTORS...\) -- Selects the tests that match any SELECTOR. 1041\(or SELECTORS...) -- Selects the tests that match any of the SELECTORS.
1046\(not SELECTOR\) -- Selects all tests that do not match SELECTOR. 1042\(not SELECTOR) -- Selects all tests that do not match SELECTOR.
1047\(tag TAG) -- Selects all tests that have TAG on their tags list. 1043\(tag TAG) -- Selects all tests that have TAG on their tags list.
1048\(satisfies PREDICATE\) -- Selects all tests that satisfy PREDICATE. 1044 A tag is an arbitrary label you can apply when you define a test.
1045\(satisfies PREDICATE) -- Selects all tests that satisfy PREDICATE.
1046 PREDICATE is a function that takes an ert-test object as argument,
1047 and returns non-nil if it is selected.
1049 1048
1050Only selectors that require a superset of tests, such 1049Only selectors that require a superset of tests, such
1051as (satisfies ...), strings, :new, etc. make use of UNIVERSE. 1050as (satisfies ...), strings, :new, etc. make use of UNIVERSE.
1052Selectors that do not, such as \(member ...\), just return the 1051Selectors that do not, such as (member ...), just return the
1053set implied by them without checking whether it is really 1052set implied by them without checking whether it is really
1054contained in UNIVERSE." 1053contained in UNIVERSE."
1055 ;; This code needs to match the etypecase in 1054 ;; This code needs to match the etypecase in
diff --git a/lisp/mail/sendmail.el b/lisp/mail/sendmail.el
index 4557bf0fb3f..6044392d4e0 100644
--- a/lisp/mail/sendmail.el
+++ b/lisp/mail/sendmail.el
@@ -513,21 +513,40 @@ This also saves the value of `send-mail-function' via Customize."
513 ;; a second time, probably because someone's using an old value 513 ;; a second time, probably because someone's using an old value
514 ;; of send-mail-function. 514 ;; of send-mail-function.
515 (when (eq send-mail-function 'sendmail-query-once) 515 (when (eq send-mail-function 'sendmail-query-once)
516 (let* ((options `(("My favorite mail client" . mailclient-send-it) 516 (let* ((options `(("mail client" . mailclient-send-it)
517 ("Configuring Emacs's SMTP variables" . smtpmail-send-it)
518 ,@(when (and sendmail-program 517 ,@(when (and sendmail-program
519 (executable-find sendmail-program)) 518 (executable-find sendmail-program))
520 '(("The system's mail transport agent" 519 '(("transport" . sendmail-send-it)))
521 . sendmail-send-it))))) 520 ("smtp" . smtpmail-send-it)))
522 (choice 521 (choice
523 ;; Query the user. 522 ;; Query the user.
524 (with-temp-buffer 523 (with-temp-buffer
525 (rename-buffer "*Mail Help*" t) 524 (rename-buffer "*Emacs Mail Setup Help*" t)
526 (insert "Emacs has not been set up for sending mail.\n 525 (insert "\
527It can be told to send mail either via your favorite mail client, 526 Emacs is about to send an email message, but it has not been
528or via the system's mail transport agent (\"sendmail\"), if any, 527 configured for sending email. To tell Emacs how to send email:
529or it can send email on its own by configuring the SMTP parameters.\n 528
530To change your decision later, customize `send-mail-function'.\n") 529 - Type `"
530 (propertize "mail client" 'face 'bold)
531 "' to start your default email client and
532 pass it the message text.\n\n")
533 (and sendmail-program
534 (executable-find sendmail-program)
535 (insert "\
536 - Type `"
537 (propertize "transport" 'face 'bold)
538 "' to invoke the system's mail transport agent
539 (the `"
540 sendmail-program
541 "' program).\n\n"))
542 (insert "\
543 - Type `"
544 (propertize "smtp" 'face 'bold)
545 "' to send mail directly to an \"outgoing mail\" server.
546 (Emacs may prompt you for SMTP settings).
547
548 Emacs will record your selection and will use it thereafter.
549 To change it later, customize the option `send-mail-function'.\n")
531 (goto-char (point-min)) 550 (goto-char (point-min))
532 (display-buffer (current-buffer)) 551 (display-buffer (current-buffer))
533 (let ((completion-ignore-case t)) 552 (let ((completion-ignore-case t))
diff --git a/lisp/mouse.el b/lisp/mouse.el
index 8a74782250d..ff175288445 100644
--- a/lisp/mouse.el
+++ b/lisp/mouse.el
@@ -540,11 +540,13 @@ MODE-LINE-P non-nil means dragging a mode line; nil means a header line."
540 ;; be `mouse-1', whereas if this did move the mouse, it should be 540 ;; be `mouse-1', whereas if this did move the mouse, it should be
541 ;; a `drag-mouse-1'. In any case `on-link' would have been nulled 541 ;; a `drag-mouse-1'. In any case `on-link' would have been nulled
542 ;; above if there had been any significant mouse movement. 542 ;; above if there had been any significant mouse movement.
543 (when (and on-link (eq 'mouse-1 (car-safe event))) 543 (when (and on-link
544 (eq 'mouse-1 (car-safe (car unread-command-events))))
544 ;; If mouse-2 has never been done by the user, it doesn't 545 ;; If mouse-2 has never been done by the user, it doesn't
545 ;; have the necessary property to be interpreted correctly. 546 ;; have the necessary property to be interpreted correctly.
546 (put 'mouse-2 'event-kind 'mouse-click) 547 (put 'mouse-2 'event-kind 'mouse-click)
547 (push (cons 'mouse-2 (cdr event)) unread-command-events)))))) 548 (setcar unread-command-events
549 (cons 'mouse-2 (cdar unread-command-events))))))))
548 550
549(defun mouse-drag-mode-line (start-event) 551(defun mouse-drag-mode-line (start-event)
550 "Change the height of a window by dragging on the mode line." 552 "Change the height of a window by dragging on the mode line."
diff --git a/lisp/mpc.el b/lisp/mpc.el
index 251e1864927..40ccb456400 100644
--- a/lisp/mpc.el
+++ b/lisp/mpc.el
@@ -1996,12 +1996,14 @@ This is used so that they can be compared with `eq', which is needed for
1996 (list (get-text-property (point) 'mpc-file) 1996 (list (get-text-property (point) 'mpc-file)
1997 posn)))) 1997 posn))))
1998 (let* ((plbuf (mpc-proc-cmd "playlist")) 1998 (let* ((plbuf (mpc-proc-cmd "playlist"))
1999 (re (concat "^\\([0-9]+\\):" (regexp-quote song-file) "$")) 1999 (re (if song-file
2000 (concat "^\\([0-9]+\\):" (regexp-quote song-file) "$")))
2000 (sn (with-current-buffer plbuf 2001 (sn (with-current-buffer plbuf
2001 (goto-char (point-min)) 2002 (goto-char (point-min))
2002 (when (re-search-forward re nil t) 2003 (when (and re (re-search-forward re nil t))
2003 (match-string 1))))) 2004 (match-string 1)))))
2004 (cond 2005 (cond
2006 ((null re) (posn-set-point posn))
2005 ((null sn) (error "This song is not in the playlist")) 2007 ((null sn) (error "This song is not in the playlist"))
2006 ((null (with-current-buffer plbuf (re-search-forward re nil t))) 2008 ((null (with-current-buffer plbuf (re-search-forward re nil t)))
2007 ;; song-file only appears once in the playlist: no ambiguity, 2009 ;; song-file only appears once in the playlist: no ambiguity,
diff --git a/lisp/net/network-stream.el b/lisp/net/network-stream.el
index 0c3d0285f91..e27b4541ab5 100644
--- a/lisp/net/network-stream.el
+++ b/lisp/net/network-stream.el
@@ -218,7 +218,7 @@ functionality.
218 (resulting-type 'plain) 218 (resulting-type 'plain)
219 (builtin-starttls (and (fboundp 'gnutls-available-p) 219 (builtin-starttls (and (fboundp 'gnutls-available-p)
220 (gnutls-available-p))) 220 (gnutls-available-p)))
221 starttls-command error) 221 starttls-available starttls-command error)
222 222
223 ;; First check whether the server supports STARTTLS at all. 223 ;; First check whether the server supports STARTTLS at all.
224 (when (and capabilities success-string starttls-function) 224 (when (and capabilities success-string starttls-function)
@@ -227,10 +227,11 @@ functionality.
227 ;; If we have built-in STARTTLS support, try to upgrade the 227 ;; If we have built-in STARTTLS support, try to upgrade the
228 ;; connection. 228 ;; connection.
229 (when (and starttls-command 229 (when (and starttls-command
230 (or builtin-starttls 230 (setq starttls-available
231 (and (or require-tls 231 (or builtin-starttls
232 (plist-get parameters :use-starttls-if-possible)) 232 (and (or require-tls
233 (starttls-available-p))) 233 (plist-get parameters :use-starttls-if-possible))
234 (starttls-available-p))))
234 (not (eq (plist-get parameters :type) 'plain))) 235 (not (eq (plist-get parameters :type) 'plain)))
235 ;; If using external STARTTLS, drop this connection and start 236 ;; If using external STARTTLS, drop this connection and start
236 ;; anew with `starttls-open-stream'. 237 ;; anew with `starttls-open-stream'.
@@ -298,9 +299,13 @@ functionality.
298 ;; support, or no gnutls-cli installed. 299 ;; support, or no gnutls-cli installed.
299 (eq resulting-type 'plain)) 300 (eq resulting-type 'plain))
300 (setq error 301 (setq error
301 (if require-tls 302 (if starttls-available
302 "Server does not support TLS" 303 "Server does not support TLS"
303 "Server supports STARTTLS, but Emacs does not have support for it")) 304 (concat "Emacs does not support TLS, and no external `"
305 (if starttls-use-gnutls
306 starttls-gnutls-program
307 starttls-program)
308 "' program was found")))
304 (delete-process stream) 309 (delete-process stream)
305 (setq stream nil)) 310 (setq stream nil))
306 ;; Return value: 311 ;; Return value:
diff --git a/lisp/pcmpl-unix.el b/lisp/pcmpl-unix.el
index b466c2cd899..a34458506e2 100644
--- a/lisp/pcmpl-unix.el
+++ b/lisp/pcmpl-unix.el
@@ -185,7 +185,7 @@ Uses both `pcmpl-ssh-config-file' and `pcmpl-ssh-known-hosts-file'."
185;;;###autoload 185;;;###autoload
186(defun pcomplete/ssh () 186(defun pcomplete/ssh ()
187 "Completion rules for the `ssh' command." 187 "Completion rules for the `ssh' command."
188 (pcomplete-opt "1246AaCfgKkMNnqsTtVvXxYbcDeFiLlmOopRSw" nil t) 188 (pcomplete-opt "1246AaCfgKkMNnqsTtVvXxYbcDeFiLlmOopRSw")
189 (pcomplete-here (pcmpl-ssh-hosts))) 189 (pcomplete-here (pcmpl-ssh-hosts)))
190 190
191;;;###autoload 191;;;###autoload
diff --git a/src/ChangeLog b/src/ChangeLog
index 52fe8baa92e..2c72e97b7f7 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,13 @@
12011-10-15 Martin Rudalics <rudalics@gmx.at>
2
3 * window.c (coordinates_in_window): Rewrite and delabelize
4 vertical border check. (Bug#5357) (Bug#9618)
5
62011-10-14 Stefan Monnier <monnier@iro.umontreal.ca>
7
8 * xterm.c (frame_highlight, frame_unhighlight): Ignore unexplained
9 errors in XSetWindowBorder (bug#9310).
10
12011-10-13 Dmitry Antipov <dmantipov@yandex.ru> 112011-10-13 Dmitry Antipov <dmantipov@yandex.ru>
2 12
3 * editfns.c (Fset_time_zone_rule): Replace free with xfree to 13 * editfns.c (Fset_time_zone_rule): Replace free with xfree to
@@ -71,8 +81,8 @@
71 81
722011-10-07 Stefan Monnier <monnier@iro.umontreal.ca> 822011-10-07 Stefan Monnier <monnier@iro.umontreal.ca>
73 83
74 * buffer.c (syms_of_buffer) <enable-multibyte-characters>: Don't 84 * buffer.c (syms_of_buffer) <enable-multibyte-characters>:
75 advertise functionality which we discourage or doesn't work. 85 Don't advertise functionality which we discourage or doesn't work.
76 86
772011-10-07 Paul Eggert <eggert@cs.ucla.edu> 872011-10-07 Paul Eggert <eggert@cs.ucla.edu>
78 88
@@ -338,8 +348,7 @@
3382011-09-17 Eli Zaretskii <eliz@gnu.org> 3482011-09-17 Eli Zaretskii <eliz@gnu.org>
339 349
340 * xdisp.c (reseat_at_next_visible_line_start): Keep information 350 * xdisp.c (reseat_at_next_visible_line_start): Keep information
341 about the current paragraph and restore it after the call to 351 about the current paragraph and restore it after the call to reseat.
342 reseat.
343 352
344 * bidi.c (MAX_PARAGRAPH_SEARCH): New macro. 353 * bidi.c (MAX_PARAGRAPH_SEARCH): New macro.
345 (bidi_find_paragraph_start): Search back for paragraph beginning 354 (bidi_find_paragraph_start): Search back for paragraph beginning
@@ -559,7 +568,7 @@
559 * doprnt.c (doprnt): Support printing ptrdiff_t and intmax_t values. 568 * doprnt.c (doprnt): Support printing ptrdiff_t and intmax_t values.
560 (esprintf, exprintf, evxprintf): New functions. 569 (esprintf, exprintf, evxprintf): New functions.
561 * keyboard.c (command_loop_level): Now EMACS_INT, not int. 570 * keyboard.c (command_loop_level): Now EMACS_INT, not int.
562 (cmd_error): kbd macro iterations count is now EMACS_INT, not int. 571 (cmd_error): Kbd macro iterations count is now EMACS_INT, not int.
563 (modify_event_symbol): Do not assume that the length of 572 (modify_event_symbol): Do not assume that the length of
564 name_alist_or_stem is safe to alloca and fits in int. 573 name_alist_or_stem is safe to alloca and fits in int.
565 (Fexecute_extended_command): Likewise for function name and binding. 574 (Fexecute_extended_command): Likewise for function name and binding.
@@ -1303,8 +1312,7 @@
1303 1312
13042011-08-18 Andreas Schwab <schwab@linux-m68k.org> 13132011-08-18 Andreas Schwab <schwab@linux-m68k.org>
1305 1314
1306 * process.c (Fnetwork_interface_list): Correctly determine buffer 1315 * process.c (Fnetwork_interface_list): Correctly determine buffer size.
1307 size.
1308 1316
13092011-08-17 Chong Yidong <cyd@stupidchicken.com> 13172011-08-17 Chong Yidong <cyd@stupidchicken.com>
1310 1318
@@ -1349,15 +1357,10 @@
1349 1357
13502011-08-15 Eli Zaretskii <eliz@gnu.org> 13582011-08-15 Eli Zaretskii <eliz@gnu.org>
1351 1359
1352 * biditype.h: File removed. 1360 * bidimirror.h:
1353 1361 * biditype.h: Remove file.
1354 * bidimirror.h: File removed. 1362 * makefile.w32-in ($(BLD)/bidi.$(O)):
1355 1363 * deps.mk (bidi.o): Remove biditype.h and bidimirror.h.
1356 * deps.mk (bidi.o): Remove biditype.h and
1357 bidimirror.h.
1358
1359 * makefile.w32-in ($(BLD)/bidi.$(O)): Remove biditype.h and
1360 bidimirror.h.
1361 1364
1362 * dispextern.h: Fix a typo in the comment to bidi_type_t. 1365 * dispextern.h: Fix a typo in the comment to bidi_type_t.
1363 1366
@@ -1532,8 +1535,7 @@
1532 1535
15332011-08-04 Andreas Schwab <schwab@linux-m68k.org> 15362011-08-04 Andreas Schwab <schwab@linux-m68k.org>
1534 1537
1535 * regex.c (re_iswctype): Remove some redundant boolean 1538 * regex.c (re_iswctype): Remove some redundant boolean conversions.
1536 conversions.
1537 1539
15382011-08-04 Jan Djärv <jan.h.d@swipnet.se> 15402011-08-04 Jan Djärv <jan.h.d@swipnet.se>
1539 1541
@@ -2070,8 +2072,7 @@
20702011-07-15 Eli Zaretskii <eliz@gnu.org> 20722011-07-15 Eli Zaretskii <eliz@gnu.org>
2071 2073
2072 * xdisp.c (move_it_in_display_line_to): Fix vertical motion with 2074 * xdisp.c (move_it_in_display_line_to): Fix vertical motion with
2073 bidi redisplay when a line includes both an image and is 2075 bidi redisplay when a line includes both an image and is truncated.
2074 truncated.
2075 2076
20762011-07-14 Paul Eggert <eggert@cs.ucla.edu> 20772011-07-14 Paul Eggert <eggert@cs.ucla.edu>
2077 2078
diff --git a/src/window.c b/src/window.c
index 94b9f8a451f..7f4714ba17e 100644
--- a/src/window.c
+++ b/src/window.c
@@ -921,22 +921,45 @@ static enum window_part
921coordinates_in_window (register struct window *w, int x, int y) 921coordinates_in_window (register struct window *w, int x, int y)
922{ 922{
923 struct frame *f = XFRAME (WINDOW_FRAME (w)); 923 struct frame *f = XFRAME (WINDOW_FRAME (w));
924 int left_x, right_x;
925 enum window_part part; 924 enum window_part part;
926 int ux = FRAME_COLUMN_WIDTH (f); 925 int ux = FRAME_COLUMN_WIDTH (f);
927 int x0 = WINDOW_LEFT_EDGE_X (w); 926 int left_x = WINDOW_LEFT_EDGE_X (w);
928 int x1 = WINDOW_RIGHT_EDGE_X (w); 927 int right_x = WINDOW_RIGHT_EDGE_X (w);
928 int top_y = WINDOW_TOP_EDGE_Y (w);
929 int bottom_y = WINDOW_BOTTOM_EDGE_Y (w);
929 /* The width of the area where the vertical line can be dragged. 930 /* The width of the area where the vertical line can be dragged.
930 (Between mode lines for instance. */ 931 (Between mode lines for instance. */
931 int grabbable_width = ux; 932 int grabbable_width = ux;
932 int lmargin_width, rmargin_width, text_left, text_right; 933 int lmargin_width, rmargin_width, text_left, text_right;
933 int top_y = WINDOW_TOP_EDGE_Y (w);
934 int bottom_y = WINDOW_BOTTOM_EDGE_Y (w);
935 934
936 /* Outside any interesting row? */ 935 /* Outside any interesting row or column? */
937 if (y < top_y || y >= bottom_y) 936 if (y < top_y || y >= bottom_y || x < left_x || x >= right_x)
938 return ON_NOTHING; 937 return ON_NOTHING;
939 938
939 /* On the mode line or header line? */
940 if ((WINDOW_WANTS_MODELINE_P (w)
941 && y >= bottom_y - CURRENT_MODE_LINE_HEIGHT (w)
942 && (part = ON_MODE_LINE))
943 || (WINDOW_WANTS_HEADER_LINE_P (w)
944 && y < top_y + CURRENT_HEADER_LINE_HEIGHT (w)
945 && (part = ON_HEADER_LINE)))
946 {
947 /* If it's under/over the scroll bar portion of the mode/header
948 line, say it's on the vertical line. That's to be able to
949 resize windows horizontally in case we're using toolkit scroll
950 bars. Note: If scrollbars are on the left, the window that
951 must be eventually resized is that on the left of WINDOW. */
952 if ((WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_LEFT (w)
953 && !WINDOW_LEFTMOST_P (w)
954 && eabs (x - left_x) < grabbable_width)
955 || (!WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_LEFT (w)
956 && !WINDOW_RIGHTMOST_P (w)
957 && eabs (x - right_x) < grabbable_width))
958 return ON_VERTICAL_BORDER;
959 else
960 return part;
961 }
962
940 /* In what's below, we subtract 1 when computing right_x because we 963 /* In what's below, we subtract 1 when computing right_x because we
941 want the rightmost pixel, which is given by left_pixel+width-1. */ 964 want the rightmost pixel, which is given by left_pixel+width-1. */
942 if (w->pseudo_window_p) 965 if (w->pseudo_window_p)
@@ -950,50 +973,6 @@ coordinates_in_window (register struct window *w, int x, int y)
950 right_x = WINDOW_BOX_RIGHT_EDGE_X (w) - 1; 973 right_x = WINDOW_BOX_RIGHT_EDGE_X (w) - 1;
951 } 974 }
952 975
953 /* On the mode line or header line? If it's near the start of
954 the mode or header line of window that's has a horizontal
955 sibling, say it's on the vertical line. That's to be able
956 to resize windows horizontally in case we're using toolkit
957 scroll bars. */
958
959 if (WINDOW_WANTS_MODELINE_P (w)
960 && y >= bottom_y - CURRENT_MODE_LINE_HEIGHT (w))
961 {
962 part = ON_MODE_LINE;
963
964 header_vertical_border_check:
965 /* We're somewhere on the mode line. We consider the place
966 between mode lines of horizontally adjacent mode lines
967 as the vertical border. If scroll bars on the left,
968 return the right window. */
969 if ((WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_LEFT (w)
970 || WINDOW_RIGHTMOST_P (w))
971 && !WINDOW_LEFTMOST_P (w)
972 && eabs (x - x0) < grabbable_width)
973 return ON_VERTICAL_BORDER;
974
975 /* Make sure we're not at the rightmost position of a
976 mode-/header-line and there's yet another window on the
977 right. (Bug#1372) */
978 else if ((WINDOW_RIGHTMOST_P (w) || x < x1)
979 && eabs (x - x1) < grabbable_width)
980 return ON_VERTICAL_BORDER;
981
982 if (x < x0 || x >= x1)
983 return ON_NOTHING;
984
985 return part;
986 }
987
988 if (WINDOW_WANTS_HEADER_LINE_P (w)
989 && y < top_y + CURRENT_HEADER_LINE_HEIGHT (w))
990 {
991 part = ON_HEADER_LINE;
992 goto header_vertical_border_check;
993 }
994
995 if (x < x0 || x >= x1) return ON_NOTHING;
996
997 /* Outside any interesting column? */ 976 /* Outside any interesting column? */
998 if (x < left_x || x > right_x) 977 if (x < left_x || x > right_x)
999 return ON_SCROLL_BAR; 978 return ON_SCROLL_BAR;
diff --git a/src/xterm.c b/src/xterm.c
index 1357afa0c15..128a274ff10 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -3364,8 +3364,14 @@ frame_highlight (struct frame *f)
3364 and border pixel are window attributes which are "private to the 3364 and border pixel are window attributes which are "private to the
3365 client", so we can always change it to whatever we want. */ 3365 client", so we can always change it to whatever we want. */
3366 BLOCK_INPUT; 3366 BLOCK_INPUT;
3367 /* I recently started to get errors in this XSetWindowBorder, depending on
3368 the window-manager in use, tho something more is at play since I've been
3369 using that same window-manager binary for ever. Let's not crash just
3370 because of this (bug#9310). */
3371 x_catch_errors (FRAME_X_DISPLAY (f));
3367 XSetWindowBorder (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), 3372 XSetWindowBorder (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
3368 f->output_data.x->border_pixel); 3373 f->output_data.x->border_pixel);
3374 x_uncatch_errors ();
3369 UNBLOCK_INPUT; 3375 UNBLOCK_INPUT;
3370 x_update_cursor (f, 1); 3376 x_update_cursor (f, 1);
3371 x_set_frame_alpha (f); 3377 x_set_frame_alpha (f);
@@ -3379,8 +3385,11 @@ frame_unhighlight (struct frame *f)
3379 and border pixel are window attributes which are "private to the 3385 and border pixel are window attributes which are "private to the
3380 client", so we can always change it to whatever we want. */ 3386 client", so we can always change it to whatever we want. */
3381 BLOCK_INPUT; 3387 BLOCK_INPUT;
3388 /* Same as above for XSetWindowBorder (bug#9310). */
3389 x_catch_errors (FRAME_X_DISPLAY (f));
3382 XSetWindowBorderPixmap (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), 3390 XSetWindowBorderPixmap (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
3383 f->output_data.x->border_tile); 3391 f->output_data.x->border_tile);
3392 x_uncatch_errors ();
3384 UNBLOCK_INPUT; 3393 UNBLOCK_INPUT;
3385 x_update_cursor (f, 1); 3394 x_update_cursor (f, 1);
3386 x_set_frame_alpha (f); 3395 x_set_frame_alpha (f);
diff --git a/test/ChangeLog b/test/ChangeLog
index 6ab148358d9..ea6d90b534c 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,7 @@
12011-10-15 Glenn Morris <rgm@gnu.org>
2
3 * automated/f90.el: New file.
4
12011-09-27 Ulf Jasper <ulf.jasper@web.de> 52011-09-27 Ulf Jasper <ulf.jasper@web.de>
2 6
3 * automated/newsticker-tests.el: Move newsticker-testsuite.el 7 * automated/newsticker-tests.el: Move newsticker-testsuite.el
diff --git a/test/automated/f90.el b/test/automated/f90.el
new file mode 100644
index 00000000000..5d75d5cd0fb
--- /dev/null
+++ b/test/automated/f90.el
@@ -0,0 +1,158 @@
1;;; f90.el --- tests for progmodes/f90.el
2
3;; Copyright (C) 2011 Free Software Foundation, Inc.
4
5;; Author: Glenn Morris <rgm@gnu.org>
6
7;; This file is part of GNU Emacs.
8
9;; GNU Emacs is free software: you can redistribute it and/or modify
10;; it under the terms of the GNU General Public License as published by
11;; the Free Software Foundation, either version 3 of the License, or
12;; (at your option) any later version.
13
14;; GNU Emacs is distributed in the hope that it will be useful,
15;; but WITHOUT ANY WARRANTY; without even the implied warranty of
16;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17;; GNU General Public License for more details.
18
19;; You should have received a copy of the GNU General Public License
20;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
21
22;;; Commentary:
23
24;; This file does not have "test" in the name, because it lives under
25;; a test/ directory, so that would be superfluous.
26
27;;; Code:
28
29(require 'ert)
30(require 'f90)
31
32(defconst f90-test-indent "\
33!! Comment before code.
34!!! Comments before code.
35#preprocessor before code
36
37program progname
38
39 implicit none
40
41 integer :: i
42
43 !! Comment.
44
45 do i = 1, 10
46
47#preprocessor
48
49 !! Comment.
50 if ( i % 2 == 0 ) then
51 !! Comment.
52 cycle
53 else
54 write(*,*) i
55 end if
56 end do
57
58!!! Comment.
59
60end program progname
61"
62 "Test string for F90 indentation.")
63
64(ert-deftest f90-test-indent ()
65 "Test F90 indentation."
66 (with-temp-buffer
67 (f90-mode)
68 (insert f90-test-indent)
69 (indent-rigidly (point-min) (point-max) -999)
70 (f90-indent-region (point-min) (point-max))
71 (should (string-equal (buffer-string) f90-test-indent))))
72
73(ert-deftest f90-test-bug3729 ()
74 "Test for http://debbugs.gnu.org/3729 ."
75 :expected-result :failed
76 (with-temp-buffer
77 (f90-mode)
78 (insert "!! Comment
79
80include \"file.f90\"
81
82subroutine test (x)
83 real x
84 x = x+1.
85 return
86end subroutine test")
87 (goto-char (point-min))
88 (forward-line 2)
89 (f90-indent-subprogram)
90 (should (= 0 (current-indentation)))))
91
92(ert-deftest f90-test-bug3730 ()
93 "Test for http://debbugs.gnu.org/3730 ."
94 (with-temp-buffer
95 (f90-mode)
96 (insert "a" )
97 (move-to-column 68 t)
98 (insert "(/ x /)")
99 (f90-do-auto-fill)
100 (beginning-of-line)
101 (skip-chars-forward "[ \t]")
102 (should (equal "&(/" (buffer-substring (point) (+ 3 (point)))))))
103
104;; TODO bug#5593
105
106(ert-deftest f90-test-bug8691 ()
107 "Test for http://debbugs.gnu.org/8691 ."
108 (with-temp-buffer
109 (f90-mode)
110 (insert "module modname
111type, bind(c) :: type1
112integer :: part1
113end type type1
114end module modname")
115 (f90-indent-subprogram)
116 (forward-line -1)
117 (should (= 2 (current-indentation)))))
118
119;; TODO bug#8812
120
121(ert-deftest f90-test-bug8820 ()
122 "Test for http://debbugs.gnu.org/8820 ."
123 (with-temp-buffer
124 (f90-mode)
125 (should (eq (char-syntax ?%) (string-to-char ".")))))
126
127(ert-deftest f90-test-bug9553a ()
128 "Test for http://debbugs.gnu.org/9553 ."
129 (with-temp-buffer
130 (f90-mode)
131 (insert "!!!")
132 (dotimes (_i 20) (insert " aaaa"))
133 (f90-do-auto-fill)
134 (beginning-of-line)
135 ;; This gives a more informative failure than looking-at.
136 (should (equal "!!! a" (buffer-substring (point) (+ 5 (point)))))))
137
138(ert-deftest f90-test-bug9553b ()
139 "Test for http://debbugs.gnu.org/9553 ."
140 (with-temp-buffer
141 (f90-mode)
142 (insert "!!!")
143 (dotimes (_i 13) (insert " aaaa"))
144 (insert "a, aaaa")
145 (f90-do-auto-fill)
146 (beginning-of-line)
147 (should (equal "!!! a" (buffer-substring (point) (+ 5 (point)))))))
148
149(ert-deftest f90-test-bug9690 ()
150 "Test for http://debbugs.gnu.org/9690 ."
151 (with-temp-buffer
152 (f90-mode)
153 (insert "#include \"foo.h\"")
154 (f90-indent-line)
155 (should (= 0 (current-indentation)))))
156
157
158;;; f90.el ends here