* lisp/custom.el (custom-initialize-delay): Don't delay if
`custom-delayed-init-variables` has already been processed.
* lisp/startup.el (command-line): Mark `custom-delayed-init-variables`
as processed.
Also fix a bug where, with minibuffer-follows-selected-frame neither nil nor
t, a minibuffer could appear in two frames at the same time.
* src/window.c (Fset_window_configuration): Add a new &optional parameter
DONT-SET-MINIWINDOW, which inhibits the minibuffer from being restored from
the supplied window configuration.
(restore_window_configuration): Enhance to match the above.
* src/minibuf.c (read_minibuf): Enhance the argument list to the
restore_window_configuration calls to match the above. In the main case,
restoring the minibuffer is inhibited.
(read_minibuf_unwind): Should the frame with the expired minibuffer not be
found ("can't happen"), unwind the stacked data nevertheless, rather than just
exiting.
* src/keyboard.c (read_char_help_form_unwind): Amend a call of
Fset_window_configuration.
* doc/lispref/windows.texi (Window Configurations): Document the new form of
set-window-configuration.
* etc/NEWS (Lisp Changes in Emacs 28.1): Amend the entry for
set-window-configuration.
* lisp/isearch.el (isearch-update): When we start hscrolled,
consider also the case that point ends up being to the left of the
hscrolled window's edge. (Bug#46316)
* test/src/comp-tests.el (comp-test-47868-1): Add new test.
* test/src/comp-test-funcs.el (comp-test-47868-1-f)
(comp-test-47868-2-f): New functions.
* lisp/emacs-lisp/comp.el (comp-imm-equal-test): Define new hash
tanble test.
(comp-data-container): Use it.
(comp-final, comp-run-async-workers): have comp required before
reading dumped hashes so that `comp-imm-equal-test' is defined.
In order to correctly detect the case of the "new style" with an empty body,
remove the old optional arguments `init-value`, `lighter`, and `keymap`,
so we can distinguish the "nil arg" from the "absent arg" cases.
* lisp/progmodes/cperl-mode.el (cperl-electric-else): Don't expand
scalar variables like '$continue' as keywords. (Bug#47902)
* test/lisp/progmodes/cperl-mode-tests.el
(cperl-test-hyperactive-electric-else): Verify that keywords are
expanded but variable names aren't.
The quoted-printable estimation was obviously wrong: the size becomes
smaller when decoded, not larger...
* lisp/mail/rmailmm.el (rmail-mime-set-bulk-data): Fix estimations
of decoded MIME attachment.
We used to `bset_enable_multibyte_characters` while the buffer is not
empty, putting the buffer temporarily in an inconsistent state.
Further simplifications along the way: Prefer re-using local var `histvar`
and let `insert` do the unibyte<->multibyte conversion if needed.
* doc/emacs/text.texi (Auto Fill, Fill Commands): Mention special
line-breaking rules for CJK characters and the kinsoku rules.
(Bug#47856)
* lisp/textmodes/fill.el
(fill-separate-heterogeneous-words-with-space): Doc fix.
* lisp/minibuffer.el (minibuffer-mode): New derived mode.
* src/minibuf.c (syms_of_minibuf): New DEFSYMs Qminibuffer_mode,
Qminibuffer_inactive_mode, Qminibuffer_completing_file_name,
Qselect_frame_set_input_focus, Qadd_to_history.
(read_minibuf, set_minibuffer_mode, read_minibuf_unwind): Use the new DEFSYMs
in place of continual interning.
(set_minibuffer_mode): Put an active minibuffer into minibuffer-mode rather
than fundamental-mode.
* doc/emacs/mini.texi (Minibuffer Edit): Mention minibuffer-mode.
* doc/lispref/minibuf.texi (Intro to Minibuffers): Add a paragraph about
minibuffer-mode.
* etc/NEWS (Incompatible Lisp Changes in Emacs 28.1): Add an entry.
Even in the cases where it does not make much visible difference,
it brings the benefit of making the result deterministic.
* minibuffer.el (minibuffer--sort-by-length-alpha): New function.
(minibuffer--sort-by-position): New function extracted from
`completion-all-sorted-completions`.
(completion-all-sorted-completions): Use use them.
* lisp/minibuffer.el (completion-all-sorted-completions): Use hash
table for sorting by history position, O(m+n*log(n)) instead of
O(m*n*log(n)) with history length `m` and candidate length `n`.
This is a useful abstraction, and saves a few levels of indentation in
the test body.
* test/lisp/progmodes/project-tests.el
(project-tests--with-temporary-directory): New helper macro.
(project/quoted-directory): Use it.