aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGlenn Morris2012-12-27 00:21:08 -0800
committerGlenn Morris2012-12-27 00:21:08 -0800
commit82e2a1f054cc0306494d1194036af4c5d7301caf (patch)
treef78be2edfd92d4eba0dc28bd110f646a314438ae
parentc34339f3a2c425ca37bec0c6a152f913ab61f458 (diff)
parente1da740354d9cab626bce82645adcfc6b0735b70 (diff)
downloademacs-82e2a1f054cc0306494d1194036af4c5d7301caf.tar.gz
emacs-82e2a1f054cc0306494d1194036af4c5d7301caf.zip
Merge from emacs-24; up to 2012-12-03T21:07:47Z!eggert@cs.ucla.edu
-rw-r--r--ChangeLog5
-rw-r--r--configure.ac2
-rw-r--r--doc/emacs/maintaining.texi2
-rw-r--r--doc/lispref/ChangeLog4
-rw-r--r--doc/lispref/files.texi10
-rw-r--r--doc/misc/ChangeLog25
-rw-r--r--doc/misc/ada-mode.texi16
-rw-r--r--doc/misc/auth.texi6
-rw-r--r--doc/misc/autotype.texi34
-rw-r--r--doc/misc/bovine.texi6
-rw-r--r--doc/misc/ede.texi5
-rw-r--r--doc/misc/eieio.texi9
-rw-r--r--doc/misc/idlwave.texi2
-rw-r--r--doc/misc/pcl-cvs.texi4
-rw-r--r--doc/misc/viper.texi10
-rw-r--r--doc/misc/widget.texi21
-rw-r--r--doc/misc/wisent.texi12
-rw-r--r--etc/NEWS4
-rw-r--r--lisp/ChangeLog14
-rw-r--r--lisp/gnus/ChangeLog12
-rw-r--r--lisp/gnus/nnimap.el2
-rw-r--r--lisp/gnus/plstore.el3
-rw-r--r--lisp/progmodes/cc-fonts.el3
-rw-r--r--lisp/progmodes/ruby-mode.el7
-rw-r--r--src/ChangeLog20
-rw-r--r--src/cygw32.c18
-rw-r--r--src/fileio.c156
-rw-r--r--test/ChangeLog5
-rw-r--r--test/automated/ruby-mode-tests.el13
29 files changed, 305 insertions, 125 deletions
diff --git a/ChangeLog b/ChangeLog
index dbce562664e..1a68ed5e954 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
12012-12-27 Andreas Schwab <schwab@linux-m68k.org>
2
3 * configure.ac (SIGNALS_VIA_CHARACTERS): Also define for darwin.
4 (Bug#13222)
5
12012-12-26 Paul Eggert <eggert@cs.ucla.edu> 62012-12-26 Paul Eggert <eggert@cs.ucla.edu>
2 7
3 Revert static checking of stack smashing. 8 Revert static checking of stack smashing.
diff --git a/configure.ac b/configure.ac
index 9d3e872c29c..9e0582dee6b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3673,7 +3673,7 @@ AH_TEMPLATE(SIGNALS_VIA_CHARACTERS, [Make process_send_signal work by
3673case $opsys in 3673case $opsys in
3674 dnl Perry Smith <pedz@ddivt1.austin.ibm.com> says this is correct for AIX. 3674 dnl Perry Smith <pedz@ddivt1.austin.ibm.com> says this is correct for AIX.
3675 dnl thomas@mathematik.uni-bremen.de says this is needed for IRIX. 3675 dnl thomas@mathematik.uni-bremen.de says this is needed for IRIX.
3676 aix4-2 | cygwin | gnu | irix6-5 | freebsd | netbsd | openbsd ) 3676 aix4-2 | cygwin | gnu | irix6-5 | freebsd | netbsd | openbsd | darwin )
3677 AC_DEFINE(SIGNALS_VIA_CHARACTERS, 1) 3677 AC_DEFINE(SIGNALS_VIA_CHARACTERS, 1)
3678 ;; 3678 ;;
3679 3679
diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi
index 66fa643091f..440540d321e 100644
--- a/doc/emacs/maintaining.texi
+++ b/doc/emacs/maintaining.texi
@@ -1065,7 +1065,7 @@ the version control system which the VC Directory buffer should use.
1065@cindex CVS directory mode 1065@cindex CVS directory mode
1066 In addition to the VC Directory buffer, Emacs has a similar facility 1066 In addition to the VC Directory buffer, Emacs has a similar facility
1067called PCL-CVS which is specialized for CVS@. @xref{Top, , About 1067called PCL-CVS which is specialized for CVS@. @xref{Top, , About
1068PCL-CVS, pcl-cvs, PCL-CVS --- The Emacs Front-End to CVS}. 1068PCL-CVS, pcl-cvs, PCL-CVS---The Emacs Front-End to CVS}.
1069@end ifnottex 1069@end ifnottex
1070 1070
1071@menu 1071@menu
diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog
index b5ad25377a0..7893424a942 100644
--- a/doc/lispref/ChangeLog
+++ b/doc/lispref/ChangeLog
@@ -1,3 +1,7 @@
12012-12-27 Glenn Morris <rgm@gnu.org>
2
3 * files.texi (File Names): Mention Cygwin conversion functions.
4
12012-12-22 Martin Rudalics <rudalics@gmx.at> 52012-12-22 Martin Rudalics <rudalics@gmx.at>
2 6
3 * windows.texi (Selecting Windows): Reword description of 7 * windows.texi (Selecting Windows): Reword description of
diff --git a/doc/lispref/files.texi b/doc/lispref/files.texi
index fe9b126d4a2..3faa5f5e257 100644
--- a/doc/lispref/files.texi
+++ b/doc/lispref/files.texi
@@ -1733,12 +1733,20 @@ how to manipulate file names.
1733can operate on file names that do not refer to an existing file or 1733can operate on file names that do not refer to an existing file or
1734directory. 1734directory.
1735 1735
1736@findex cygwin-convert-file-name-from-windows
1737@findex cygwin-convert-file-name-to-windows
1738@cindex MS-Windows file-name syntax
1739@cindex converting file names from/to MS-Windows syntax
1736 On MS-DOS and MS-Windows, these functions (like the function that 1740 On MS-DOS and MS-Windows, these functions (like the function that
1737actually operate on files) accept MS-DOS or MS-Windows file-name syntax, 1741actually operate on files) accept MS-DOS or MS-Windows file-name syntax,
1738where backslashes separate the components, as well as Unix syntax; but 1742where backslashes separate the components, as well as Unix syntax; but
1739they always return Unix syntax. This enables Lisp programs to specify 1743they always return Unix syntax. This enables Lisp programs to specify
1740file names in Unix syntax and work properly on all systems without 1744file names in Unix syntax and work properly on all systems without
1741change. 1745change.@footnote{In MS-Windows versions of Emacs compiled for the Cygwin
1746environment, you can use the functions
1747@code{cygwin-convert-file-name-to-windows} and
1748@code{cygwin-convert-file-name-from-windows} to convert between the
1749two file-name syntaxes.}
1742 1750
1743@menu 1751@menu
1744* File Name Components:: The directory part of a file name, and the rest. 1752* File Name Components:: The directory part of a file name, and the rest.
diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog
index 9b58992d2d9..ce556568c56 100644
--- a/doc/misc/ChangeLog
+++ b/doc/misc/ChangeLog
@@ -1,3 +1,28 @@
12012-12-27 Glenn Morris <rgm@gnu.org>
2
3 * viper.texi (Rudimentary Changes, Key Bindings, Key Bindings):
4 Avoid some overfull lines.
5
6 * widget.texi (Programming Example): Break some long lines.
7
8 * wisent.texi (Wisent Overview): Fix xref.
9 (Grammar format, Understanding the automaton): Avoid overfill.
10
11 * bovine.texi (Optional Lambda Expression): Allow line break.
12
13 * auth.texi (Help for users): Break long lines.
14
15 * ada-mode.texi (Project file variables):
16 Reword to reduce underfull hbox.
17 (No project files, Use GNAT project file):
18 Use smallexample to make some overfull lines less terrible.
19
20 * autotype.texi, bovine.texi, ede.texi, eieio.texi, pcl-cvs.texi:
21 Fix cross-references to separate manuals.
22
23 * Makefile.in (gfdl): New variable. Use throughout where
24 appropriate so that targets depend on doclicense.texi.
25
12012-12-25 Lars Ingebrigtsen <larsi@gnus.org> 262012-12-25 Lars Ingebrigtsen <larsi@gnus.org>
2 27
3 * gnus.texi (Customizing the IMAP Connection): Mention the other 28 * gnus.texi (Customizing the IMAP Connection): Mention the other
diff --git a/doc/misc/ada-mode.texi b/doc/misc/ada-mode.texi
index 30ad0359264..427e6c7b1c1 100644
--- a/doc/misc/ada-mode.texi
+++ b/doc/misc/ada-mode.texi
@@ -521,8 +521,8 @@ ada_project_path_sep=:
521ada_project_path=$GDS_ROOT/makerules 521ada_project_path=$GDS_ROOT/makerules
522ada_project_path=../opentoken 522ada_project_path=../opentoken
523@end example 523@end example
524the environment variable @code{ADA_PROJECT_PATH} will be set to 524then as a result the environment variable @code{ADA_PROJECT_PATH} will
525@code{"/home/shared/makerules:/home/opentoken/"}. 525be set to @code{"/home/shared/makerules:/home/opentoken/"}.
526 526
527The default value is not the current value of this environment 527The default value is not the current value of this environment
528variable, because that will typically have been set by another 528variable, because that will typically have been set by another
@@ -730,7 +730,7 @@ In buffer @file{hello.adb}, invoke @samp{Ada | Check file}. You should
730get a @code{*compilation*} buffer containing something like (the 730get a @code{*compilation*} buffer containing something like (the
731directory paths will be different): 731directory paths will be different):
732 732
733@example 733@smallexample
734cd c:/Examples/Example_1/ 734cd c:/Examples/Example_1/
735gnatmake -u -c -gnatc -g c:/Examples/Example_1/hello.adb -cargs -gnatq -gnatQ 735gnatmake -u -c -gnatc -g c:/Examples/Example_1/hello.adb -cargs -gnatq -gnatQ
736gcc -c -Ic:/Examples/Example_1/ -gnatc -g -gnatq -gnatQ -I- c:/Examples/Example_1/hello.adb 736gcc -c -Ic:/Examples/Example_1/ -gnatc -g -gnatq -gnatQ -I- c:/Examples/Example_1/hello.adb
@@ -738,7 +738,7 @@ hello.adb:4:04: "Put_Line" is not visible
738hello.adb:4:04: non-visible declaration at a-textio.ads:264 738hello.adb:4:04: non-visible declaration at a-textio.ads:264
739hello.adb:4:04: non-visible declaration at a-textio.ads:260 739hello.adb:4:04: non-visible declaration at a-textio.ads:260
740gnatmake: "c:/Examples/Example_1/hello.adb" compilation error 740gnatmake: "c:/Examples/Example_1/hello.adb" compilation error
741@end example 741@end smallexample
742 742
743If you have enabled font-lock, the lines with actual errors (starting 743If you have enabled font-lock, the lines with actual errors (starting
744with @file{hello.adb}) are highlighted, with the file name in red. 744with @file{hello.adb}) are highlighted, with the file name in red.
@@ -1045,14 +1045,14 @@ Then, again in @file{hello_4.adb}, invoke @samp{Ada | Set main and
1045Build}. You should get a @code{*compilation*} buffer containing 1045Build}. You should get a @code{*compilation*} buffer containing
1046something like (the directory paths will be different): 1046something like (the directory paths will be different):
1047 1047
1048@example 1048@smallexample
1049cd c:/Examples/Example_4/Gnat_Project/ 1049cd c:/Examples/Example_4/Gnat_Project/
1050gnatmake -o hello_4 hello_4 -Phello_4.gpr -cargs -gnatq -gnatQ -bargs -largs 1050gnatmake -o hello_4 hello_4 -Phello_4.gpr -cargs -gnatq -gnatQ -bargs -largs
1051gcc -c -g -gnatyt -gnatq -gnatQ -I- -gnatA c:\Examples\Example_4\Gnat_Project\hello_4.adb 1051gcc -c -g -gnatyt -gnatq -gnatQ -I- -gnatA c:\Examples\Example_4\Gnat_Project\hello_4.adb
1052gcc -c -g -gnatyt -gnatq -gnatQ -I- -gnatA c:\Examples\Example_4\hello_pkg.adb 1052gcc -c -g -gnatyt -gnatq -gnatQ -I- -gnatA c:\Examples\Example_4\hello_pkg.adb
1053hello_pkg.adb:2:08: keyword "body" expected here [see file name] 1053hello_pkg.adb:2:08: keyword "body" expected here [see file name]
1054gnatmake: "c:\examples\example_4\hello_pkg.adb" compilation error 1054gnatmake: "c:\examples\example_4\hello_pkg.adb" compilation error
1055@end example 1055@end smallexample
1056 1056
1057Compare the @code{gcc} options to the compiler output in @ref{Set 1057Compare the @code{gcc} options to the compiler output in @ref{Set
1058compiler options}; this shows that @file{hello_4.gpr} is being used to 1058compiler options}; this shows that @file{hello_4.gpr} is being used to
@@ -1112,14 +1112,14 @@ Then, again in @file{hello_5.adb}, invoke @samp{Ada | Set main and
1112Build}. You should get a @code{*compilation*} buffer containing 1112Build}. You should get a @code{*compilation*} buffer containing
1113something like (the directory paths will be different): 1113something like (the directory paths will be different):
1114 1114
1115@example 1115@smallexample
1116cd c:/Examples/Example_5/ 1116cd c:/Examples/Example_5/
1117gnatmake -o hello_5 hello_5 -Phello_5.gpr -g -cargs -gnatq -gnatQ -bargs -largs 1117gnatmake -o hello_5 hello_5 -Phello_5.gpr -g -cargs -gnatq -gnatQ -bargs -largs
1118gcc -c -g -gnatyt -g -gnatq -gnatQ -I- -gnatA c:\Examples\Example_5\hello_5.adb 1118gcc -c -g -gnatyt -g -gnatq -gnatQ -I- -gnatA c:\Examples\Example_5\hello_5.adb
1119gcc -c -g -gnatyt -g -gnatq -gnatQ -I- -gnatA c:\Examples\Example_4\hello_pkg.adb 1119gcc -c -g -gnatyt -g -gnatq -gnatQ -I- -gnatA c:\Examples\Example_4\hello_pkg.adb
1120hello_pkg.adb:2:08: keyword "body" expected here [see file name] 1120hello_pkg.adb:2:08: keyword "body" expected here [see file name]
1121gnatmake: "c:\examples\example_4\hello_pkg.adb" compilation error 1121gnatmake: "c:\examples\example_4\hello_pkg.adb" compilation error
1122@end example 1122@end smallexample
1123 1123
1124Now type @kbd{C-x `}. @file{Example_4/hello_pkg.adb} is shown, 1124Now type @kbd{C-x `}. @file{Example_4/hello_pkg.adb} is shown,
1125demonstrating that @file{hello_5.gpr} and @file{hello_4.gpr} are being 1125demonstrating that @file{hello_5.gpr} and @file{hello_4.gpr} are being
diff --git a/doc/misc/auth.texi b/doc/misc/auth.texi
index 6f3a5fe0a38..bb6ad46c26f 100644
--- a/doc/misc/auth.texi
+++ b/doc/misc/auth.texi
@@ -154,7 +154,8 @@ and simplest configuration is:
154(setq auth-sources '((:source "~/.authinfo.gpg"))) 154(setq auth-sources '((:source "~/.authinfo.gpg")))
155;;; even shorter and the @emph{default}: 155;;; even shorter and the @emph{default}:
156(setq auth-sources '("~/.authinfo.gpg" "~/.authinfo" "~/.netrc")) 156(setq auth-sources '("~/.authinfo.gpg" "~/.authinfo" "~/.netrc"))
157;;; use the Secrets API @var{Login} collection (@pxref{Secret Service API}) 157;;; use the Secrets API @var{Login} collection
158;;; (@pxref{Secret Service API})
158(setq auth-sources '("secrets:Login")) 159(setq auth-sources '("secrets:Login"))
159@end lisp 160@end lisp
160 161
@@ -167,7 +168,8 @@ have unusual setups and the remaining 10% are @emph{really} unusual).
167Here's a mixed example using two sources: 168Here's a mixed example using two sources:
168 169
169@lisp 170@lisp
170(setq auth-sources '((:source (:secrets default) :host "myserver" :user "joe") 171(setq auth-sources '((:source (:secrets default)
172 :host "myserver" :user "joe")
171 "~/.authinfo.gpg")) 173 "~/.authinfo.gpg"))
172@end lisp 174@end lisp
173 175
diff --git a/doc/misc/autotype.texi b/doc/misc/autotype.texi
index 9af47adfbe3..b68229ff5cb 100644
--- a/doc/misc/autotype.texi
+++ b/doc/misc/autotype.texi
@@ -58,7 +58,7 @@ over and over again. This is especially true of form letters and programming
58language constructs. Project-specific header comments, flow-control 58language constructs. Project-specific header comments, flow-control
59constructs or magic numbers are essentially the same every time. Emacs has 59constructs or magic numbers are essentially the same every time. Emacs has
60various features for doing tedious and repetitive typing chores for you 60various features for doing tedious and repetitive typing chores for you
61in addition to the Abbrev features (@pxref{(emacs)Abbrevs}). 61in addition to the Abbrev features (@pxref{Abbrevs,,, emacs, The GNU Emacs Manual}).
62 62
63 One solution is using skeletons, flexible rules that say what to 63 One solution is using skeletons, flexible rules that say what to
64insert, and how to do it. Various programming language modes offer some 64insert, and how to do it. Various programming language modes offer some
@@ -113,7 +113,7 @@ completions and expansions of text at point.
113programming language you are using, skeletons are a means of accomplishing 113programming language you are using, skeletons are a means of accomplishing
114this. Normally skeletons each have a command of their own, that, when called, 114this. Normally skeletons each have a command of their own, that, when called,
115will insert the skeleton. These commands can be issued in the usual ways 115will insert the skeleton. These commands can be issued in the usual ways
116(@pxref{(emacs)Commands}). Modes that offer various skeletons will often 116(@pxref{Commands,,, emacs, The GNU Emacs Manual}). Modes that offer various skeletons will often
117bind these to key-sequences on the @kbd{C-c} prefix, as well as having 117bind these to key-sequences on the @kbd{C-c} prefix, as well as having
118an @cite{Insert} menu and maybe even predefined abbrevs for them 118an @cite{Insert} menu and maybe even predefined abbrevs for them
119(@pxref{Skeletons as Abbrevs}). 119(@pxref{Skeletons as Abbrevs}).
@@ -146,18 +146,18 @@ accomplishing this, and can even, in the case of programming languages,
146reindent the wrapped code for you. 146reindent the wrapped code for you.
147 147
148 Skeleton commands take an optional numeric prefix argument 148 Skeleton commands take an optional numeric prefix argument
149(@pxref{(emacs)Arguments}). This is interpreted in two different ways depending 149(@pxref{Arguments,,, emacs, The GNU Emacs Manual}). This is interpreted in two different ways depending
150on whether the prefix is positive, i.e., forwards oriented, or negative, 150on whether the prefix is positive, i.e., forwards oriented, or negative,
151i.e., backwards oriented. 151i.e., backwards oriented.
152 152
153 A positive prefix means to wrap the skeleton around that many 153 A positive prefix means to wrap the skeleton around that many
154following words. This is accomplished by putting the words there where 154following words. This is accomplished by putting the words there where
155the point is normally left after that skeleton is inserted (@pxref{Using 155the point is normally left after that skeleton is inserted (@pxref{Using
156Skeletons}). The point (@pxref{(emacs)Point}) is left at the next 156Skeletons}). The point (@pxref{Point,,, emacs, The GNU Emacs Manual}) is left at the next
157interesting spot in the skeleton instead. 157interesting spot in the skeleton instead.
158 158
159 A negative prefix means to do something similar with that many previously 159 A negative prefix means to do something similar with that many previously
160marked interregions (@pxref{(emacs)Mark}). In the simplest case, if you type 160marked interregions (@pxref{Mark,,, emacs, The GNU Emacs Manual}). In the simplest case, if you type
161@kbd{M--} just before issuing the skeleton command, that will wrap the 161@kbd{M--} just before issuing the skeleton command, that will wrap the
162skeleton around the current region, just like a positive argument would have 162skeleton around the current region, just like a positive argument would have
163wrapped it around a number of words. 163wrapped it around a number of words.
@@ -189,8 +189,8 @@ tried to follow the order in which you marked these points.
189@cindex skeletons as abbrevs 189@cindex skeletons as abbrevs
190 190
191 Rather than use a key binding for every skeleton command, you can also 191 Rather than use a key binding for every skeleton command, you can also
192define an abbreviation (@pxref{(emacs)Defining Abbrevs}) that will expand 192define an abbreviation (@pxref{Defining Abbrevs,,, emacs, The GNU Emacs Manual}) that will expand
193(@pxref{(emacs)Expanding Abbrevs}) into the skeleton. 193(@pxref{Expanding Abbrevs,,, emacs, The GNU Emacs Manual}) into the skeleton.
194 194
195 Say you want @samp{ifst} to be an abbreviation for the C language if 195 Say you want @samp{ifst} to be an abbreviation for the C language if
196statement. You will tell Emacs that @samp{ifst} expands to the empty string 196statement. You will tell Emacs that @samp{ifst} expands to the empty string
@@ -290,7 +290,7 @@ skeleton. The first argument is the command name, the second is a
290documentation string, and the rest is an interactor and any number of skeleton 290documentation string, and the rest is an interactor and any number of skeleton
291elements together forming a skeleton. This skeleton is assigned to a variable 291elements together forming a skeleton. This skeleton is assigned to a variable
292of the same name as the command and can thus be overridden from your 292of the same name as the command and can thus be overridden from your
293@file{~/.emacs} file (@pxref{(emacs)Init File}). 293@file{~/.emacs} file (@pxref{Init File,,, emacs, The GNU Emacs Manual}).
294 294
295 295
296 296
@@ -309,14 +309,14 @@ fingers backwards, this can be quite relieving too.
309 309
310@findex skeleton-pair-insert-maybe 310@findex skeleton-pair-insert-maybe
311@vindex skeleton-pair 311@vindex skeleton-pair
312 This is done by binding the first key (@pxref{(emacs)Rebinding}) of 312 This is done by binding the first key (@pxref{Rebinding,,, emacs, The GNU Emacs Manual}) of
313the pair to @code{skeleton-pair-insert-maybe} instead of 313the pair to @code{skeleton-pair-insert-maybe} instead of
314@code{self-insert-command}. The ``maybe'' comes from the fact that 314@code{self-insert-command}. The ``maybe'' comes from the fact that
315this at-first surprising behavior is initially turned off. To enable 315this at-first surprising behavior is initially turned off. To enable
316it, you must set @code{skeleton-pair} to some non-@code{nil} value. 316it, you must set @code{skeleton-pair} to some non-@code{nil} value.
317And even then, a positive argument (@pxref{(emacs)Arguments}) will 317And even then, a positive argument (@pxref{Arguments,,, emacs, The GNU Emacs Manual}) will
318make this key behave like a self-inserting key 318make this key behave like a self-inserting key
319(@pxref{(emacs)Inserting Text}). 319(@pxref{Inserting Text,,, emacs, The GNU Emacs Manual}).
320 320
321@vindex skeleton-pair-on-word 321@vindex skeleton-pair-on-word
322 While this breaks with the stated intention of always balancing pairs, it 322 While this breaks with the stated intention of always balancing pairs, it
@@ -354,7 +354,7 @@ the buffer. The main application for this function, as its name suggests,
354is to have it be called automatically every time an empty, and only an 354is to have it be called automatically every time an empty, and only an
355empty file is visited. This is accomplished by putting @code{(add-hook 355empty file is visited. This is accomplished by putting @code{(add-hook
356'find-file-hook 'auto-insert)} into your @file{~/.emacs} file 356'find-file-hook 'auto-insert)} into your @file{~/.emacs} file
357(@pxref{(emacs)Init File}). 357(@pxref{Init File,,, emacs, The GNU Emacs Manual}).
358 358
359@vindex auto-insert-alist 359@vindex auto-insert-alist
360 What gets inserted, if anything, is determined by the variable 360 What gets inserted, if anything, is determined by the variable
@@ -392,10 +392,10 @@ source files insert the usual header, with a copyright of your
392environment variable @env{$ORGANIZATION} or else the FSF, and prompt 392environment variable @env{$ORGANIZATION} or else the FSF, and prompt
393for valid keywords describing the contents. Files in a @file{bin} 393for valid keywords describing the contents. Files in a @file{bin}
394directory for which Emacs could determine no specialized mode 394directory for which Emacs could determine no specialized mode
395(@pxref{(emacs)Choosing Modes}) are set to Shell script mode. 395(@pxref{Choosing Modes,,, emacs, The GNU Emacs Manual}) are set to Shell script mode.
396 396
397@findex define-auto-insert 397@findex define-auto-insert
398 In Lisp (@pxref{(emacs)Init File}) you can use the function 398 In Lisp (@pxref{Init File,,, emacs, The GNU Emacs Manual}) you can use the function
399@code{define-auto-insert} to add to or modify 399@code{define-auto-insert} to add to or modify
400@code{auto-insert-alist}. See its documentation with @kbd{C-h f 400@code{auto-insert-alist}. See its documentation with @kbd{C-h f
401define-auto-insert}. 401define-auto-insert}.
@@ -438,7 +438,7 @@ expression that matched the filename.
438 @kbd{M-x copyright} is a skeleton inserting command, that adds a copyright 438 @kbd{M-x copyright} is a skeleton inserting command, that adds a copyright
439notice at the point. The ``by'' part is taken from your environment variable 439notice at the point. The ``by'' part is taken from your environment variable
440@env{$ORGANIZATION} or if that isn't set you are prompted for it. If the 440@env{$ORGANIZATION} or if that isn't set you are prompted for it. If the
441buffer has a comment syntax (@pxref{(emacs)Comments}), this is inserted as a comment. 441buffer has a comment syntax (@pxref{Comments,,, emacs, The GNU Emacs Manual}), this is inserted as a comment.
442 442
443@findex copyright-update 443@findex copyright-update
444@vindex copyright-limit 444@vindex copyright-limit
@@ -450,13 +450,13 @@ existing ones, in the same format as the preceding year, i.e., 1994, '94 or 94.
450If a dash-separated year list up to last year is found, that is extended to 450If a dash-separated year list up to last year is found, that is extended to
451current year, else the year is added separated by a comma. Or it replaces 451current year, else the year is added separated by a comma. Or it replaces
452them when this is called with a prefix argument. If a header referring to a 452them when this is called with a prefix argument. If a header referring to a
453wrong version of the GNU General Public License (@pxref{(emacs)Copying}) is found, 453wrong version of the GNU General Public License (@pxref{Copying,,, emacs, The GNU Emacs Manual}) is found,
454that is updated too. 454that is updated too.
455 455
456 An interesting application for this function is to have it be called 456 An interesting application for this function is to have it be called
457automatically every time a file is saved. This is accomplished by 457automatically every time a file is saved. This is accomplished by
458putting @code{(add-hook 'before-save-hook 'copyright-update)} into 458putting @code{(add-hook 'before-save-hook 'copyright-update)} into
459your @file{~/.emacs} file (@pxref{(emacs)Init File}). Alternative, 459your @file{~/.emacs} file (@pxref{Init File,,, emacs, The GNU Emacs Manual}). Alternative,
460you can do @kbd{M-x customize-variable @key{RET} before-save-hook 460you can do @kbd{M-x customize-variable @key{RET} before-save-hook
461@key{RET}}. @code{copyright-update} is conveniently listed as an 461@key{RET}}. @code{copyright-update} is conveniently listed as an
462option in the customization buffer. 462option in the customization buffer.
diff --git a/doc/misc/bovine.texi b/doc/misc/bovine.texi
index f1a72f4cc3e..77c41e22777 100644
--- a/doc/misc/bovine.texi
+++ b/doc/misc/bovine.texi
@@ -138,7 +138,7 @@ of simplified Emacs Lisp expressions for concocting the parse tree.
138In bison, each time an element of @var{components} is found, it is 138In bison, each time an element of @var{components} is found, it is
139@dfn{shifted} onto the parser stack. (The stack of matched elements.) 139@dfn{shifted} onto the parser stack. (The stack of matched elements.)
140When all @var{components}' elements have been matched, it is 140When all @var{components}' elements have been matched, it is
141@dfn{reduced} to @var{result}. @xref{(bison)Algorithm}. 141@dfn{reduced} to @var{result}. @xref{Algorithm,,, bison, The GNU Bison Manual}.
142 142
143A particular @var{result} written into your grammar becomes 143A particular @var{result} written into your grammar becomes
144the parser's goal. It is designated by a @code{%start} statement 144the parser's goal. It is designated by a @code{%start} statement
@@ -368,8 +368,8 @@ Is the kind of tag being create, such as @code{function}, or
368@code{variable}, though any symbol will work. 368@code{variable}, though any symbol will work.
369 369
370@item attributes 370@item attributes
371Is an optional set of labeled values such as @w{@code{:constant-flag t :parent 371Is an optional set of labeled values such as @code{:constant-flag t :parent
372"parenttype"}}. 372"parenttype"}.
373@end table 373@end table
374 374
375@item (TAG-VARIABLE @var{name} @var{type} @var{default-value} [@var{attributes}]) 375@item (TAG-VARIABLE @var{name} @var{type} @var{default-value} [@var{attributes}])
diff --git a/doc/misc/ede.texi b/doc/misc/ede.texi
index 78fcefb9e76..cfa64feefec 100644
--- a/doc/misc/ede.texi
+++ b/doc/misc/ede.texi
@@ -1110,7 +1110,7 @@ superclasses. In this way, specific behaviors such as how a project
1110is saved, or how a target is compiled can be customized by a project 1110is saved, or how a target is compiled can be customized by a project
1111author in detail. @ede{} communicates to these project objects via an 1111author in detail. @ede{} communicates to these project objects via an
1112API using methods. The commands you use in @ede{} mode are high-level 1112API using methods. The commands you use in @ede{} mode are high-level
1113functional wrappers over these methods. @xref{(eieio)Top}. For 1113functional wrappers over these methods. @xref{Top,,, eieio, EIEIO manual}. For
1114details on using @eieio{} to extending classes, and writing methods. 1114details on using @eieio{} to extending classes, and writing methods.
1115 1115
1116If you intend to extend @ede{}, it is most likely that a new target type is 1116If you intend to extend @ede{}, it is most likely that a new target type is
@@ -1361,7 +1361,8 @@ association when a file is loaded. It is generally unnecessary to
1361override this unless you keep auxiliary files. 1361override this unless you keep auxiliary files.
1362@end table 1362@end table
1363 1363
1364These methods are used by the semantic package extensions @xref{(semantic)Top}. 1364These methods are used by the semantic package extensions.
1365@xref{Top,,, semantic, Semantic manual}.
1365 1366
1366@table @code 1367@table @code
1367@item ede-buffer-header-file 1368@item ede-buffer-header-file
diff --git a/doc/misc/eieio.texi b/doc/misc/eieio.texi
index f898a2b3319..3f1beff645a 100644
--- a/doc/misc/eieio.texi
+++ b/doc/misc/eieio.texi
@@ -446,7 +446,7 @@ that default value with @code{oset-default}. @ref{Accessing Slots}.
446 446
447@item :type 447@item :type
448An unquoted type specifier used to validate data set into this slot. 448An unquoted type specifier used to validate data set into this slot.
449@xref{(cl)Type Predicates}. 449@xref{Type Predicates,,,cl,Common Lisp Extensions}.
450Here are some examples: 450Here are some examples:
451 @table @code 451 @table @code
452 @item symbol 452 @item symbol
@@ -1571,7 +1571,7 @@ all these classes, subsection headings, and indexes.
1571 1571
1572Each class will be indexed using the texinfo labeled index 1572Each class will be indexed using the texinfo labeled index
1573@var{indexstring} which is a two letter description. 1573@var{indexstring} which is a two letter description.
1574@xref{(texinfo) New Indices}. 1574@xref{New Indices,,,texinfo,Texinfo manual}.
1575 1575
1576To use this command, the texinfo macro 1576To use this command, the texinfo macro
1577 1577
@@ -1874,8 +1874,9 @@ instead pre-builds a method that gets the slot's value.
1874 1874
1875@item :type 1875@item :type
1876Specifier uses the @code{typep} function from the @file{cl} 1876Specifier uses the @code{typep} function from the @file{cl}
1877package. @xref{(cl)Type Predicates}. It therefore has the same issues as 1877package. @xref{Type Predicates,,,cl,Common Lisp Extensions}.
1878that package. Extensions include the ability to provide object names. 1878It therefore has the same issues as that package. Extensions include
1879the ability to provide object names.
1879@end table 1880@end table
1880 1881
1881Defclass also supports class options, but does not currently use values 1882Defclass also supports class options, but does not currently use values
diff --git a/doc/misc/idlwave.texi b/doc/misc/idlwave.texi
index eb1820b2bfd..84675a52fee 100644
--- a/doc/misc/idlwave.texi
+++ b/doc/misc/idlwave.texi
@@ -4067,7 +4067,7 @@ sure you check the following things:
4067@itemize @bullet 4067@itemize @bullet
4068@item When you download the IDLWAVE distribution, make sure you save the 4068@item When you download the IDLWAVE distribution, make sure you save the
4069file under the names @file{idlwave.tar.gz}. 4069file under the names @file{idlwave.tar.gz}.
4070@item M-TAB switches among running programs --- use Esc-TAB 4070@item M-TAB switches among running programs---use Esc-TAB
4071instead. 4071instead.
4072@item Other issues as yet unnamed... 4072@item Other issues as yet unnamed...
4073@end itemize 4073@end itemize
diff --git a/doc/misc/pcl-cvs.texi b/doc/misc/pcl-cvs.texi
index 6c6d1d14bc0..104e4c06798 100644
--- a/doc/misc/pcl-cvs.texi
+++ b/doc/misc/pcl-cvs.texi
@@ -1169,13 +1169,13 @@ kill the contents of the buffer with @kbd{C-w}.
1169 1169
1170@findex log-edit-insert-changelog 1170@findex log-edit-insert-changelog
1171If you work by writing entries in the @file{ChangeLog} 1171If you work by writing entries in the @file{ChangeLog}
1172(@pxref{(emacs)Change Log}) and then commit the change under revision 1172(@pxref{Change Log,,, emacs, The GNU Emacs Manual}) and then commit the change under revision
1173control, you can generate the Log Edit text from the ChangeLog using 1173control, you can generate the Log Edit text from the ChangeLog using
1174@kbd{C-c C-a} (@kbd{log-edit-insert-changelog}). This looks for 1174@kbd{C-c C-a} (@kbd{log-edit-insert-changelog}). This looks for
1175entries for the file(s) concerned in the top entry in the ChangeLog 1175entries for the file(s) concerned in the top entry in the ChangeLog
1176and uses those paragraphs as the log text. This text is only inserted 1176and uses those paragraphs as the log text. This text is only inserted
1177if the top entry was made under your user name on the current date. 1177if the top entry was made under your user name on the current date.
1178@xref{(emacs)Change Logs and VC}, for the opposite way of 1178@xref{Change Logs and VC,,, emacs, The GNU Emacs Manual}, for the opposite way of
1179working---generating ChangeLog entries from the revision control log. 1179working---generating ChangeLog entries from the revision control log.
1180 1180
1181In the Log Edit buffer, @kbd{C-c C-f} (@kbd{M-x log-edit-show-files}) 1181In the Log Edit buffer, @kbd{C-c C-f} (@kbd{M-x log-edit-show-files})
diff --git a/doc/misc/viper.texi b/doc/misc/viper.texi
index b6e4b40976d..de54702adcd 100644
--- a/doc/misc/viper.texi
+++ b/doc/misc/viper.texi
@@ -1833,10 +1833,10 @@ replacement regions, you can change @code{viper-replace-overlay-face} by
1833specifying a new face. (Emacs faces are described in the Emacs Lisp 1833specifying a new face. (Emacs faces are described in the Emacs Lisp
1834reference.) On a color display, the following customization method is 1834reference.) On a color display, the following customization method is
1835usually most effective: 1835usually most effective:
1836@example 1836@smallexample
1837(set-face-foreground viper-replace-overlay-face "DarkSlateBlue") 1837(set-face-foreground viper-replace-overlay-face "DarkSlateBlue")
1838(set-face-background viper-replace-overlay-face "yellow") 1838(set-face-background viper-replace-overlay-face "yellow")
1839@end example 1839@end smallexample
1840For a complete list of colors available to you, evaluate the expression 1840For a complete list of colors available to you, evaluate the expression
1841@code{(x-defined-colors)}. (Type it in the buffer @code{*scratch*} and then 1841@code{(x-defined-colors)}. (Type it in the buffer @code{*scratch*} and then
1842hit the @kbd{C-j} key. 1842hit the @kbd{C-j} key.
@@ -2039,7 +2039,8 @@ can write this:
2039@noindent 2039@noindent
2040To customize the binding for @kbd{C-h} in Insert state: 2040To customize the binding for @kbd{C-h} in Insert state:
2041@example 2041@example
2042(define-key viper-insert-global-user-map "\C-h" 'my-del-backwards-function) 2042(define-key viper-insert-global-user-map "\C-h"
2043 'my-del-backwards-function)
2043@end example 2044@end example
2044@noindent 2045@noindent
2045 2046
@@ -2088,7 +2089,8 @@ Dired functions, the trick can be accomplished via the following code:
2088(setq my-dired-vi-purist-map (make-sparse-keymap)) 2089(setq my-dired-vi-purist-map (make-sparse-keymap))
2089(define-key my-dired-vi-purist-map "k" 'viper-previous-line) 2090(define-key my-dired-vi-purist-map "k" 'viper-previous-line)
2090(define-key my-dired-vi-purist-map "l" 'viper-forward-char) 2091(define-key my-dired-vi-purist-map "l" 'viper-forward-char)
2091(viper-modify-major-mode 'dired-mode 'emacs-state my-dired-vi-purist-map) 2092(viper-modify-major-mode 'dired-mode
2093 'emacs-state my-dired-vi-purist-map)
2092@end example 2094@end example
2093 2095
2094Yet another way to customize key bindings in a major mode is to edit the 2096Yet another way to customize key bindings in a major mode is to edit the
diff --git a/doc/misc/widget.texi b/doc/misc/widget.texi
index 4b920875b2c..8a442e4acc2 100644
--- a/doc/misc/widget.texi
+++ b/doc/misc/widget.texi
@@ -360,13 +360,14 @@ Interface}).
360 (setq widget-example-repeat 360 (setq widget-example-repeat
361 (widget-create 'editable-list 361 (widget-create 'editable-list
362 :entry-format "%i %d %v" 362 :entry-format "%i %d %v"
363 :notify (lambda (widget &rest ignore) 363 :notify
364 (let ((old (widget-get widget 364 (lambda (widget &rest ignore)
365 ':example-length)) 365 (let ((old (widget-get widget
366 (new (length (widget-value widget)))) 366 ':example-length))
367 (unless (eq old new) 367 (new (length (widget-value widget))))
368 (widget-put widget ':example-length new) 368 (unless (eq old new)
369 (message "You can count to %d." new)))) 369 (widget-put widget ':example-length new)
370 (message "You can count to %d." new))))
370 :value '("One" "Eh, two?" "Five!") 371 :value '("One" "Eh, two?" "Five!")
371 '(editable-field :value "three"))) 372 '(editable-field :value "three")))
372 (widget-insert "\n\nSelect multiple:\n\n") 373 (widget-insert "\n\nSelect multiple:\n\n")
@@ -383,11 +384,13 @@ Interface}).
383 :notify (lambda (widget &rest ignore) 384 :notify (lambda (widget &rest ignore)
384 (message "You selected %s" 385 (message "You selected %s"
385 (widget-value widget))) 386 (widget-value widget)))
386 '(item "One") '(item "Another One.") '(item "A Final One.")) 387 '(item "One") '(item "Another One.")
388 '(item "A Final One."))
387 (widget-insert "\n") 389 (widget-insert "\n")
388 (widget-create 'push-button 390 (widget-create 'push-button
389 :notify (lambda (&rest ignore) 391 :notify (lambda (&rest ignore)
390 (if (= (length (widget-value widget-example-repeat)) 392 (if (= (length
393 (widget-value widget-example-repeat))
391 3) 394 3)
392 (message "Congratulation!") 395 (message "Congratulation!")
393 (error "Three was the count!"))) 396 (error "Three was the count!")))
diff --git a/doc/misc/wisent.texi b/doc/misc/wisent.texi
index 877fa934423..bd12fe5ab8a 100644
--- a/doc/misc/wisent.texi
+++ b/doc/misc/wisent.texi
@@ -112,7 +112,7 @@ of the GNU Compiler Compiler Bison. Its code is a port of the C code
112of GNU Bison 1.28 & 1.31. 112of GNU Bison 1.28 & 1.31.
113 113
114For more details on the basic concepts for understanding Wisent, it is 114For more details on the basic concepts for understanding Wisent, it is
115worthwhile to read the @ref{Top, Bison Manual, bison}. 115worthwhile to read the @ref{Top, Bison Manual, , bison}.
116@ifhtml 116@ifhtml
117@uref{http://www.gnu.org/manual/bison/html_node/index.html}. 117@uref{http://www.gnu.org/manual/bison/html_node/index.html}.
118@end ifhtml 118@end ifhtml
@@ -302,7 +302,7 @@ If @var{components} in a rule is @code{nil}, it means that the rule
302can match the empty string. For example, here is how to define a 302can match the empty string. For example, here is how to define a
303comma-separated sequence of zero or more @samp{exp} groupings: 303comma-separated sequence of zero or more @samp{exp} groupings:
304 304
305@example 305@smallexample
306@group 306@group
307(expseq (nil) ;; expseq: ;; empty 307(expseq (nil) ;; expseq: ;; empty
308 ((expseq1)) ;; | expseq1 308 ((expseq1)) ;; | expseq1
@@ -312,7 +312,7 @@ comma-separated sequence of zero or more @samp{exp} groupings:
312 ((expseq1 ?, exp)) ;; | expseq1 ',' exp 312 ((expseq1 ?, exp)) ;; | expseq1 ',' exp
313 ) ;; ; 313 ) ;; ;
314@end group 314@end group
315@end example 315@end smallexample
316 316
317@cindex precedence level 317@cindex precedence level
318@item precedence 318@item precedence
@@ -339,7 +339,7 @@ serves to stand for its precedence:
339 339
340Now the precedence of @code{UMINUS} can be used in specific rules: 340Now the precedence of @code{UMINUS} can be used in specific rules:
341 341
342@example 342@smallexample
343@group 343@group
344(exp @dots{} ;; exp: @dots{} 344(exp @dots{} ;; exp: @dots{}
345 ((exp ?- exp)) ;; | exp '-' exp 345 ((exp ?- exp)) ;; | exp '-' exp
@@ -348,7 +348,7 @@ Now the precedence of @code{UMINUS} can be used in specific rules:
348 @dots{} ;; @dots{} 348 @dots{} ;; @dots{}
349 ) ;; ; 349 ) ;; ;
350@end group 350@end group
351@end example 351@end smallexample
352 352
353If you forget to append @code{[UMINUS]} to the rule for unary minus, 353If you forget to append @code{[UMINUS]} to the rule for unary minus,
354Wisent silently assumes that minus has its usual precedence. This 354Wisent silently assumes that minus has its usual precedence. This
@@ -1029,7 +1029,6 @@ state 8
1029 $default reduce using rule 2 (exp) 1029 $default reduce using rule 2 (exp)
1030 1030
1031 1031
1032
1033state 9 1032state 9
1034 1033
1035 exp -> exp . '+' exp (rule 1) 1034 exp -> exp . '+' exp (rule 1)
@@ -1044,7 +1043,6 @@ state 9
1044 $default reduce using rule 3 (exp) 1043 $default reduce using rule 3 (exp)
1045 1044
1046 1045
1047
1048state 10 1046state 10
1049 1047
1050 exp -> exp . '+' exp (rule 1) 1048 exp -> exp . '+' exp (rule 1)
diff --git a/etc/NEWS b/etc/NEWS
index 3c4a76b188e..eba45cebe0f 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1205,14 +1205,16 @@ takes precedence over most other maps for a short while (normally one key).
1205** Cygwin builds can use the native MS Windows user interface. 1205** Cygwin builds can use the native MS Windows user interface.
1206Pass --with-w32 to configure. The default remains the X11 interface. 1206Pass --with-w32 to configure. The default remains the X11 interface.
1207 1207
1208+++
1208** Two new functions are available in Cygwin builds: 1209** Two new functions are available in Cygwin builds:
1209`cygwin-convert-file-name-from-windows' and 1210`cygwin-convert-file-name-from-windows' and
1210`cygwin-convert-file-name-to-windows'. These functions allow Lisp 1211`cygwin-convert-file-name-to-windows'. These functions allow Lisp
1211code to access the Cygwin file-name mapping machinery to convert 1212code to access the Cygwin file-name mapping machinery to convert
1212between Cygwin and Windows-native file and directory names. 1213between Cygwin and Windows-native file and directory names.
1213 1214
1215---
1214** When invoked with the -nw switch to run on the Windows text-mode terminal, 1216** When invoked with the -nw switch to run on the Windows text-mode terminal,
1215Emacs now supports mouse highlight, help-echo (in the echo area), and 1217Emacs now supports `mouse-highlight', help-echo (in the echo area), and
1216`mouse-autoselect-window'. 1218`mouse-autoselect-window'.
1217 1219
1218+++ 1220+++
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 03122ff5000..f058c8632b7 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,17 @@
12012-12-27 Dmitry Gutov <dgutov@yandex.ru>
2
3 * progmodes/ruby-mode.el (ruby-indent-beg-re): Only allow "class",
4 "module" and "def" to have indentation before them. Regression
5 from 109911 (see the new test).
6
7 * progmodes/ruby-mode.el: Bump the version to 1.2 (Bug#13200).
8
92012-12-27 Alan Mackenzie <acm@muc.de>
10
11 Speed up fontification where there's large brace blocks.
12 * progmodes/cc-fonts.el (c-font-lock-enclosing-decls): Add a limit
13 to a call of c-beginning-of-decl-1.
14
12012-12-27 Vitalie Spinu <spinuvit@gmail.com> (tiny change) 152012-12-27 Vitalie Spinu <spinuvit@gmail.com> (tiny change)
2 16
3 * comint.el (comint-adjust-window-point): New function. 17 * comint.el (comint-adjust-window-point): New function.
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog
index d95c9cdee30..a830088f3b6 100644
--- a/lisp/gnus/ChangeLog
+++ b/lisp/gnus/ChangeLog
@@ -1,3 +1,15 @@
12012-12-27 Glenn Morris <rgm@gnu.org>
2
3 * plstore.el (plstore-passphrase-callback-function):
4 Use plstore-get-file.
5
62012-12-27 Andreas Schwab <schwab@linux-m68k.org>
7
8 * nnimap.el (nnimap-find-article-by-message-id):
9 Don't error out if group is nil.
10
11 * shr.el (shr-tag-em): Render as italic, not bold.
12
12012-12-26 Katsumi Yamaoka <yamaoka@jpl.org> 132012-12-26 Katsumi Yamaoka <yamaoka@jpl.org>
2 14
3 * mml2015.el (mml2015-epg-key-image): Use mm-set-buffer-multibyte. 15 * mml2015.el (mml2015-epg-key-image): Use mm-set-buffer-multibyte.
diff --git a/lisp/gnus/nnimap.el b/lisp/gnus/nnimap.el
index bc0818efa7c..38ece41ad37 100644
--- a/lisp/gnus/nnimap.el
+++ b/lisp/gnus/nnimap.el
@@ -980,7 +980,7 @@ textual parts.")
980(defun nnimap-find-article-by-message-id (group message-id) 980(defun nnimap-find-article-by-message-id (group message-id)
981 (with-current-buffer (nnimap-buffer) 981 (with-current-buffer (nnimap-buffer)
982 (erase-buffer) 982 (erase-buffer)
983 (unless (equal group (nnimap-group nnimap-object)) 983 (unless (or (not group) (equal group (nnimap-group nnimap-object)))
984 (setf (nnimap-group nnimap-object) nil) 984 (setf (nnimap-group nnimap-object) nil)
985 (setf (nnimap-examined nnimap-object) group) 985 (setf (nnimap-examined nnimap-object) group)
986 (nnimap-send-command "EXAMINE %S" (utf7-encode group t))) 986 (nnimap-send-command "EXAMINE %S" (utf7-encode group t)))
diff --git a/lisp/gnus/plstore.el b/lisp/gnus/plstore.el
index f130bfca853..b428cab64e3 100644
--- a/lisp/gnus/plstore.el
+++ b/lisp/gnus/plstore.el
@@ -126,8 +126,7 @@ symmetric encryption will be used.")
126 126
127(defun plstore-passphrase-callback-function (_context _key-id plstore) 127(defun plstore-passphrase-callback-function (_context _key-id plstore)
128 (if plstore-cache-passphrase-for-symmetric-encryption 128 (if plstore-cache-passphrase-for-symmetric-encryption
129 (let* ((file (file-truename (buffer-file-name 129 (let* ((file (file-truename (plstore-get-file plstore)))
130 (plstore--get-buffer plstore))))
131 (entry (assoc file plstore-passphrase-alist)) 130 (entry (assoc file plstore-passphrase-alist))
132 passphrase) 131 passphrase)
133 (or (copy-sequence (cdr entry)) 132 (or (copy-sequence (cdr entry))
diff --git a/lisp/progmodes/cc-fonts.el b/lisp/progmodes/cc-fonts.el
index 2d116e1ecdc..c29e2220211 100644
--- a/lisp/progmodes/cc-fonts.el
+++ b/lisp/progmodes/cc-fonts.el
@@ -1591,6 +1591,7 @@ casts and declarations are fontified. Used on level 2 and higher."
1591 ;; prevent a repeat invocation. See elisp/lispref page "Search-based 1591 ;; prevent a repeat invocation. See elisp/lispref page "Search-based
1592 ;; Fontification". 1592 ;; Fontification".
1593 (let* ((paren-state (c-parse-state)) 1593 (let* ((paren-state (c-parse-state))
1594 (decl-search-lim (c-determine-limit 1000))
1594 decl-context in-typedef ps-elt) 1595 decl-context in-typedef ps-elt)
1595 ;; Are we in any nested struct/union/class/etc. braces? 1596 ;; Are we in any nested struct/union/class/etc. braces?
1596 (while paren-state 1597 (while paren-state
@@ -1599,7 +1600,7 @@ casts and declarations are fontified. Used on level 2 and higher."
1599 (when (and (atom ps-elt) 1600 (when (and (atom ps-elt)
1600 (eq (char-after ps-elt) ?\{)) 1601 (eq (char-after ps-elt) ?\{))
1601 (goto-char ps-elt) 1602 (goto-char ps-elt)
1602 (setq decl-context (c-beginning-of-decl-1) 1603 (setq decl-context (c-beginning-of-decl-1 decl-search-lim)
1603 in-typedef (looking-at c-typedef-key)) 1604 in-typedef (looking-at c-typedef-key))
1604 (if in-typedef (c-forward-token-2)) 1605 (if in-typedef (c-forward-token-2))
1605 (when (and c-opt-block-decls-with-vars-key 1606 (when (and c-opt-block-decls-with-vars-key
diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el
index b223aece416..5cba1df3c8f 100644
--- a/lisp/progmodes/ruby-mode.el
+++ b/lisp/progmodes/ruby-mode.el
@@ -7,7 +7,7 @@
7;; URL: http://www.emacswiki.org/cgi-bin/wiki/RubyMode 7;; URL: http://www.emacswiki.org/cgi-bin/wiki/RubyMode
8;; Created: Fri Feb 4 14:49:13 JST 1994 8;; Created: Fri Feb 4 14:49:13 JST 1994
9;; Keywords: languages ruby 9;; Keywords: languages ruby
10;; Version: 1.0 10;; Version: 1.2
11 11
12;; This file is part of GNU Emacs. 12;; This file is part of GNU Emacs.
13 13
@@ -64,8 +64,9 @@
64 "Regexp to match keywords that nest without blocks.") 64 "Regexp to match keywords that nest without blocks.")
65 65
66(defconst ruby-indent-beg-re 66(defconst ruby-indent-beg-re
67 (concat "^\\s *" (regexp-opt '("class" "module" "def" "if" "unless" "case" 67 (concat "^\\(\\s *" (regexp-opt '("class" "module" "def")) "\\|"
68 "while" "until" "for" "begin")) "\\_>") 68 (regexp-opt '("if" "unless" "case" "while" "until" "for" "begin"))
69 "\\)\\_>")
69 "Regexp to match where the indentation gets deeper.") 70 "Regexp to match where the indentation gets deeper.")
70 71
71(defconst ruby-modifier-beg-keywords 72(defconst ruby-modifier-beg-keywords
diff --git a/src/ChangeLog b/src/ChangeLog
index d4794667ead..3fabe7579a9 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,23 @@
12012-12-27 Glenn Morris <rgm@gnu.org>
2
3 * cygw32.c (Fcygwin_convert_file_name_to_windows)
4 (Fcygwin_convert_file_name_from_windows): Doc fixes.
5
62012-12-27 Eli Zaretskii <eliz@gnu.org>
7
8 * fileio.c (file_name_as_directory, directory_file_name): Accept
9 an additional argument MULTIBYTE to indicate whether the input C
10 came from a multibyte or a unibyte Lisp string; all callers
11 adjusted. Don't assume the input string is always multibyte.
12 (Bug#13262)
13 (Ffile_name_directory) [DOS_NT]: Handle unibyte strings correctly:
14 don't ENCODE_FILE them, and return a unibyte string if the input
15 was unibyte.
16 (Fexpand_file_name): Don't mix unibyte with multibyte strings, and
17 don't assume the input strings will always be multibyte. If the
18 input strings are multibyte, decode strings obtained from C
19 library functions.
20
12012-12-26 Dmitry Antipov <dmantipov@yandex.ru> 212012-12-26 Dmitry Antipov <dmantipov@yandex.ru>
2 22
3 * lisp.h (toplevel): Add two notices to the comment about 23 * lisp.h (toplevel): Add two notices to the comment about
diff --git a/src/cygw32.c b/src/cygw32.c
index d9777d5e22e..5873a05dcf0 100644
--- a/src/cygw32.c
+++ b/src/cygw32.c
@@ -110,23 +110,25 @@ DEFUN ("cygwin-convert-file-name-to-windows",
110 Fcygwin_convert_file_name_to_windows, 110 Fcygwin_convert_file_name_to_windows,
111 Scygwin_convert_file_name_to_windows, 111 Scygwin_convert_file_name_to_windows,
112 1, 2, 0, 112 1, 2, 0,
113 doc: /* Convert PATH to a Windows path. If ABSOLUTE-P is 113 doc: /* Convert a Cygwin file name FILE to a Windows-style file name.
114non-nil, return an absolute path.*/) 114If ABSOLUTE-P is non-nil, return an absolute file name.
115 (Lisp_Object path, Lisp_Object absolute_p) 115For the reverse operation, see `cygwin-convert-file-name-from-windows'. */)
116 (Lisp_Object file, Lisp_Object absolute_p)
116{ 117{
117 return from_unicode ( 118 return from_unicode (
118 conv_filename_to_w32_unicode (path, EQ (absolute_p, Qnil) ? 0 : 1)); 119 conv_filename_to_w32_unicode (file, EQ (absolute_p, Qnil) ? 0 : 1));
119} 120}
120 121
121DEFUN ("cygwin-convert-file-name-from-windows", 122DEFUN ("cygwin-convert-file-name-from-windows",
122 Fcygwin_convert_file_name_from_windows, 123 Fcygwin_convert_file_name_from_windows,
123 Scygwin_convert_file_name_from_windows, 124 Scygwin_convert_file_name_from_windows,
124 1, 2, 0, 125 1, 2, 0,
125 doc: /* Convert a Windows path to a Cygwin path. If ABSOLUTE-P 126 doc: /* Convert a Windows-style file name FILE to a Cygwin file name.
126is non-nil, return an absolute path.*/) 127If ABSOLUTE-P is non-nil, return an absolute file name.
127 (Lisp_Object path, Lisp_Object absolute_p) 128For the reverse operation, see `cygwin-convert-file-name-to-windows'. */)
129 (Lisp_Object file, Lisp_Object absolute_p)
128{ 130{
129 return conv_filename_from_w32_unicode (to_unicode (path, &path), 131 return conv_filename_from_w32_unicode (to_unicode (file, &file),
130 EQ (absolute_p, Qnil) ? 0 : 1); 132 EQ (absolute_p, Qnil) ? 0 : 1);
131} 133}
132 134
diff --git a/src/fileio.c b/src/fileio.c
index 50fbaa7ff04..9f70c790592 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -379,12 +379,26 @@ Given a Unix syntax file name, returns a string ending in slash. */)
379 strcat (res, "/"); 379 strcat (res, "/");
380 beg = res; 380 beg = res;
381 p = beg + strlen (beg); 381 p = beg + strlen (beg);
382 dostounix_filename (beg);
383 tem_fn = make_specified_string (beg, -1, p - beg,
384 STRING_MULTIBYTE (filename));
382 } 385 }
386 else
387 tem_fn = make_specified_string (beg - 2, -1, p - beg + 2,
388 STRING_MULTIBYTE (filename));
389 }
390 else if (STRING_MULTIBYTE (filename))
391 {
392 tem_fn = ENCODE_FILE (make_specified_string (beg, -1, p - beg, 1));
393 dostounix_filename (SSDATA (tem_fn));
394 tem_fn = DECODE_FILE (tem_fn);
395 }
396 else
397 {
398 dostounix_filename (beg);
399 tem_fn = make_specified_string (beg, -1, p - beg, 0);
383 } 400 }
384 tem_fn = ENCODE_FILE (make_specified_string (beg, -1, p - beg, 401 return tem_fn;
385 STRING_MULTIBYTE (filename)));
386 dostounix_filename (SSDATA (tem_fn));
387 return DECODE_FILE (tem_fn);
388#else /* DOS_NT */ 402#else /* DOS_NT */
389 return make_specified_string (beg, -1, p - beg, STRING_MULTIBYTE (filename)); 403 return make_specified_string (beg, -1, p - beg, STRING_MULTIBYTE (filename));
390#endif /* DOS_NT */ 404#endif /* DOS_NT */
@@ -459,12 +473,14 @@ get a current directory to run processes in. */)
459 return Ffile_name_directory (filename); 473 return Ffile_name_directory (filename);
460} 474}
461 475
462/* Convert from file name SRC of length SRCLEN to directory name 476/* Convert from file name SRC of length SRCLEN to directory name in
463 in DST. On UNIX, just make sure there is a terminating /. 477 DST. MULTIBYTE non-zero means the file name in SRC is a multibyte
464 Return the length of DST in bytes. */ 478 string. On UNIX, just make sure there is a terminating /. Return
479 the length of DST in bytes. */
465 480
466static ptrdiff_t 481static ptrdiff_t
467file_name_as_directory (char *dst, const char *src, ptrdiff_t srclen) 482file_name_as_directory (char *dst, const char *src, ptrdiff_t srclen,
483 bool multibyte)
468{ 484{
469 if (srclen == 0) 485 if (srclen == 0)
470 { 486 {
@@ -483,14 +499,17 @@ file_name_as_directory (char *dst, const char *src, ptrdiff_t srclen)
483 srclen++; 499 srclen++;
484 } 500 }
485#ifdef DOS_NT 501#ifdef DOS_NT
486 { 502 if (multibyte)
487 Lisp_Object tem_fn = make_specified_string (dst, -1, srclen, 1); 503 {
504 Lisp_Object tem_fn = make_specified_string (dst, -1, srclen, 1);
488 505
489 tem_fn = ENCODE_FILE (tem_fn); 506 tem_fn = ENCODE_FILE (tem_fn);
490 dostounix_filename (SSDATA (tem_fn)); 507 dostounix_filename (SSDATA (tem_fn));
491 tem_fn = DECODE_FILE (tem_fn); 508 tem_fn = DECODE_FILE (tem_fn);
492 memcpy (dst, SSDATA (tem_fn), (srclen = SBYTES (tem_fn)) + 1); 509 memcpy (dst, SSDATA (tem_fn), (srclen = SBYTES (tem_fn)) + 1);
493 } 510 }
511 else
512 dostounix_filename (dst);
494#endif 513#endif
495 return srclen; 514 return srclen;
496} 515}
@@ -526,16 +545,18 @@ For a Unix-syntax file name, just appends a slash. */)
526 } 545 }
527 546
528 buf = alloca (SBYTES (file) + 10); 547 buf = alloca (SBYTES (file) + 10);
529 length = file_name_as_directory (buf, SSDATA (file), SBYTES (file)); 548 length = file_name_as_directory (buf, SSDATA (file), SBYTES (file),
549 STRING_MULTIBYTE (file));
530 return make_specified_string (buf, -1, length, STRING_MULTIBYTE (file)); 550 return make_specified_string (buf, -1, length, STRING_MULTIBYTE (file));
531} 551}
532 552
533/* Convert from directory name SRC of length SRCLEN to 553/* Convert from directory name SRC of length SRCLEN to file name in
534 file name in DST. On UNIX, just make sure there isn't 554 DST. MULTIBYTE non-zero means the file name in SRC is a multibyte
535 a terminating /. Return the length of DST in bytes. */ 555 string. On UNIX, just make sure there isn't a terminating /.
556 Return the length of DST in bytes. */
536 557
537static ptrdiff_t 558static ptrdiff_t
538directory_file_name (char *dst, char *src, ptrdiff_t srclen) 559directory_file_name (char *dst, char *src, ptrdiff_t srclen, bool multibyte)
539{ 560{
540 /* Process as Unix format: just remove any final slash. 561 /* Process as Unix format: just remove any final slash.
541 But leave "/" unchanged; do not change it to "". */ 562 But leave "/" unchanged; do not change it to "". */
@@ -551,14 +572,17 @@ directory_file_name (char *dst, char *src, ptrdiff_t srclen)
551 srclen--; 572 srclen--;
552 } 573 }
553#ifdef DOS_NT 574#ifdef DOS_NT
554 { 575 if (multibyte)
555 Lisp_Object tem_fn = make_specified_string (dst, -1, srclen, 1); 576 {
577 Lisp_Object tem_fn = make_specified_string (dst, -1, srclen, 1);
556 578
557 tem_fn = ENCODE_FILE (tem_fn); 579 tem_fn = ENCODE_FILE (tem_fn);
558 dostounix_filename (SSDATA (tem_fn)); 580 dostounix_filename (SSDATA (tem_fn));
559 tem_fn = DECODE_FILE (tem_fn); 581 tem_fn = DECODE_FILE (tem_fn);
560 memcpy (dst, SSDATA (tem_fn), (srclen = SBYTES (tem_fn)) + 1); 582 memcpy (dst, SSDATA (tem_fn), (srclen = SBYTES (tem_fn)) + 1);
561 } 583 }
584 else
585 dostounix_filename (dst);
562#endif 586#endif
563 return srclen; 587 return srclen;
564} 588}
@@ -594,7 +618,8 @@ In Unix-syntax, this function just removes the final slash. */)
594 } 618 }
595 619
596 buf = alloca (SBYTES (directory) + 20); 620 buf = alloca (SBYTES (directory) + 20);
597 length = directory_file_name (buf, SSDATA (directory), SBYTES (directory)); 621 length = directory_file_name (buf, SSDATA (directory), SBYTES (directory),
622 STRING_MULTIBYTE (directory));
598 return make_specified_string (buf, -1, length, STRING_MULTIBYTE (directory)); 623 return make_specified_string (buf, -1, length, STRING_MULTIBYTE (directory));
599} 624}
600 625
@@ -1044,7 +1069,7 @@ filesystem tree, not (expand-file-name ".." dirname). */)
1044 /* `egetenv' may return a unibyte string, which will bite us since 1069 /* `egetenv' may return a unibyte string, which will bite us since
1045 we expect the directory to be multibyte. */ 1070 we expect the directory to be multibyte. */
1046 tem = build_string (newdir); 1071 tem = build_string (newdir);
1047 if (!STRING_MULTIBYTE (tem)) 1072 if (multibyte && !STRING_MULTIBYTE (tem))
1048 { 1073 {
1049 hdir = DECODE_FILE (tem); 1074 hdir = DECODE_FILE (tem);
1050 newdir = SSDATA (hdir); 1075 newdir = SSDATA (hdir);
@@ -1066,7 +1091,18 @@ filesystem tree, not (expand-file-name ".." dirname). */)
1066 unblock_input (); 1091 unblock_input ();
1067 if (pw) 1092 if (pw)
1068 { 1093 {
1094 Lisp_Object tem;
1095
1069 newdir = pw->pw_dir; 1096 newdir = pw->pw_dir;
1097 /* `getpwnam' may return a unibyte string, which will
1098 bite us since we expect the directory to be
1099 multibyte. */
1100 tem = build_string (newdir);
1101 if (multibyte && !STRING_MULTIBYTE (tem))
1102 {
1103 hdir = DECODE_FILE (tem);
1104 newdir = SSDATA (hdir);
1105 }
1070 nm = p; 1106 nm = p;
1071#ifdef DOS_NT 1107#ifdef DOS_NT
1072 collapse_newdir = 0; 1108 collapse_newdir = 0;
@@ -1090,6 +1126,13 @@ filesystem tree, not (expand-file-name ".." dirname). */)
1090 adir = alloca (MAXPATHLEN + 1); 1126 adir = alloca (MAXPATHLEN + 1);
1091 if (!getdefdir (c_toupper (drive) - 'A' + 1, adir)) 1127 if (!getdefdir (c_toupper (drive) - 'A' + 1, adir))
1092 adir = NULL; 1128 adir = NULL;
1129 else if (multibyte)
1130 {
1131 Lisp_Object tem = build_string (adir);
1132
1133 tem = DECODE_FILE (tem);
1134 memcpy (adir, SSDATA (tem), SBYTES (tem) + 1);
1135 }
1093 } 1136 }
1094 if (!adir) 1137 if (!adir)
1095 { 1138 {
@@ -1148,6 +1191,7 @@ filesystem tree, not (expand-file-name ".." dirname). */)
1148 indirectly by prepending newdir to nm if necessary, and using 1191 indirectly by prepending newdir to nm if necessary, and using
1149 cwd (or the wd of newdir's drive) as the new newdir. */ 1192 cwd (or the wd of newdir's drive) as the new newdir. */
1150 char *adir; 1193 char *adir;
1194
1151 if (IS_DRIVE (newdir[0]) && IS_DEVICE_SEP (newdir[1])) 1195 if (IS_DRIVE (newdir[0]) && IS_DEVICE_SEP (newdir[1]))
1152 { 1196 {
1153 drive = (unsigned char) newdir[0]; 1197 drive = (unsigned char) newdir[0];
@@ -1157,7 +1201,7 @@ filesystem tree, not (expand-file-name ".." dirname). */)
1157 { 1201 {
1158 ptrdiff_t newlen = strlen (newdir); 1202 ptrdiff_t newlen = strlen (newdir);
1159 char *tmp = alloca (newlen + strlen (nm) + 2); 1203 char *tmp = alloca (newlen + strlen (nm) + 2);
1160 file_name_as_directory (tmp, newdir, newlen); 1204 file_name_as_directory (tmp, newdir, newlen, multibyte);
1161 strcat (tmp, nm); 1205 strcat (tmp, nm);
1162 nm = tmp; 1206 nm = tmp;
1163 } 1207 }
@@ -1165,10 +1209,17 @@ filesystem tree, not (expand-file-name ".." dirname). */)
1165 if (drive) 1209 if (drive)
1166 { 1210 {
1167 if (!getdefdir (c_toupper (drive) - 'A' + 1, adir)) 1211 if (!getdefdir (c_toupper (drive) - 'A' + 1, adir))
1168 newdir = "/"; 1212 strcpy (adir, "/");
1169 } 1213 }
1170 else 1214 else
1171 getcwd (adir, MAXPATHLEN + 1); 1215 getcwd (adir, MAXPATHLEN + 1);
1216 if (multibyte)
1217 {
1218 Lisp_Object tem = build_string (adir);
1219
1220 tem = DECODE_FILE (tem);
1221 memcpy (adir, SSDATA (tem), SBYTES (tem) + 1);
1222 }
1172 newdir = adir; 1223 newdir = adir;
1173 } 1224 }
1174 1225
@@ -1255,7 +1306,7 @@ filesystem tree, not (expand-file-name ".." dirname). */)
1255 strcpy (target, newdir); 1306 strcpy (target, newdir);
1256 } 1307 }
1257 else 1308 else
1258 file_name_as_directory (target, newdir, length); 1309 file_name_as_directory (target, newdir, length, multibyte);
1259 } 1310 }
1260 1311
1261 strcat (target, nm); 1312 strcat (target, nm);
@@ -1341,9 +1392,14 @@ filesystem tree, not (expand-file-name ".." dirname). */)
1341 target[1] = ':'; 1392 target[1] = ':';
1342 } 1393 }
1343 result = make_specified_string (target, -1, o - target, multibyte); 1394 result = make_specified_string (target, -1, o - target, multibyte);
1344 result = ENCODE_FILE (result); 1395 if (multibyte)
1345 dostounix_filename (SSDATA (result)); 1396 {
1346 result = DECODE_FILE (result); 1397 result = ENCODE_FILE (result);
1398 dostounix_filename (SSDATA (result));
1399 result = DECODE_FILE (result);
1400 }
1401 else
1402 dostounix_filename (SSDATA (result));
1347#else /* !DOS_NT */ 1403#else /* !DOS_NT */
1348 result = make_specified_string (target, -1, o - target, multibyte); 1404 result = make_specified_string (target, -1, o - target, multibyte);
1349#endif /* !DOS_NT */ 1405#endif /* !DOS_NT */
@@ -1625,18 +1681,24 @@ those `/' is discarded. */)
1625 memcpy (nm, SDATA (filename), SBYTES (filename) + 1); 1681 memcpy (nm, SDATA (filename), SBYTES (filename) + 1);
1626 1682
1627#ifdef DOS_NT 1683#ifdef DOS_NT
1628 { 1684 if (multibyte)
1629 Lisp_Object encoded_filename = ENCODE_FILE (filename); 1685 {
1630 Lisp_Object tem_fn; 1686 Lisp_Object encoded_filename = ENCODE_FILE (filename);
1631 1687 Lisp_Object tem_fn;
1632 dostounix_filename (SDATA (encoded_filename)); 1688
1633 tem_fn = DECODE_FILE (encoded_filename); 1689 dostounix_filename (SDATA (encoded_filename));
1634 nm = alloca (SBYTES (tem_fn) + 1); 1690 tem_fn = DECODE_FILE (encoded_filename);
1635 memcpy (nm, SDATA (tem_fn), SBYTES (tem_fn) + 1); 1691 nm = alloca (SBYTES (tem_fn) + 1);
1636 substituted = (memcmp (nm, SDATA (filename), SBYTES (filename)) != 0); 1692 memcpy (nm, SDATA (tem_fn), SBYTES (tem_fn) + 1);
1637 if (substituted) 1693 substituted = (memcmp (nm, SDATA (filename), SBYTES (filename)) != 0);
1638 filename = tem_fn; 1694 if (substituted)
1639 } 1695 filename = tem_fn;
1696 }
1697 else
1698 {
1699 dostounix_filename (nm);
1700 substituted = (memcmp (nm, SDATA (filename), SBYTES (filename)) != 0);
1701 }
1640#endif 1702#endif
1641 endp = nm + SBYTES (filename); 1703 endp = nm + SBYTES (filename);
1642 1704
diff --git a/test/ChangeLog b/test/ChangeLog
index e7e7c755d02..7d9b10ce787 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,8 @@
12012-12-27 Dmitry Gutov <dgutov@yandex.ru>
2
3 * automated/ruby-mode-tests.el
4 (ruby-indent-after-block-in-continued-expression): New test.
5
12012-12-14 Dmitry Gutov <dgutov@yandex.ru> 62012-12-14 Dmitry Gutov <dgutov@yandex.ru>
2 7
3 * automated/ruby-mode-tests.el 8 * automated/ruby-mode-tests.el
diff --git a/test/automated/ruby-mode-tests.el b/test/automated/ruby-mode-tests.el
index 1f0c0ab6f9e..51c28e667fd 100644
--- a/test/automated/ruby-mode-tests.el
+++ b/test/automated/ruby-mode-tests.el
@@ -224,6 +224,19 @@ VALUES-PLIST is a list with alternating index and value elements."
224 | end 224 | end
225 |")) 225 |"))
226 226
227(ert-deftest ruby-indent-after-block-in-continued-expression ()
228 (ruby-should-indent-buffer
229 "var =
230 | begin
231 | val
232 | end
233 |statement"
234 "var =
235 |begin
236 |val
237 |end
238 |statement"))
239
227(ert-deftest ruby-move-to-block-stops-at-indentation () 240(ert-deftest ruby-move-to-block-stops-at-indentation ()
228 (ruby-with-temp-buffer "def f\nend" 241 (ruby-with-temp-buffer "def f\nend"
229 (beginning-of-line) 242 (beginning-of-line)