Merge from emacs-24; up to 2012-11-15T23:31:37Z!dancol@dancol.org

This commit is contained in:
Glenn Morris 2012-11-17 17:52:36 -08:00
commit 2ac9538d67
24 changed files with 277 additions and 65 deletions

View file

@ -1,3 +1,7 @@
2012-11-18 Dani Moncayo <dmoncayo@gmail.com>
* mark.texi (Disabled Transient Mark): Doc fixes (Bug#12746).
2012-11-16 Eli Zaretskii <eliz@gnu.org>
* trouble.texi (Crashing): Add information about MS-Windows and

View file

@ -429,10 +429,6 @@ soon, before you forget where it is. You can also check where the
mark is by using @kbd{C-x C-x}, which exchanges the positions of the
point and the mark (@pxref{Setting Mark}).
@item
Many commands that move point long distances, like @kbd{M-<} and
@kbd{C-s}, first set the mark where point was.
@item
Some commands, which ordinarily act on the region when the mark is
active, no longer do so. For example, normally @kbd{M-%}
@ -455,9 +451,10 @@ command twice.)
@item C-u C-x C-x
@kindex C-u C-x C-x
Activate the mark and enable Transient Mark mode temporarily, until
the mark is next deactivated. (This is the @kbd{C-x C-x} command,
@code{exchange-point-and-mark}, with a prefix argument.)
Exchange point and mark, activate the mark and enable Transient Mark
mode temporarily, until the mark is next deactivated. (This is the
@kbd{C-x C-x} command, @code{exchange-point-and-mark}, with a prefix
argument.)
@end table
These commands set or activate the mark, and enable Transient Mark

View file

@ -1,3 +1,24 @@
2012-11-18 Glenn Morris <rgm@gnu.org>
* loading.texi (How Programs Do Loading): Add eager macro expansion.
* macros.texi (Expansion): Mention eager macro expansion.
* minibuf.texi (Basic Completion): Mention misc completion-table funcs.
2012-11-18 Leo Liu <sdl.web@gmail.com>
* minibuf.texi (Programmed Completion): Doc fix for metadata
request (Bug#12850).
2012-11-18 Glenn Morris <rgm@gnu.org>
* display.texi (Temporary Displays): Document with-temp-buffer-window.
* frames.texi (Size and Position): Add fit-frame-to-buffer command.
* windows.texi (Resizing Windows): Add fit-frame-to-buffer option.
(Window Sizes): Add vindex for window-min-height, window-min-width.
(Display Action Functions): Mention pop-up-frame-parameters.
2012-11-16 Martin Rudalics <rudalics@gmx.at>
* windows.texi (Choosing Window): Rewrite description of

View file

@ -1078,7 +1078,8 @@ editing. Many help commands use this feature.
This function executes @var{forms} while arranging to insert any output
they print into the buffer named @var{buffer-name}, which is first
created if necessary, and put into Help mode. Finally, the buffer is
displayed in some window, but not selected.
displayed in some window, but not selected. (See the similar
form @code{with-temp-buffer-window} below.)
If the @var{forms} do not change the major mode in the output buffer,
so that it is still Help mode at the end of their execution, then
@ -1152,6 +1153,37 @@ displaying the temporary buffer. When the hook runs, the temporary buffer
is current, and the window it was displayed in is selected.
@end defvar
@defmac with-temp-buffer-window buffer-or-name action quit-function forms@dots{}
This macro is similar to @code{with-output-to-temp-buffer}.
Like that construct, it executes @var{forms} while arranging to insert
any output they print into the buffer named @var{buffer-or-name}.
Finally, the buffer is displayed in some window, but not selected.
Unlike @code{with-output-to-temp-buffer}, this does not switch to Help
mode.
The argument @var{buffer-or-name} specifies the temporary buffer.
It can be either a buffer, which must already exist, or a string,
in which case a buffer of that name is created if necessary.
The buffer is marked as unmodified and read-only when
@code{with-temp-buffer-window} exits.
This macro does not call @code{temp-buffer-show-function}. Rather, it
passes the @var{action} argument to @code{display-buffer} in order to
display the buffer.
The value of the last form in @var{forms} is returned, unless the
argument @var{quit-function} is specified. In that case,
it is called with two arguments: the window showing the buffer
and the result of @var{forms}. The final return value is then
whatever @var{quit-function} returns.
@vindex temp-buffer-window-setup-hook
@vindex temp-buffer-window-show-hook
This macro uses the normal hooks @code{temp-buffer-window-setup-hook}
and @code{temp-buffer-window-show-hook} in place of the analogous hooks
run by @code{with-output-to-temp-buffer}.
@end defmac
@defun momentary-string-display string position &optional char message
This function momentarily displays @var{string} in the current buffer at
@var{position}. It has no effect on the undo list or on the buffer's

View file

@ -1113,6 +1113,21 @@ The argument @var{pretend} has the same meaning as in
@code{set-frame-height}.
@end defun
@c FIXME? Belongs more in Emacs manual than here?
@c But eg fit-window-to-buffer is in this manual.
@deffn Command fit-frame-to-buffer &optional frame max-height min-height
This command adjusts the height of @var{frame} (the default is the
selected frame) to fit its contents. The optional arguments
@var{max-height} and @var{min-height} specify the maximum and minimum
new frame heights, respectively.
@vindex fit-frame-to-buffer-bottom-margin
The default minimum height corresponds to @code{window-min-height}.
The default maximum height is the screen height below the current top
position of the frame, minus any margin specified by the option
@code{fit-frame-to-buffer-bottom-margin}.
@end deffn
@node Geometry
@subsection Geometry

View file

@ -113,6 +113,25 @@ When loading a source file (not compiled), @code{load} performs
character set translation just as Emacs would do when visiting the file.
@xref{Coding Systems}.
@c This is referred to from the Macros chapter.
@c Not sure if it should be the other way round.
@cindex eager macro expansion
When loading an uncompiled file, Emacs tries to expand any macros
that the file contains (@pxref{Macros}). We refer to this as
@dfn{eager macro expansion}. Doing this (rather than deferring
the expansion until the relevant code runs) can significantly speed
up the execution of uncompiled code. Sometimes, this macro expansion
cannot be done, owing to a cyclic dependency. In the simplest
example of this, the file you are loading refers to a macro defined
in another file, and that file in turn requires the file you are
loading. This is generally harmless. Emacs prints a warning
(@samp{Eager macro-expansion skipped due to cycle@dots{}})
giving details of the problem, but it still loads the file, just
leaving the macro unexpanded for now. You may wish to restructure
your code so that this does not happen. Loading a compiled file does
not cause macroexpansion, because this should already have happened
during compilation. @xref{Compiling Macros}.
Messages like @samp{Loading foo...} and @samp{Loading foo...done} appear
in the echo area during loading unless @var{nomessage} is
non-@code{nil}.

View file

@ -86,6 +86,10 @@ macro.
calls to other macros. It may even be a call to the same macro, though
this is unusual.
Note that Emacs tries to expand macros when loading an uncompiled
Lisp file. This is not always possible, but if it is, it speeds up
subsequent execution. @xref{How Programs Do Loading}.
You can see the expansion of a given macro call by calling
@code{macroexpand}.

View file

@ -886,6 +886,26 @@ Here is an example:
@end smallexample
@end defmac
@c FIXME? completion-table-with-context?
@findex completion-table-case-fold
@findex completion-table-in-turn
@findex completion-table-subvert
@findex completion-table-with-quoting
@findex completion-table-with-predicate
@findex completion-table-with-terminator
@cindex completion table, modifying
@cindex completion tables, combining
There are several functions that take an existing completion table and
return a modified version. @code{completion-table-case-fold} returns
a case-insensitive table. @code{completion-table-in-turn} combines
multiple input tables. @code{completion-table-subvert} alters a table
to use a different initial prefix. @code{completion-table-with-quoting}
returns a table suitable for operating on quoted text.
@code{completion-table-with-predicate} filters a table with a
predicate function. @code{completion-table-with-terminator} adds a
terminating string.
@node Minibuffer Completion
@subsection Completion and the Minibuffer
@cindex minibuffer completion
@ -1710,8 +1730,9 @@ string, and @var{end} is the position of the end boundary in
@item metadata
This specifies a request for information about the state of the
current completion. The function should return an alist, as described
below. The alist may contain any number of elements.
current completion. The return value should have the form
@code{(metadata . @var{alist})}, where @var{alist} is an alist whose
elements are described below.
@end table
@noindent

View file

@ -490,6 +490,8 @@ partially-visible line at the bottom of the text area is not counted.
aliases are considered obsolete and will be removed in the future.
@cindex fixed-size window
@vindex window-min-height
@vindex window-min-width
Commands that change the size of windows (@pxref{Resizing Windows}),
or split them (@pxref{Splitting Windows}), obey the variables
@code{window-min-height} and @code{window-min-width}, which specify
@ -633,6 +635,10 @@ variable @code{window-min-height}.
If the optional argument @var{override} is non-@code{nil}, this
function ignores any size restrictions imposed by
@code{window-min-height} and @code{window-min-width}.
@vindex fit-frame-to-buffer
If the option @code{fit-frame-to-buffer} is non-@code{nil}, this
command may resize the frame to fit its contents.
@end deffn
@deffn Command shrink-window-if-larger-than-buffer &optional window
@ -1926,7 +1932,9 @@ entry (@pxref{Choosing Window Options}), raises that frame if necessary.
This function creates a new frame, and displays the buffer in that
frame's window. It actually performs the frame creation by calling
the function specified in @code{pop-up-frame-function}
(@pxref{Choosing Window Options}).
(@pxref{Choosing Window Options}). If @var{alist} contains a
@code{pop-up-frame-parameters} entry, the associated value
is added to the newly created frame's parameters.
@end defun
@defun display-buffer-pop-up-window buffer alist

View file

@ -858,15 +858,10 @@ More commands use `read-regexp' now to read their regexp arguments.
*** New function `completion-table-with-quoting' to handle completion
in the presence of quoting, such as file completion in shell buffers.
+++
*** New function `completion-table-subvert' to use an existing completion
table, but with a different prefix.
FIXME?
*** There are several other completion-table- functions that never got
added to NEWS or documented: completion-table-case-fold (24.1),
completion-table-with-context (23,1), completion-table-with-terminator (23.1),
completion-table-with-predicate (23.1), completion-table-in-turn (23.1)
** Debugger changes
+++
@ -892,14 +887,19 @@ now accept a third argument to avoid choosing the selected window.
+++
*** Additional values recognized for option `window-combination-limit'.
*** New macro `with-temp-buffer-window'.
+++
*** New macro `with-temp-buffer-window', similar to
`with-output-to-temp-buffer'.
---
*** `temp-buffer-resize-mode' no longer resizes windows that have been
reused.
+++
*** New command `fit-frame-to-buffer' adjusts the frame height to
fit the contents.
+++
*** The command `fit-window-to-buffer' can adjust the frame height
if the new option `fit-frame-to-buffer' is non-nil.
@ -909,11 +909,11 @@ window's point when switching buffers.
+++
*** New display action functions `display-buffer-below-selected',
and `display-buffer-in-previous-window'.
+++
*** New display action alist entry `inhibit-switch-frame', if non-nil,
tells display action functions to avoid changing which frame is
selected.
+++
*** New display action alist entry `pop-up-frame-parameters', if
non-nil, specifies frame parameters to give any newly-created frame.
+++
@ -969,13 +969,14 @@ Previously, they returned NaNs on some platforms but signaled errors
on others. The affected functions are acos, asin, tan, exp, expt,
log, log10, sqrt, and mod.
** Interpreted files are eagerly macro-expanded during load.
+++
** Emacs tries to macroexpand interpreted (non-compiled) files during load.
This can significantly speed up execution of non-byte-compiled code,
but can also bump into harmless and previously unnoticed cyclic
dependencies. These should not be fatal: they will simply cause the
macro-calls to be left for later expansion (as before), but will also
result in a warning ("Eager macro-expansion skipped due to cycle")
describing the cycle.
but can also bump into previously unnoticed cyclic dependencies.
These are generally harmless: they will simply cause the macro calls
to be left for later expansion (as before), but will result in a
warning ("Eager macro-expansion skipped due to cycle") describing the cycle.
You may wish to restructure your code so this does not happen.
** Miscellaneous new functions:
+++

View file

@ -1,3 +1,31 @@
2012-11-18 Glenn Morris <rgm@gnu.org>
* image.el (insert-image, insert-sliced-image): Doc fix.
2012-11-18 Chong Yidong <cyd@gnu.org>
* emacs-lisp/syntax.el (syntax-propertize-function): Doc fix
(Bug#12810).
2012-11-18 OKAZAKI Tetsurou <okazaki.tetsurou@gmail.com> (tiny change)
* vc/vc-svn.el (vc-svn-merge-news): Properly parse the merge
response when the target file is in a subdirectory (Bug#12757).
2012-11-18 Chong Yidong <cyd@gnu.org>
* filecache.el (file-cache-add-file-list): Doc fix (Bug#12694).
2012-11-18 Glenn Morris <rgm@gnu.org>
* woman.el (woman-non-underline-faces):
* emacs-lisp/cl-lib.el (face-underline-p):
Use set-face-underline rather than the alias set-face-underline-p.
* window.el (with-temp-buffer-window): Doc fix.
* subr.el (with-output-to-temp-buffer):
Add doc xref to with-temp-buffer-window.
2012-11-18 Juanma Barranquero <lekktu@gmail.com>
* woman.el (woman-non-underline-faces): Use `set-face-underline'.

View file

@ -661,7 +661,7 @@ If ALIST is non-nil, the new pairs are prepended to it."
(gv-define-setter face-foreground (x f &optional s)
`(set-face-foreground ,f ,x ,s))
(gv-define-setter face-underline-p (x f &optional s)
`(set-face-underline-p ,f ,x ,s))
`(set-face-underline ,f ,x ,s))
(gv-define-simple-setter file-modes set-file-modes t)
(gv-define-simple-setter frame-height set-screen-height t)
(gv-define-simple-setter frame-parameters modify-frame-parameters t)

View file

@ -55,12 +55,18 @@
;; have to flush that cache between each function, and we couldn't use
;; syntax-ppss-flush-cache since that would not only flush the cache but also
;; reset syntax-propertize--done which should not be done in this case).
"Mode-specific function to apply the syntax-table properties.
Called with two arguments: START and END.
This function can call `syntax-ppss' on any position before END, but it
should not call `syntax-ppss-flush-cache', which means that it should not
call `syntax-ppss' on some position and later modify the buffer on some
earlier position.")
"Mode-specific function to apply `syntax-table' text properties.
The value of this variable is a function to be called by Font
Lock mode, prior to performing syntactic fontification on a
stretch of text. It is given two arguments, START and END: the
start and end of the text to be fontified. Major modes can
specify a custom function to apply `syntax-table' properties to
override the default syntax table in special cases.
The specified function may call `syntax-ppss' on any position
before END, but it should not call `syntax-ppss-flush-cache',
which means that it should not call `syntax-ppss' on some
position and later modify the buffer on some earlier position.")
(defvar syntax-propertize-chunk-size 500)
@ -118,7 +124,7 @@ The arg RULES can be of the same form as in `syntax-propertize-rules'.
The return value is an object that can be passed as a rule to
`syntax-propertize-rules'.
I.e. this is useful only when you want to share rules among several
syntax-propertize-functions."
`syntax-propertize-function's."
(declare (debug syntax-propertize-rules))
;; Precompile? Yeah, right!
;; Seriously, tho, this is a macro for 2 reasons:

View file

@ -300,7 +300,9 @@ files in each directory, not to the directory list itself."
directory-list))
(defun file-cache-add-file-list (file-list)
"Add FILE-LIST (a list of files names) to the file cache."
"Add FILE-LIST (a list of file names) to the file cache.
Interactively, FILE-LIST is read as a Lisp expression, which
should evaluate to the desired list of file names."
(interactive "XFile List: ")
(mapcar 'file-cache-add-file file-list))

View file

@ -429,7 +429,7 @@ means display it in the right marginal area."
"Insert IMAGE into current buffer at point.
IMAGE is displayed by inserting STRING into the current buffer
with a `display' property whose value is the image. STRING
defaults to the empty string if you omit it.
defaults to a single space if you omit it.
AREA is where to display the image. AREA nil or omitted means
display it in the text area, a value of `left-margin' means
display it in the left marginal area, a value of `right-margin'
@ -467,8 +467,8 @@ height of the image; integer values are taken as pixel values."
(defun insert-sliced-image (image &optional string area rows cols)
"Insert IMAGE into current buffer at point.
IMAGE is displayed by inserting STRING into the current buffer
with a `display' property whose value is the image. STRING is
defaulted if you omit it.
with a `display' property whose value is the image. The default
STRING is a single space.
AREA is where to display the image. AREA nil or omitted means
display it in the text area, a value of `left-margin' means
display it in the left marginal area, a value of `right-margin'

View file

@ -3189,6 +3189,7 @@ in which case `save-window-excursion' cannot help."
;; Return nil.
nil)
;; Doc is very similar to with-temp-buffer-window.
(defmacro with-output-to-temp-buffer (bufname &rest body)
"Bind `standard-output' to buffer BUFNAME, eval BODY, then show that buffer.
@ -3214,7 +3215,9 @@ with the buffer BUFNAME temporarily current. It runs the hook
`temp-buffer-show-hook' after displaying buffer BUFNAME, with that
buffer temporarily current, and the window that was used to display it
temporarily selected. But it doesn't run `temp-buffer-show-hook'
if it uses `temp-buffer-show-function'."
if it uses `temp-buffer-show-function'.
See the related form `with-temp-buffer-window'."
(declare (debug t))
(let ((old-dir (make-symbol "old-dir"))
(buf (make-symbol "buf")))

View file

@ -48,7 +48,7 @@
(defun url-path-and-query (urlobj)
"Return the path and query components of URLOBJ.
These two components are store together in the FILENAME slot of
These two components are stored together in the FILENAME slot of
the object. The return value of this function is (PATH . QUERY),
where each of PATH and QUERY are strings or nil."
(let ((name (url-filename urlobj))

View file

@ -414,7 +414,7 @@ The changes are between FIRST-VERSION and SECOND-VERSION."
;; We also used to match the filename in column 0 without any
;; meta-info before it, but I believe this can never happen.
(concat "^\\(\\([ACGDU]\\)\\(.[B ]\\)? \\)"
(regexp-quote (file-name-nondirectory file)))
(regexp-quote (file-relative-name file)))
nil t)
(cond
;; Merge successful, we are in sync with repository now

View file

@ -142,41 +142,46 @@ to `display-buffer'."
;; Return the window.
window))))
;; Doc is very similar to with-output-to-temp-buffer.
(defmacro with-temp-buffer-window (buffer-or-name action quit-function &rest body)
"Evaluate BODY and display the buffer specified by BUFFER-OR-NAME.
"Bind `standard-output' to BUFFER-OR-NAME, eval BODY, show the buffer.
BUFFER-OR-NAME must specify either a live buffer, or the name of a
buffer (if it does not exist, this macro creates it).
Make sure the specified buffer is empty before evaluating BODY.
Do not make that buffer current for BODY. Instead, bind
`standard-output' to that buffer, so that output generated with
`prin1' and similar functions in BODY goes into that buffer.
This construct makes buffer BUFFER-OR-NAME empty before running BODY.
It does not make the buffer current for BODY.
Instead it binds `standard-output' to that buffer, so that output
generated with `prin1' and similar functions in BODY goes into
the buffer.
After evaluating BODY, this marks the specified buffer unmodified and
read-only, and displays it in a window via `display-buffer', passing
ACTION as the action argument to `display-buffer'. It automatically
shrinks the relevant window if `temp-buffer-resize-mode' is enabled.
At the end of BODY, this marks the specified buffer unmodified and
read-only, and displays it in a window (but does not select it, or make
the buffer current). The display happens by calling `display-buffer'
with the ACTION argument. If `temp-buffer-resize-mode' is enabled,
the relevant window shrinks automatically.
Returns the value returned by BODY, unless QUIT-FUNCTION specifies
a function. In that case, runs the function with two arguments -
This returns the value returned by BODY, unless QUIT-FUNCTION specifies
a function. In that case, it runs the function with two arguments -
the window showing the specified buffer and the value returned by
BODY - and returns the value returned by that function.
If the buffer is displayed on a new frame, the window manager may
decide to select that frame. In that case, it's usually a good
strategy if the function specified by QUIT-FUNCTION selects the
window showing the buffer before reading a value from the
minibuffer; for example, when asking a `yes-or-no-p' question.
strategy if QUIT-FUNCTION selects the window showing the buffer
before reading any value from the minibuffer; for example, when
asking a `yes-or-no-p' question.
This construct is similar to `with-output-to-temp-buffer', but does
not put the buffer in help mode, or call `temp-buffer-show-function'.
It also runs different hooks, namely `temp-buffer-window-setup-hook'
\(with the specified buffer current) and `temp-buffer-window-show-hook'
\(with the specified buffer current and the window showing it selected).
This runs the hook `temp-buffer-window-setup-hook' before BODY,
with the specified buffer temporarily current. It runs the
hook `temp-buffer-window-show-hook' after displaying the buffer,
with that buffer temporarily current, and the window that was used to
display it temporarily selected.
Since this macro calls `display-buffer', the window displaying
the buffer is usually not selected and the specified buffer
usually not made current. QUIT-FUNCTION can override that."
This construct is similar to `with-output-to-temp-buffer', but
runs different hooks. In particular, it does not run
`temp-buffer-setup-hook', which usually puts the buffer in Help mode.
Also, it does not call `temp-buffer-show-function' (the ACTION
argument replaces this)."
(declare (debug t))
(let ((buffer (make-symbol "buffer"))
(window (make-symbol "window"))

View file

@ -1,3 +1,25 @@
2012-11-18 Eli Zaretskii <eliz@gnu.org>
* w32select.c: Include w32common.h before w32term.h, so that
windows.h gets included before w32term.h uses some of its
features, see below.
* w32term.h (LOCALE_ENUMPROCA, LOCALE_ENUMPROCW) [_MSC_VER]: New
typedefs.
(EnumSystemLocalesA, EnumSystemLocalesW) [_MSC_VER]: New
prototypes.
(EnumSystemLocales) [_MSC_VER]: Define if undefined. (Bug#12878)
2012-11-18 Jan Djärv <jan.h.d@swipnet.se>
* nsterm.m (hold_event): Set send_appdefined to YES (Bug#12834).
(ns_select): Return at once if events are held (Bug#12834).
2012-11-18 enami tsugutomo <tsugutomo.enami@jp.sony.com>
* unexelf.c (ELFSIZE) [__NetBSD__ && _LP64]: Set to 64.
Needed following 2012-10-20 change. (Bug#12902)
2012-11-18 Juanma Barranquero <lekktu@gmail.com>
* w32proc.c (waitpid): Remove unused label get_result.

View file

@ -330,6 +330,7 @@ Updated by Christian Limpach (chris@nice.ch)
hold_event_q.q[hold_event_q.nr++] = *event;
/* Make sure ns_read_socket is called, i.e. we have input. */
raise (SIGIO);
send_appdefined = YES;
}
static Lisp_Object
@ -3461,6 +3462,14 @@ overwriting cursor (usually when cursor on a tab) */
/* NSTRACE (ns_select); */
if (hold_event_q.nr > 0)
{
/* We already have events pending. */
kill (0, SIGIO);
errno = EINTR;
return -1;
}
for (k = 0; k < nfds+1; k++)
{
if (readfds && FD_ISSET(k, readfds)) ++nr;

View file

@ -461,7 +461,7 @@ typedef struct {
/*
* NetBSD does not have normal-looking user-land ELF support.
*/
# if defined __alpha__ || defined __sparc_v9__
# if defined __alpha__ || defined __sparc_v9__ || defined _LP64
# define ELFSIZE 64
# else
# define ELFSIZE 32

View file

@ -74,8 +74,8 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#include <config.h>
#include "lisp.h"
#include "w32term.h" /* for all of the w32 includes */
#include "w32common.h" /* os_subtype */
#include "w32term.h" /* for all of the w32 includes */
#include "keyboard.h"
#include "blockinput.h"
#include "charset.h"

View file

@ -745,6 +745,21 @@ extern int w32_system_caret_height;
extern int w32_system_caret_x;
extern int w32_system_caret_y;
#ifdef _MSC_VER
#ifndef EnumSystemLocales
/* MSVC headers define these only for _WIN32_WINNT >= 0x0500. */
typedef BOOL (CALLBACK *LOCALE_ENUMPROCA)(LPSTR);
typedef BOOL (CALLBACK *LOCALE_ENUMPROCW)(LPWSTR);
BOOL WINAPI EnumSystemLocalesA(LOCALE_ENUMPROCA,DWORD);
BOOL WINAPI EnumSystemLocalesW(LOCALE_ENUMPROCW,DWORD)
#ifdef UNICODE
#define EnumSystemLocales EnumSystemLocalesW
#else
#define EnumSystemLocales EnumSystemLocalesA
#endif
#endif
#endif
#if EMACSDEBUG
extern const char*
w32_name_of_message (UINT msg);