Instead of storing the global values in a global 'emacs_value_storage'
object, store them as hash values alongside the reference counts.
That way the garbage collector takes care of cleaning them up.
* src/emacs-module.c (global_storage): Remove.
(struct module_global_reference): New pseudovector type.
(XMODULE_GLOBAL_REFERENCE): New helper function.
(module_make_global_ref, module_free_global_ref): Use
'module_global_reference' struct for global reference values.
(value_to_lisp, module_handle_nonlocal_exit): Adapt to deletion of
'global_storage'.
Fixes: bug#42421
Do this conservatively for now: if the ElDoc helper buffer (as
returned by eldoc--doc-buffer) is visible and showing documentation
for the very same "situation" (as computed by the the new
eldoc--request-state helper), don't request that documentation from
sources again.
Before this change, not only was that request inefficient but if the
user invoked scroll-other-window to see more of the helper buffer,
that would eventually cause it to be reformatted and unexpectedly
recentered.
Later on, when a customizable list of documentation "sinks" is offered
to the user, say, something like eldoc-display-functions, this process
must be consolidated. In those circumstances, as soon as one of those
sinks signals that it doesn't have up-to-date documentation for the
state computed by eldoc--request-state, documentation will have to be
requested anew from eldoc-documentation-functions via
eldoc--invoke-strategy.
* lisp/emacs-lisp/eldoc.el (eldoc--request-docs-p): Rework from
eglot-display-message-p.
(eldoc--last-request-state): New variable.
(eldoc--request-state): New helper.
(eldoc--handle-docs): Memorize state of request in doc buffer.
(eldoc-print-current-symbol-info): Pass a token to
eldoc--request-docs-p.
(Version): Bump to 1.6.0
The following commits were skipped:
8bc8565721 (origin/emacs-27) Revert "Rectify allout-widgets region un...
db479d6354 Revert "Resolve missing button-region keymap bindings."
259dc75c23 Revert "Provide missing let definition to prevent backgrou...
56422a6366 Revert "Don't let item decoration be disrupted by too-shal...
8e4eae0ce3 Revert "Fix allout-widgets-mode handling of edits to item ...
The following commits were skipped:
bc10e467f1 Backport: Rectify allout-widgets region undecoration so it...
82742e295d Backport: Resolve missing button-region keymap bindings.
2035ecca57 Backport: Provide missing let definition to prevent backgr...
3071cecda0 Backport: Don't let item decoration be disrupted by too-sh...
044960ead2 Backport: Fix allout-widgets-mode handling of edits to ite...
If the user has navigated away from the customize buffer, then
clicking on a widget in the customize buffer applies changes in the
selected buffer rather than in the customize buffer. Pass the
customize buffer to 'custom-magic-reset' to avoid this.
* lisp/cus-edit.el (custom-magic-reset): Add optional buffer argument,
apply changes in that buffer.
(custom-notify): Pass the buffer containing the widget to
'custom-magic-reset'. (Bug#40788)
* lisp/allout-widgets.el (allout-widgets-undecorate-region):
Reorganize the loop so an item at the start is not skipped.
(cherry picked from commit 33d85cb768)
* lisp/allout-widgets.el (allout-item-icon-keymap,
allout-item-body-keymap, allout-cue-span-keymap, allout-widgets-mode):
Inherit from both (current-local-map) and (current-global-map). This
provides for missing global bindings when inheriting from
just (current-local-map), eg Esc-<.
(cherry picked from commit dd7c191291)
* lisp/allout-widgets.el (allout-widgets-exposure-change-processor)
Let-declare handled-conceal, for reference through `(symbol-value)'
within the let body. (Because the error happens in an
after-change-functions hook, so it is caught and reported as a message
by allout-widgets-hook-error-handler.)
(cherry picked from commit 3c410b6b47)
* lisp/allout-widgets.el (allout-decorate-item-and-context): Check for
parent-position having value before using it.
Also, shift local emacs vars topic deeper so it doesn't constitute
an instance of that particular aberrant case.
(cherry picked from commit 8684216542)
* lisp/allout-widgets.el (allout-item-icon-keymap,
allout-item-body-keymap, allout-cue-span-keymap, allout-widgets-mode):
Inherit from both (current-local-map) and (current-global-map). This
provides for missing global bindings when inheriting from
just (current-local-map), eg Esc-<.
* lisp/allout-widgets.el (allout-widgets-exposure-change-processor)
Let-declare handled-conceal, for reference through `(symbol-value)'
within the let body. (Because the error happens in an
after-change-functions hook, so it is caught and reported as a message
by allout-widgets-hook-error-handler.)
* lisp/allout-widgets.el (allout-decorate-item-and-context): Check for
parent-position having value before using it.
Also, shift local emacs vars topic deeper so it doesn't constitute
an instance of that particular aberrant case.
* lisp/gnus/gnus-start.el (gnus-active-to-gnus-format):
Add suppressive comment. Prepending "^to\\.\\|" is redundant when
'gnus-ignored-newsgroups' already matches that pattern, but adding
logic here is not worth the trouble.
* lisp/progmodes/project.el:
Add a longer description of the package and how to use it.
(project-prefix-map): Add entries for
'project-or-external-find-file' and
'project-or-external-find-regexp'.
* lisp/url/url-http.el (url-http-parse-headers): Parse redirect
URIs more like other web browsers (bug#42382).
RFC 7231 the Location header is defined to carry a URI-reference.
According to RFC 3986 it should be percent-encoded and thus should not
contain spaces. However, there are HTTP server implementation (notably
nginx) that do not do that. This makes Emacs url-http.el behave like
most other HTTP client implementatios. Also remove the stripping of
angle bracket quotes as they are not valid according to the RFCs.
Copyright-paperwork-exempt: yes
* lisp/gnus/gnus-sum.el (gnus-summary-save-parts): Allow
completing over the parts in the first article in the list of the
process-marked articles (bug#39543).
* lisp/gnus/gnus-art.el (gnus-button-alist): Move the URL clauses
higher up the list before library link setup to prevent URLs ending in
".el" from failing to be recognized (and invalid library links being
created instead) (bug#39781).
* lisp/gnus/gnus-sum.el (gnus-summary-exit): Do window
configuration changes before killing off the summary buffer, so
that the window conf machinery can return to a group-only
configuration (bug#40069).
* doc/misc/gnus.texi (Article Washing): Document it.
* lisp/gnus/gnus-art.el (article-fill-long-lines): Take a numeric
prefix as the fill width (bug#38698).
* lisp/gnus/gnus-sum.el (gnus-summary-prepare-threads): Simplify both
the dummy root and the following article before comparing them,
otherwise both the former and the latter might display the thread's
subject even when gnus-summary-line-format contains "%s" (bug#40520).
* lisp/gnus/gnus-msg.el (gnus-bug): Mention the Emacs bug tracker.
* lisp/mail/emacsbug.el (report-emacs-bug): Link directly to the
Emacs portion of the bug reports (bug#41109).
* doc/lispref/processes.texi (Network): Document non-string
capability command.
* lisp/gnus/nntp.el (nntp-open-connection): Use HELP for Typhoon
and CAPABILITIES for everything else (bug#41960).
* lisp/net/network-stream.el (open-network-stream): Document
function variety of :capability-command.
(network-stream-open-starttls): Use it.
(network-stream-open-tls): Ditto.
(network-stream-open-shell): Ditto.
(network-stream--capability-command): New helper function.