Merge from origin/emacs-27

4712c75ab8 Clarify when activate-mark-hook is run
abedf3a865 Fix language-environment and font selection on MS-Windows
8b8708eadd Fix example in Sequence Functions node in the manual
This commit is contained in:
Glenn Morris 2021-02-19 08:36:55 -08:00
commit 07b22b6b5d
5 changed files with 58 additions and 5 deletions

View file

@ -609,8 +609,8 @@ the function @code{use-region-p} for that (@pxref{The Region}).
@defvarx deactivate-mark-hook
These normal hooks are run, respectively, when the mark becomes active
and when it becomes inactive. The hook @code{activate-mark-hook} is
also run at the end of the command loop if the mark is active and it
is possible that the region may have changed.
also run when the region is reactivated, for instance after using a
command that switches back to a buffer that has an active mark.
@ignore
This piece of command_loop_1, run unless deactivating the mark:
if (current_buffer != prev_buffer || MODIFF != prev_modiff)

View file

@ -609,7 +609,7 @@ returned value is a list.
(seq-map-indexed (lambda (elt idx)
(list idx elt))
'(a b c))
@result{} ((0 a) (b 1) (c 2))
@result{} ((0 a) (1 b) (2 c))
@end group
@end example
@end defun

View file

@ -5976,8 +5976,9 @@ START and END specify the portion of the current buffer to be copied."
(defvar activate-mark-hook nil
"Hook run when the mark becomes active.
It is also run at the end of a command, if the mark is active and
it is possible that the region may have changed.")
It is also run when the region is reactivated, for instance after
using a command that switches back to a buffer that has an active
mark.")
(defvar deactivate-mark-hook nil
"Hook run when the mark becomes inactive.")

View file

@ -255,6 +255,7 @@ bit output with no translation."
(w32-add-charset-info "iso8859-2" 'w32-charset-easteurope 28592)
(w32-add-charset-info "iso8859-3" 'w32-charset-turkish 28593)
(w32-add-charset-info "iso8859-4" 'w32-charset-baltic 28594)
(w32-add-charset-info "iso8859-5" 'w32-charset-russian 28595)
(w32-add-charset-info "iso8859-6" 'w32-charset-arabic 28596)
(w32-add-charset-info "iso8859-7" 'w32-charset-greek 28597)
(w32-add-charset-info "iso8859-8" 'w32-charset-hebrew 1255)

View file

@ -346,6 +346,7 @@ static BOOL g_b_init_get_adapters_addresses;
static BOOL g_b_init_reg_open_key_ex_w;
static BOOL g_b_init_reg_query_value_ex_w;
static BOOL g_b_init_expand_environment_strings_w;
static BOOL g_b_init_get_user_default_ui_language;
BOOL g_b_init_compare_string_w;
BOOL g_b_init_debug_break_process;
@ -533,6 +534,7 @@ DWORD multiByteToWideCharFlags;
typedef LONG (WINAPI *RegOpenKeyExW_Proc) (HKEY,LPCWSTR,DWORD,REGSAM,PHKEY);
typedef LONG (WINAPI *RegQueryValueExW_Proc) (HKEY,LPCWSTR,LPDWORD,LPDWORD,LPBYTE,LPDWORD);
typedef DWORD (WINAPI *ExpandEnvironmentStringsW_Proc) (LPCWSTR,LPWSTR,DWORD);
typedef LANGID (WINAPI *GetUserDefaultUILanguage_Proc) (void);
/* ** A utility function ** */
static BOOL
@ -1489,6 +1491,28 @@ expand_environment_strings_w (LPCWSTR lpSrc, LPWSTR lpDst, DWORD nSize)
return s_pfn_Expand_Environment_Strings_w (lpSrc, lpDst, nSize);
}
static LANGID WINAPI
get_user_default_ui_language (void)
{
static GetUserDefaultUILanguage_Proc s_pfn_GetUserDefaultUILanguage = NULL;
HMODULE hm_kernel32 = NULL;
if (is_windows_9x () == TRUE)
return 0;
if (g_b_init_get_user_default_ui_language == 0)
{
g_b_init_get_user_default_ui_language = 1;
hm_kernel32 = LoadLibrary ("Kernel32.dll");
if (hm_kernel32)
s_pfn_GetUserDefaultUILanguage = (GetUserDefaultUILanguage_Proc)
get_proc_addr (hm_kernel32, "GetUserDefaultUILanguage");
}
if (s_pfn_GetUserDefaultUILanguage == NULL)
return 0;
return s_pfn_GetUserDefaultUILanguage ();
}
/* Return 1 if P is a valid pointer to an object of size SIZE. Return
@ -2947,6 +2971,32 @@ init_environment (char ** argv)
LOCALE_SABBREVLANGNAME | LOCALE_USE_CP_ACP,
locale_name, sizeof (locale_name)))
{
/* Microsoft are migrating away of locale IDs, replacing them
with locale names, such as "en-US", and are therefore
deprecating the APIs which use LCID etc. As part of that
deprecation, they don't bother inventing LCID and LANGID
codes for new locales and language/culture combinations;
instead, those get LCID of 0xC000 and LANGID of 0x2000, for
which the LCID/LANGID oriented APIs return "ZZZ" as the
"language name". Such "language name" is useless for our
purposes. So we instead use the default UI language, in the
hope of getting something usable. */
if (strcmp (locale_name, "ZZZ") == 0)
{
LANGID lang_id = get_user_default_ui_language ();
if (lang_id != 0)
{
/* Disregard the sorting order differences between cultures. */
LCID def_lcid = MAKELCID (lang_id, SORT_DEFAULT);
char locale_name_def[32];
if (GetLocaleInfo (def_lcid,
LOCALE_SABBREVLANGNAME | LOCALE_USE_CP_ACP,
locale_name_def, sizeof (locale_name_def)))
strcpy (locale_name, locale_name_def);
}
}
for (i = 0; i < N_ENV_VARS; i++)
{
if (strcmp (env_vars[i].name, "LANG") == 0)
@ -10580,6 +10630,7 @@ globals_of_w32 (void)
g_b_init_expand_environment_strings_w = 0;
g_b_init_compare_string_w = 0;
g_b_init_debug_break_process = 0;
g_b_init_get_user_default_ui_language = 0;
num_of_processors = 0;
/* The following sets a handler for shutdown notifications for
console apps. This actually applies to Emacs in both console and