diff --git a/doc/emacs/trouble.texi b/doc/emacs/trouble.texi
index 37a73041676..bb05378f4c9 100644
--- a/doc/emacs/trouble.texi
+++ b/doc/emacs/trouble.texi
@@ -1162,11 +1162,11 @@ name that indicates whether it is the old version or your new changed
one.
@item
-Write the change log entries for your changes. This is both to save us
+Write the commit log entries for your changes. This is both to save us
the extra work of writing them, and to help explain your changes so we
can understand them.
-The purpose of the change log is to show people where to find what was
+The purpose of the commit log is to show people where to find what was
changed. So you need to be specific about what functions you changed;
in large functions, it's often helpful to indicate where within the
function the change was.
@@ -1177,9 +1177,9 @@ new function, all you need to say about it is that it is new. If you
feel that the purpose needs explaining, it probably does---but put the
explanation in comments in the code. It will be more useful there.
-Please look at the change log entries of recent commits to see what
-sorts of information to put in, and to learn the style that we use. Note that,
-unlike some other projects, we do require change logs for
+Please look at the commit log entries of recent commits to see what
+sorts of information to put in, and to learn the style that we use.
+Note that, unlike some other projects, we do require commit logs for
documentation, i.e., Texinfo files.
@xref{Change Log},
@ifset WWW_GNU_ORG
diff --git a/doc/misc/calc.texi b/doc/misc/calc.texi
index 98ef6daa2c1..02deee99e19 100644
--- a/doc/misc/calc.texi
+++ b/doc/misc/calc.texi
@@ -33275,19 +33275,18 @@ prefer them, or if you are calling these functions from regular Lisp.
The functions described here are scattered throughout the various
Calc component files. Note that @file{calc.el} includes @code{autoload}s
-for only a few component files; when Calc wants to call an advanced
-function it calls @samp{(calc-extensions)} first; this function
-autoloads @file{calc-ext.el}, which in turn autoloads all the functions
-in the remaining component files.
+for only a few component files; to get autoloads of the more advanced
+function, one needs to load @file{calc-ext.el}, which in turn
+autoloads all the functions in the remaining component files.
Because @code{defmath} itself uses the extensions, user-written code
generally always executes with the extensions already loaded, so
normally you can use any Calc function and be confident that it will
be autoloaded for you when necessary. If you are doing something
special, check carefully to make sure each function you are using is
-from @file{calc.el} or its components, and call @samp{(calc-extensions)}
-before using any function based in @file{calc-ext.el} if you can't
-prove this file will already be loaded.
+from @file{calc.el} or its components, and use @w{@code{(require
+'calc-ext)}} before using any function based in @file{calc-ext.el} if
+you can't prove this file will already be loaded.
@menu
* Data Type Formats::
diff --git a/etc/NEWS.26 b/etc/NEWS.26
index a766e96d2f4..e94bda549ab 100644
--- a/etc/NEWS.26
+++ b/etc/NEWS.26
@@ -19,7 +19,7 @@ with a prefix argument or by typing C-u C-h C-n.
* Installation Changes in Emacs 26.2
---
-** Building Emacs with the '--with-xwidgets' option now requires WebKit2
+** Building Emacs with the '--with-xwidgets' option now requires WebKit2.
To build Emacs with xwidgets support, you will need to install the
webkit2gtk-4.0 package; version 2.12 or later is required.
(This change was actually made in Emacs 26.1, but was not called out
@@ -132,17 +132,17 @@ now the default in developer builds. As before, use
** When GCC warnings are enabled, '--enable-check-lisp-object-type' is
now enabled by default when configuring.
-** The Emacs server now has socket-launching support. This allows
-socket based activation, where an external process like systemd can
-invoke the Emacs server process upon a socket connection event and
-hand the socket over to Emacs. Emacs uses this socket to service
-emacsclient commands. This new functionality can be disabled with the
-configure option '--disable-libsystemd'.
+** The Emacs server now has socket-launching support.
+This allows socket based activation, where an external process like
+systemd can invoke the Emacs server process upon a socket connection
+event and hand the socket over to Emacs. Emacs uses this socket to
+service emacsclient commands. This new functionality can be disabled
+with the configure option '--disable-libsystemd'.
-** A systemd user unit file is provided. Use it in the standard way:
-'systemctl --user enable emacs'.
-(If your Emacs is installed in a non-standard location, you may
-need to copy the emacs.service file to eg ~/.config/systemd/user/)
+** A systemd user unit file is provided.
+Use it in the standard way: 'systemctl --user enable emacs'. (If your
+Emacs is installed in a non-standard location, you may need to copy
+the emacs.service file to eg ~/.config/systemd/user/)
** New configure option '--disable-build-details' attempts to build an
Emacs that is more likely to be reproducible; that is, if you build
@@ -153,7 +153,6 @@ following variables nil: 'emacs-build-system', 'emacs-build-time',
'erc-emacs-build-time'.
** Emacs can now be built with support for Little CMS.
-
If the lcms2 library is installed, Emacs will enable features built on
top of that library. The new configure option '--without-lcms2' can
be used to build without lcms2 support even if it is installed. Emacs
@@ -196,9 +195,9 @@ The effect is similar to that of "toolBar" resource on the tool bar.
* Changes in Emacs 26.1
-** Option 'buffer-offer-save' can be set to new value, 'always'. When
-set to 'always', the command 'save-some-buffers' will always offer
-this buffer for saving.
+** Option 'buffer-offer-save' can be set to new value, 'always'.
+When set to 'always', the command 'save-some-buffers' will always
+offer this buffer for saving.
** Security vulnerability related to Enriched Text mode is removed.
@@ -684,7 +683,7 @@ This can be customized via the 'info-menu' category in
A new option 'ediff-show-ancestor' and a new toggle
'ediff-toggle-show-ancestor'.
-** TeX: Add luatex and xetex as alternatives to pdftex
+** TeX: Add luatex and xetex as alternatives to pdftex.
** Electric-Buffer-menu
@@ -1088,7 +1087,6 @@ to a format suitable for reverse lookup zone files.
** Ispell
*** Enchant is now supported as a spell-checker.
-
Enchant is a meta-spell-checker that uses providers such as Hunspell
to do the actual checking. With it, users can use spell-checkers not
directly supported by Emacs, such as Voikko, Hspell and AppleSpell,
@@ -1098,8 +1096,7 @@ configure different spelling-checkers for different languages.
** Flymake
-*** Flymake has been completely redesigned
-
+*** Flymake has been completely redesigned.
Flymake now annotates arbitrary buffer regions, not just lines. It
supports arbitrary diagnostic types, not just errors and warnings (see
variable 'flymake-diagnostic-types-alist').
@@ -1115,7 +1112,6 @@ backend", which has been updated to benefit from the new UI features.
** Term
*** 'term-char-mode' now makes its buffer read-only.
-
The buffer is made read-only to prevent changes from being made by
anything other than the process filter; and movements of point away
from the process mark are counter-acted so that the cursor is in the
@@ -1131,7 +1127,6 @@ the previous behavior.
** Xref
*** When an *xref* buffer is needed, 'TAB' quits and jumps to an xref.
-
A new command 'xref-quit-and-goto-xref', bound to 'TAB' in *xref*
buffers, quits the window before jumping to the destination. In many
situations, the intended window configuration is restored, just as if
@@ -1227,11 +1222,11 @@ change FOO, respectively. The exhaustive list of removed variables is:
*** Many variables obsoleted in 22.1 referring to face symbols.
-** The variable 'text-quoting-style' is now a customizable option. It
-controls whether to and how to translate ASCII quotes in messages and
-help output. Its possible values and their semantics remain unchanged
-from Emacs 25. In particular, when this variable's value is 'grave',
-all quotes in formats are output as-is.
+** The variable 'text-quoting-style' is now a customizable option.
+It controls whether to and how to translate ASCII quotes in messages
+and help output. Its possible values and their semantics remain
+unchanged from Emacs 25. In particular, when this variable's value is
+'grave', all quotes in formats are output as-is.
** Functions like 'check-declare-file' and 'check-declare-directory'
now generate less chatter and more-compact diagnostics. The auxiliary
@@ -1495,10 +1490,11 @@ to provide region boundaries (for rectangular regions more than one)
to an interactively callable function as a single argument instead of
two separate arguments 'region-beginning' and 'region-end'.
-** 'parse-partial-sexp' state has a new element. Element 10 is
-non-nil when the last character scanned might be the first character
-of a two character construct, i.e., a comment delimiter or escaped
-character. Its value is the syntax of that last character.
+** 'parse-partial-sexp' state has a new element.
+Element 10 is non-nil when the last character scanned might be the
+first character of a two character construct, i.e., a comment
+delimiter or escaped character. Its value is the syntax of that last
+character.
** 'parse-partial-sexp's state, element 9, has now been confirmed as
permanent and documented, and may be used by Lisp programs. Its value
@@ -1762,8 +1758,9 @@ the ELisp manual.
*** 'select-frame-by-name' now may return a frame on another display
if it does not find a suitable one on the current display.
-** 'tcl-auto-fill-mode' is now declared obsolete. Its functionality
-can be replicated simply by setting 'comment-auto-fill-only-comments'.
+** 'tcl-auto-fill-mode' is now declared obsolete.
+Its functionality can be replicated simply by setting
+'comment-auto-fill-only-comments'.
** New pcase pattern 'rx' to match against an rx-style regular expression.
For details, see the doc string of 'rx--pcase-macroexpander'.
diff --git a/etc/PROBLEMS b/etc/PROBLEMS
index fe59b52c759..a1fae225742 100644
--- a/etc/PROBLEMS
+++ b/etc/PROBLEMS
@@ -1135,7 +1135,7 @@ is running. If gnome-settings-daemon is not running, Emacs receives
input through XIM without any problem. Furthermore, this seems only
to happen in *.UTF-8 locales; zh_CN.GB2312 and zh_CN.GBK locales, for
example, work fine. A bug report has been filed in the Gnome
-bugzilla: http://bugzilla.gnome.org/show_bug.cgi?id=357032
+bugzilla: https://bugzilla.gnome.org/show_bug.cgi?id=357032
*** Gnome: GPaste clipboard manager causes erratic behavior of 'yank'
diff --git a/lisp/files-x.el b/lisp/files-x.el
index 2a52792222d..92532e85f4f 100644
--- a/lisp/files-x.el
+++ b/lisp/files-x.el
@@ -377,7 +377,9 @@ from the -*- line ignoring the input argument VALUE."
((eq variable 'mode) (goto-char beg))
((null replaced-pos) (goto-char end))
(replaced-pos (goto-char replaced-pos)))
- (if (and (not (eq (char-before) ?\;))
+ (if (and (save-excursion
+ (skip-chars-backward " \t")
+ (not (eq (char-before) ?\;)))
(not (equal (point) (marker-position beg)))
;; When existing `-*- -*-' is empty, beg > end.
(not (> (marker-position beg) (marker-position end))))
diff --git a/lisp/international/mule-conf.el b/lisp/international/mule-conf.el
index 3affeec03ea..b08150a1499 100644
--- a/lisp/international/mule-conf.el
+++ b/lisp/international/mule-conf.el
@@ -1304,6 +1304,11 @@ is treated as a character."
:bom '(utf-8-with-signature . utf-8))
(define-coding-system-alias 'mule-utf-8 'utf-8)
+;; See this page:
+;; https://docs.microsoft.com/en-us/windows/desktop/intl/code-page-identifiers
+;; Starting with Windows 10, people are trying to set their systems to
+;; use UTF-8 , so we had better recognized this alias:
+(define-coding-system-alias 'cp65001 'utf-8)
(define-coding-system 'utf-8-emacs
"Support for all Emacs characters (including non-Unicode characters)."
diff --git a/lisp/textmodes/bibtex.el b/lisp/textmodes/bibtex.el
index 50a30cf6c36..6f6b06266ef 100644
--- a/lisp/textmodes/bibtex.el
+++ b/lisp/textmodes/bibtex.el
@@ -457,7 +457,7 @@ INIT is either the initial content of the field or a function,
which is called to determine the initial content of the field.
ALTERNATIVE if non-nil is an integer that numbers sets of
alternatives, starting from zero."
- :group 'BibTeX
+ :group 'bibtex
:version "26.1" ; add Conference
:type 'bibtex-entry-alist)
(put 'bibtex-BibTeX-entry-alist 'risky-local-variable t)
diff --git a/nt/addpm.c b/nt/addpm.c
index ec7d7ff52db..21320206d6e 100644
--- a/nt/addpm.c
+++ b/nt/addpm.c
@@ -38,9 +38,12 @@ along with GNU Emacs. If not, see . */
#include
#include
-/* MinGW64 barfs if _WIN32_IE is defined to anything below 0x500. */
+/* MinGW64 barfs if _WIN32_IE is defined to anything below 0x0500. */
#ifndef MINGW_W64
-#define _WIN32_IE 0x400
+# ifdef _WIN32_IE
+# undef _WIN32_IE
+# endif
+#define _WIN32_IE 0x0400
#endif
/* Request C Object macros for COM interfaces. */
#define COBJMACROS 1
diff --git a/src/emacs-module.c b/src/emacs-module.c
index e7ba17426bf..f2844c40d0f 100644
--- a/src/emacs-module.c
+++ b/src/emacs-module.c
@@ -344,20 +344,20 @@ module_free_global_ref (emacs_env *env, emacs_value ref)
Lisp_Object globals = global_env_private.values;
Lisp_Object prev = Qnil;
ptrdiff_t count = 0;
- for (Lisp_Object tail = global_env_private.values; CONSP (tail);
+ for (Lisp_Object tail = globals; CONSP (tail);
tail = XCDR (tail))
{
- emacs_value global = xmint_pointer (XCAR (globals));
+ emacs_value global = xmint_pointer (XCAR (tail));
if (global == ref)
{
if (NILP (prev))
global_env_private.values = XCDR (globals);
else
- XSETCDR (prev, XCDR (globals));
+ XSETCDR (prev, XCDR (tail));
return;
}
++count;
- prev = globals;
+ prev = tail;
}
module_abort ("Global value was not found in list of %"pD"d globals",
count);
diff --git a/src/w32console.c b/src/w32console.c
index 6c3cf06bfd3..9f9db68f0ef 100644
--- a/src/w32console.c
+++ b/src/w32console.c
@@ -140,23 +140,36 @@ w32con_clear_frame (struct frame *f)
}
-static struct glyph glyph_base[256];
+static struct glyph glyph_base[80];
+static struct glyph *glyphs = glyph_base;
+static size_t glyphs_len = ARRAYELTS (glyph_base);
static BOOL ceol_initialized = FALSE;
/* Clear from Cursor to end (what's "standout marker"?). */
static void
w32con_clear_end_of_line (struct frame *f, int end)
{
+ /* Time to reallocate our "empty row"? With today's large screens,
+ it is not unthinkable to see TTY frames well in excess of
+ 80-character width. */
+ if (end - cursor_coords.X > glyphs_len)
+ {
+ if (glyphs == glyph_base)
+ glyphs = NULL;
+ glyphs = xrealloc (glyphs, FRAME_COLS (f) * sizeof (struct glyph));
+ glyphs_len = FRAME_COLS (f);
+ ceol_initialized = FALSE;
+ }
if (!ceol_initialized)
{
int i;
- for (i = 0; i < 256; i++)
+ for (i = 0; i < glyphs_len; i++)
{
- memcpy (&glyph_base[i], &space_glyph, sizeof (struct glyph));
+ memcpy (&glyphs[i], &space_glyph, sizeof (struct glyph));
}
ceol_initialized = TRUE;
}
- w32con_write_glyphs (f, glyph_base, end - cursor_coords.X); /* fencepost ? */
+ w32con_write_glyphs (f, glyphs, end - cursor_coords.X);
}
/* Insert n lines at vpos. if n is negative delete -n lines. */
@@ -772,6 +785,15 @@ initialize_w32_display (struct terminal *term, int *width, int *height)
*width = 1 + info.srWindow.Right - info.srWindow.Left;
}
+ /* Force reinitialization of the "empty row" buffer, in case they
+ dumped from a running session. */
+ if (glyphs != glyph_base)
+ {
+ glyphs = NULL;
+ glyphs_len = 0;
+ ceol_initialized = FALSE;
+ }
+
if (os_subtype == OS_NT)
w32_console_unicode_input = 1;
else
diff --git a/test/Makefile.in b/test/Makefile.in
index 0bc893bc0c6..a1f43882881 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -246,12 +246,14 @@ else
FPIC_CFLAGS = -fPIC
endif
+# Note: emacs-module.h is generated from emacs-module.h.in, hence we
+# look in ../src, not $(srcdir)/../src.
MODULE_CFLAGS = -I../src $(FPIC_CFLAGS) $(PROFILING_CFLAGS) \
$(WARN_CFLAGS) $(WERROR_CFLAGS) $(CFLAGS)
test_module = $(test_module_dir)/mod-test${SO}
src/emacs-module-tests.log: $(test_module)
-$(test_module): $(test_module:${SO}=.c) $(srcdir)/../src/emacs-module.h
+$(test_module): $(test_module:${SO}=.c) ../src/emacs-module.h
$(AM_V_at)${MKDIR_P} $(dir $@)
$(AM_V_CCLD)$(CC) -shared $(CPPFLAGS) $(MODULE_CFLAGS) $(LDFLAGS) \
-o $@ $<
diff --git a/test/data/emacs-module/mod-test.c b/test/data/emacs-module/mod-test.c
index db05e90bc49..a9b459b4cc4 100644
--- a/test/data/emacs-module/mod-test.c
+++ b/test/data/emacs-module/mod-test.c
@@ -156,6 +156,24 @@ Fmod_test_globref_make (emacs_env *env, ptrdiff_t nargs, emacs_value args[],
return env->make_global_ref (env, lisp_str);
}
+/* Create a few global references from arguments and free them. */
+static emacs_value
+Fmod_test_globref_free (emacs_env *env, ptrdiff_t nargs, emacs_value args[],
+ void *data)
+{
+ emacs_value refs[10];
+ for (int i = 0; i < 10; i++)
+ {
+ refs[i] = env->make_global_ref (env, args[i % nargs]);
+ }
+ for (int i = 0; i < 10; i++)
+ {
+ env->free_global_ref (env, refs[i]);
+ }
+ return env->intern (env, "ok");
+}
+
+
/* Return a copy of the argument string where every 'a' is replaced
with 'b'. */
@@ -339,6 +357,7 @@ emacs_module_init (struct emacs_runtime *ert)
DEFUN ("mod-test-non-local-exit-funcall", Fmod_test_non_local_exit_funcall,
1, 1, NULL, NULL);
DEFUN ("mod-test-globref-make", Fmod_test_globref_make, 0, 0, NULL, NULL);
+ DEFUN ("mod-test-globref-free", Fmod_test_globref_free, 4, 4, NULL, NULL);
DEFUN ("mod-test-string-a-to-b", Fmod_test_string_a_to_b, 1, 1, NULL, NULL);
DEFUN ("mod-test-userptr-make", Fmod_test_userptr_make, 1, 1, NULL, NULL);
DEFUN ("mod-test-userptr-get", Fmod_test_userptr_get, 1, 1, NULL, NULL);
diff --git a/test/src/emacs-module-tests.el b/test/src/emacs-module-tests.el
index 90cd37a98a5..c67190be5cb 100644
--- a/test/src/emacs-module-tests.el
+++ b/test/src/emacs-module-tests.el
@@ -148,6 +148,9 @@ changes."
(garbage-collect) ;; XXX: not enough to really test but it's something..
(should (string= ref-str mod-str))))
+(ert-deftest mod-test-globref-free-test ()
+ (should (eq (mod-test-globref-free 1 'a "test" 'b) 'ok)))
+
(ert-deftest mod-test-string-a-to-b-test ()
(should (string= (mod-test-string-a-to-b "aaa") "bbb")))