Remove the oldest 1/4 of the jsonrpc events buffer when reaching the
size limit instead of just a few lines. This reduces the cost of adding
a log entry from O(buffer-size) to O(1).
Also make messages forwarded to the events buffer, such as ones sent to
stderr from the server process, obey the same limit.
* lisp/jsonrpc.el (jsonrpc--limit-buffer-size): New.
(jsonrpc--log-event, jsonrpc--forwarding-buffer): Use it.
The built-in JSON parser works on undecoded (unibyte) input; decoding
received data is just a waste and does take time even when all-ASCII.
* lisp/jsonrpc.el (initialize-instance): Use unibyte process buffer and
binary coding for process I/O, implying unibyte strings being passed to
the filter function.
(jsonrpc-connection-send): More efficient message generation.
(jsonrpc--json-read): Compatibility code for the old elisp json parser.
(jsonrpc--process-filter): Faster header-matching regexp.
The doc strings for re-search-forward and re-search-backward have been
improved (bug#25193, bug#31584) but the corresponding posix- and
non-regexp search functions still have the original text, despite
describing the exact same mechanism.
There is no reason for them to differ, so we make them all use the
updated version which also is more readable. Any future doc string
improvements should be made to all of them in the same way for
consistency.
* src/search.c (Fsearch_backward, Fsearch_forward)
(Fposix_search_backward, Fposix_search_forward):
Use text from Fre_search_forward and Fre_search_backward.
* test/lisp/textmodes/ispell-tests/ispell-tests.el:
* test/lisp/textmodes/ispell-tests/ispell-aspell-tests.el:
* test/lisp/textmodes/ispell-tests/ispell-international-ispell-tests.el:
* test/lisp/textmodes/ispell-tests/ispell-hunspell-tests.el: New files.
* test/lisp/textmodes/ispell-resources/fake-aspell.bash: Add a mock
`aspell' for use in ispell.el test, with old version.
* test/lisp/textmodes/ispell-resources/fake-aspell-new.bash: Add a mock
`aspell' for use in ispell.el test, with recent version.
* lisp/vc/log-view.el (log-view--mark-unmark): New BEG and END
arguments. Don't call region-beginning and region-end here.
(log-view-mark-entry, log-view-unmark-entry): Pass BEG and END
to log-view--mark-unmark, non-nil when the region is active.
SLNX is a new XML-based file-format for .NET based solutions, replacing
the older proprietary SLN file-format.
Unlike SLN-files, it is merge-friendly and expected to become the new
de-facto standard for working with .NET projects. This commit adds
support for SLNX-schema to 'nxml-mode'.
The schme provided has been synthesized using the official XSD-schema
definition:
https://github.com/microsoft/vs-solutionpersistence/blob/main/src/Microsoft.VisualStudio.SolutionPersistence/Serializer/Xml/Slnx.xsd
This schema was then converted to RNG using XSDtoRNG.xsl:
https://github.com/epiasini/XSDtoRNG
The RNG schema was then converted to RNC using the trang CLI-tool:
https://relaxng.org/jclark/trang.html
* etc/schema/dotnet-slnx.rnc: New file.
* etc/schema/schemas.xml: Add Slnx schema.
* lisp/files.el (auto-mode-alist): Add association for SLNX files.
(Bug#79379)
* lisp/progmodes/gud.el (gud-lldb-marker-filter): Fix problem
where the source code location ends up at the last character of
the previous line if no (or zero) column is reported by lldb.
(Bug#79360)
Copyright-paperwork-exempt: yes
* lisp/vc/log-view.el (log-view-mark-entry)
(log-view-unmark-entry): New commands.
(log-view-toggle-mark-entry): Rewrite in terms of them.
(log-view-mode-map): Unbind log-view-toggle-mark-entry.
Bind the two new commands.
* etc/NEWS: Document the change.
* src/process.c (server_accept_connection): Make the client
process be locked to the same thread as the parent server process,
or unlocked if the server process was unlocked. (Bug#79367)
* lisp/erc/erc-goodies.el (erc-scrolltobottom-mode)
(erc-scrolltobottom-enable): Always remove hook functions whose
membership hinges on the value of `erc-scrolltobottom-all'. In ERC 5.6,
an init file's `setopt' form containing an `erc-modules' assignment
before an `erc-scrolltobottom-all' one would result in conflicting sets
of hook members come `erc-open'. Having such option-dependent branching
in module setup, while difficult to maintain, is a long held ERC
practice, as seen in functions like `erc-nickserv-identify-mode'.
Making all new modules "local" may be the most manageable solution
because existing global modules can't be made to require prior
deactivation.
* lisp/erc/erc-fill.el (erc-fill--wrap-indent-prompt): While computing
the prompt indentation's text size, don't bother saving and restoring
the window configuration because unwanted scrolls are now believed to be
unlikely because of other changes.
* lisp/minibuffer.el (define-completion-category): New function.
(completion-category-get): New function, implements completion
category property lookup with (multiple) inheritance.
(completion-metadata-get, completion--styles)
(completion--cycle-threshold): Use it.
(completion-category-defaults): Mention it in docstring.
Remove entry for 'project-buffer' category, and instead...
* lisp/progmodes/project.el: ...have 'project-buffer' inherit
from 'buffer'.
* test/lisp/minibuffer-tests.el
(completion-category-inheritance): New test.
* etc/NEWS: Announce support for category inheritance.
The previous change actually introduced a bug in a closely
related but distinct place. We need to address the off-by-one
in the 'substring' call, not the 'add-face-text-property'.
* lisp/progmodes/eglot.el (eglot--sig-info): Fixup.
* lisp/isearch.el (isearch-mode): Don't override
'isearch--saved-local-map' when 'overriding-terminal-local-map'
was already set to 'isearch-mode-map' in a previous call.
(with-isearch-suspended): Don't call the function 'isearch-mode'
when the variable 'isearch-mode' is already non-nil.
* lisp/emacs-lisp/macroexp.el (macroexp--obsolete-warning): `instead`
can be a list.
* lisp/dom.el (dom-text, dom-texts): Fix obsolescence declaration.
The correct Emacs executable to use for
'elisp-flymake-byte-compile' is not necessarily the running
Emacs. For example, when editing trunk with Emacs 30,
various Lisp changes will cause spurious flymake warnings.
Add 'elisp-flymake-byte-compile-executable' to allow
customizing this.
* lisp/progmodes/elisp-mode.el
(elisp-flymake-byte-compile-executable)
(elisp-flymake-byte-compile--executable): Add. (Bug#79342)
(elisp-flymake-byte-compile): Invoke
'elisp-flymake-byte-compile--executable'.
* etc/NEWS: Announce the change.