Commit graph

170587 commits

Author SHA1 Message Date
Eshel Yaron
ca72ed2f7a
New command 'minibuffer-set-completion-styles'
Add an interactive command for setting completion styles in the
current minibuffer.

* lisp/minibuffer.el (completion-style)
(completion--matching-style, completion-local-styles): New vars.
(completion--styles): Use 'completion-local-styles' when it's non-nil.
(completion--nth-completion): Set 'completion--matching-style' to the
matching completion style.
(completion-styles-affixation, completion-styles-table): New funs.
(minibuffer-set-completion-styles): New command.
(minibuffer-local-completion-map): Bind it.
(minibuffer-completion-help): Set 'completion-style' in the
"*Completions*" buffer.
* lisp/simple.el (completion-setup-function): Keep 'completion-style'.
(completion-list-mode): Display 'completion-style' in mode line.

* doc/emacs/mini.texi (Completion Commands, Completion Styles):
Document new command.

* doc/lispref/minibuf.texi (Completion Commands)
(Completion Variables): Document new command and variable.

* etc/NEWS: Announce new command.
2024-01-21 07:57:16 +01:00
Eshel Yaron
4c3b73713e
; Fix 'crm-change-separator'
* lisp/emacs-lisp/crm.el (crm-current-separator): New variable.
(crm-complete-and-exit, crm-change-separator)
(completions-multi-mode): Use it instead of 'crm-separator'.
(completing-read-multiple): Let-bind 'crm-current-separator' to the
current value of 'crm-separator'.
2024-01-21 07:57:16 +01:00
Eshel Yaron
f9c59caa37
Improve handling of file name completion predicate
* lisp/minibuffer.el (completion-file-name-table): Avoid hard-coding
'file-exists-p', call predicate without directory name and set
'default-directory' to that directory instead.
(read-file-name): Update documentation.
* lisp/pcomplete.el (pcomplete--entries): Handle zero-length arg.
* doc/lispref/minibuf.texi (Reading File Names): Elaborate.
2024-01-21 07:57:16 +01:00
Eshel Yaron
0d82d262b6
; Fix completions restriction descriptions with boundaries
* lisp/minibuffer.el (minibuffer-narrow-completions-to-current):
Respect completion boundaries when formatting restriction description.
2024-01-21 07:57:16 +01:00
Eshel Yaron
b0e66d1d9c
; Bind 'minibuffer-complete-and-exit' in "Minibuf" menu
* lisp/menu-bar.el (minibuffer-local-completion-map): Bind
'minibuffer-complete-and-exit' in "Minibuf" menu bar menu, shadowing
the binding of 'exit-minibuffer' in that menu.
2024-01-21 07:57:15 +01:00
Eshel Yaron
c3f58a143a
Improve 'completing-read-multiple'
This simplifies the implementation of crm.el, making it a thin wrapper
around 'completing-read'.  This obviates the need for bespoke commands
such as 'crm-complete' and 'crm-completion-help', and allows us to
remove incorrect code in minibuffer.el that tried to accommodate for
both 'completing-read' and 'completing-read-multiple'.
'crm-complete-and-exit' is still required to get the right behavior.
While we're at it, also add a command for changing 'crm-separator'
interactively, and an indication of 'completing-read-multiple' in
the *Completions* buffer mode line.

* lisp/emacs-lisp/crm.el (crm-local-completion-map)
(crm-local-must-match-map): No longer used, replace with obsolete
aliases of 'completing-read-multiple-mode-map' in favor of third party
code that uses these variables.
(crm-completion-table, crm--current-element)
(crm--completion-command, crm-completion-help)
(crm-complete, crm-complete-word)
(crm--choose-completion-string): No longer used, remove.
(crm-complete-and-exit): Update.
(read-string-matching-regexp): New local variable.
(read-string-matching-try-exit)
(crm-change-separator): New commands.
(read-string-matching-mode-map)
(completing-read-multiple-mode-map): New keymap variables.
(read-string-matching-mode)
(completing-read-multiple-mode)
(completions-multi-mode): New minor modes.
(read-string-matching, crm-completion-setup): New functions.
(completing-read-multiple): Update.

* lisp/minibuffer.el (minibuffer-sort-completions)
(minibuffer-narrow-buffer-completions)
(minibuffer--add-completions-predicate)
(minibuffer-narrow-completions-to-current)
(minibuffer-widen-completions)
(completions-auto-update): Delegate completion boundaries calculation.

* doc/lispref/minibuf.texi (Minibuffer Completion): Document c-r-m.
* etc/NEWS: Announce 'crm-change-separator'.
2024-01-21 07:57:15 +01:00
Eshel Yaron
835eff5e21
Support interactively sorting minibuffer completions
* lisp/minibuffer.el (minibuffer-completions-sort-function): New var.
(minibuffer-read-sort-order-with-completion)
(minibuffer-completions-sort-orders): New user options.
(minibuffer-sort-completions): New command.
(minibuffer-local-completion-map): Bind it to 'C-x C-v'.
(display-completion-list, minibuffer-completion-help): Take
'minibuffer-completions-sort-function' into account.
(completions-header-format): Add '%t' format spec construct,
substituted with a description of the current sort order.
* lisp/menu-bar.el (minibuffer-local-completion-map): Add menu bar
menu entry for sorting completions candidates.
* doc/emacs/mini.texi (Completion Commands): Document new command.
Improve documentation and indexing of 'minibuffer-complete-and-exit'.
(Completion Exit, Completion Options): Update
* doc/lispref/minibuf.texi (Completion Commands): Document new user
options and command.
* etc/NEWS: Announce new feature.
2024-01-21 07:57:15 +01:00
Eshel Yaron
1054200149
; (completion-metadata): Mention 'narrow-completions-function'. 2024-01-21 07:57:15 +01:00
Eshel Yaron
9877858fa2
; Support removing individual completions restrictions
* lisp/minibuffer.el (minibuffer-widen-completions): New optional
argument ALL, if nil prompt for individual restrictions to remove.
Also, take into account completions boundaries when calling
'minibuffer-completion-help'.
* doc/emacs/mini.texi (Completion Commands, Narrow Completions):
Update documentation.
* lisp/menu-bar.el (map): Update help text.
2024-01-21 07:57:14 +01:00
Eshel Yaron
4f85e6f58a
; Respect 'completion-boundaries' in 'completions-auto-update'
* lisp/minibuffer.el (minibuffer-regexp-mode): Use new helper function
'minibuffer--completion-help' to compute completion boundaries.
2024-01-21 07:57:14 +01:00
Eshel Yaron
c896c757a9
; Respect 'completion-boundaries' in narrow-completions commands
* lisp/minibuffer.el (minibuffer--completion-boundaries): New helper
function, return 'completion-boundaries' for minibuffer input as
a pair of buffer positions in the minibuffer.
(minibuffer--add-completions-predicate)
(minibuffer-narrow-completions-by-regexp)
(minibuffer-narrow-completions-to-current): Use it.
2024-01-21 07:57:14 +01:00
Eshel Yaron
fd705bffff
Add Completions Auto Update minor mode
This adds a new global minor that updates the *Completions* buffer as
you type in the minibuffer.

* lisp/minibuffer.el (completions-auto-update-idle-time): New option.
(completions-auto-update-timer): New buffer-local variable.
(completions-auto-update)
(completions-auto-update-start-timer)
(completions-auto-update-setup)
(completions-auto-update-exit): New functions.
(completions-auto-update-mode): New global minor mode.
* doc/emacs/mini.texi (Completion Options): Document it.
* etc/NEWS: Announce it.
2024-01-21 07:57:14 +01:00
Eshel Yaron
aa1decd16b
; doc/emacs/mini.texi: Improve cross referencing. 2024-01-21 07:57:13 +01:00
Eshel Yaron
5725301b01
* doc/lispref/minibuf.texi (Completion Commands): Fix typos. 2024-01-21 07:57:13 +01:00
Eshel Yaron
af71861125
Support narrowing (restricting) minibuffer completions
Add new minibuffer commands for restricting the list of possible
completion candidates.

* lisp/minibuffer.el (completion-fail-discreetly): Fix docstring typo.
(minibuffer-narrow-completions-function): New variable.
(completion--fail, minibuffer-narrow-completions-p)
(minibuffer-narrow-completions-by-regexp)
(minibuffer--completion-predicate-description)
(minibuffer--add-completions-predicate): New functions.
(minibuffer-narrow-completions-to-current)
(minibuffer-narrow-completions)
(minibuffer-widen-completions): New commands.
(minibuffer-narrow-completions-map): New prefix keymap.  Bind new
commands to 'n', 'm' and 'w', respectively.
(minibuffer-local-completion-map): Bind new prefix keymap to 'C-x n'.
(completions-header-format, completion--do-completion)
(display-completion-list, minibuffer-completion-help): Update.

* lisp/simple.el (completions-narrow-mode): New minor mode.
(completion-setup-function): Enable it in *Completions* buffer when
there are completions restrictions in place.

* lisp/menu-bar.el (minibuffer-local-completion-map): Add completions
narrowing commands to "Minibuf" menu.

* lisp/help-fns.el (help--symbol-completion-table): Provide bespoke
'narrow-completions-function' that keeps only symbols with a given
symbol property.

* doc/emacs/emacs.texi (Top)
* doc/emacs/mini.texi (Completion): Update menu.
(Narrow Completions): New subsection.
(Completion Commands, Completion Styles)
(Completion Options)
* doc/emacs/help.texi (Name Help)
* doc/lispref/minibuf.texi (Completion Commands):
(Programmed Completion): Update documenation.

* etc/NEWS: Announce new feature.
2024-01-21 07:57:12 +01:00
Dmitry Gutov
0a07603ae8 project-recompile: New command
* lisp/progmodes/project.el (project-recompile):
New command (bug#68570).
2024-01-21 07:08:43 +02:00
Po Lu
cc8d4b0c91 ; * etc/NEWS: Improve mwheel entry. 2024-01-21 12:50:45 +08:00
Po Lu
957b4f826a Don't invert wheel event directions
* lisp/mwheel.el (mwheel--is-dir-p): In Emacs, up means down and
down means up...
2024-01-21 12:50:45 +08:00
Stefan Monnier
eca7368039 * lisp/mwheel.el (mouse-wheel-obey-old-style-wheel-buttons): Simplify 2024-01-20 23:12:36 -05:00
Stefan Monnier
ca8d451561 (define-derived-mode): Fix bug#68600
* lisp/emacs-lisp/derived.el (define-derived-mode): Use a reference
to the mode symbol instead of the mode's "pretty" name in
the hook variable's docstring.
2024-01-20 23:00:54 -05:00
Po Lu
d88f9717ae ; * msdos/sedleim.inp: Adapt to Emacs 30. 2024-01-21 10:33:30 +08:00
Po Lu
e654f9ce1e * make-dist (possibly_non_vc_files): Append exec standard files. 2024-01-21 10:04:02 +08:00
Po Lu
8da6c8c7c1 ; * exec/Makefile.in: Correct typo. 2024-01-21 09:59:47 +08:00
Po Lu
10ffe161da Suppress detection of utmpx.h on Android
* configure.ac (ac_cv_header_utmpx_h): Predefine to no when
Android is older than 34.
2024-01-21 09:59:47 +08:00
Po Lu
76efd4037e ; * exec/Makefile.in (extraclean): Remove standard files. 2024-01-21 09:59:47 +08:00
Paul Eggert
416fad04c2 Omit -DHAVE_CONFIG_H
* configure.ac (CFLAGS): Do not add -DHAVE_CONFIG_H.  It is no
longer needed now that the Android printf hack has been removed.
2024-01-20 17:28:53 -08:00
Paul Eggert
bdcd662a21 Speed up make_lisp_symbol when debugging
* src/lisp.h (make_lisp_symbol): In eassert use XBARE_SYMBOL
rather than XSYMBOL.  This is safe because the symbol must be
bare.  The change speeds up make_lisp_symbol when debugging.
2024-01-20 17:28:53 -08:00
Paul Eggert
cf26f57316 Simplify and tune XSYMBOL
* src/lisp.h (XSYMBOL): Simplify and tune.  There is no need to
examine symbols_with_pos_enabled here, since the arg must be a symbol
so if it's not a bare symbol then it must be a symbol_with_pos;
and checking whether a symbol is bare is cheap.

With Ubuntu 23.10 on a Xeon W-1350, this shrank Emacs’s executable
text size by 0.1% and sped up a default build of all *.elc files by
0.4%.

Remove unnecessary eassert, since XBARE_SYMBOL and XSYMBOL_WITH_POS
have easserts that suffice.
2024-01-20 17:28:53 -08:00
Paul Eggert
b6ed79b71c Be more systematic about parens in C source code
Be more systematic about putting space before paren in calls,
and in avoiding unnecessary parentheses in macros.
This was partly inspired by my wading through gcc -E output
while debugging something else, and seeing too many parens.

This patch does not change the generated .o files on my platform.
2024-01-20 17:28:53 -08:00
Paul Eggert
0a47a5a4be Omit some parens
* src/lisp.h (XBARE_SYMBOL, XSYMBOL): Omit parentheses that are no
longer needed now that we have symbols with positions and these
symbols are never macros.
2024-01-20 17:28:53 -08:00
Paul Eggert
973c1b8a18 Pacify gcc -Wsuggest-attribute=malloc
* src/lisp.h (hash_table_alloc_bytes):
Declare with ATTRIBUTE_MALLOC_SIZE ((1)).
2024-01-20 17:28:52 -08:00
Paul Eggert
afc9cd1721 Fix autogen.sh’s spurious ‘git diff’ output
Problem reported by Gerd Möllmann (Bug#68464).
* .gitignore: Ignore files in exec that are now copied from build-aux.
* admin/merge-gnulib (avoided_flags): Instead of clearing
autom4te.cache here ...
* autogen.sh (do_git): ... clear it here.
Use config.guess, config.sub and install-sh from
the Emacs repository, as they are more likely to be up to date.
This avoids unnecessary differences among different builders,
and avoids unnecessary ‘git diff’ output after autogen.sh.
Also, copy these files from build-aux to exec since there
should be no difference between the two copies.
* exec/config.guess, exec/config.sub, exec/install-sh:
Remove from repository, as autogen.sh now copies them from build-aux.
2024-01-20 16:35:24 -08:00
Stefan Monnier
54d3de64e1 Merge branch 'mwheel-no-alts' 2024-01-20 15:04:12 -05:00
Stefan Monnier
998667f902 mwheel.el: Code clean to reduce duplication
* lisp/mwheel.el (mouse-wheel-obey-old-style-wheel-buttons): New var,
extracted from `mouse-wheel-*-event` definitions.
(mouse-wheel-down-event, mouse-wheel-up-event)
(mouse-wheel-left-event, mouse-wheel-right-event): Use it.
2024-01-20 15:03:26 -05:00
Stefan Monnier
18294854c7 mwheel.el: Remove mouse-wheel-*-alternate-event vars
Now that `wheel-DIR` events are hardcoded, we never need more than
one variable (which we actually never needed anyway, we could have
let `mouse-wheel-*-event` vars hold lists of events instead), so
remove the `mouse-wheel-*-alternate-event` vars by merging their
default value into that of the corresponding `mouse-wheel-*-event`.

* lisp/mwheel.el (mouse-wheel-down-event, mouse-wheel-up-event)
(mouse-wheel-left-event, mouse-wheel-right-event): Don't bother holding
`wheel-DIR` events since these are already handled anyway.
Hold the event that would have been held in
`mouse-wheel-DIR-alternate-event` instead.
(mouse-wheel-down-alternate-event, mouse-wheel-up-alternate-event)
(mouse-wheel-left-alternate-event, mouse-wheel-right-alternate-event):
Delete vars.
(mwheel--is-dir-p, mouse-wheel--setup-bindings):
* lisp/edmacro.el (edmacro-fix-menu-commands):
* lisp/completion-preview.el (completion-preview--mouse-map):
Don't use `mouse-wheel-up/down-alternate-event` any more.
* lisp/progmodes/flymake.el (flymake--mode-line-counter-map):
Do nothing, because it already ignored those vars.
2024-01-20 15:03:26 -05:00
Stefan Monnier
db8890b3c9 mwheel.el: Unconditionally use the wheel-up/down/... events
The `mouse-wheel-DIR-event` vars were introduced because under X11
we get different `mouse-N` events depending on the users' mouse and
those same events can be used for other things for other rodents, so we
can't unconditionally treat those events as mouse-wheel events.

But this does not apply to the `wheel-up/down/...` events.
So hard code them.

* lisp/mwheel.el (mwheel--is-dir-p): Always consider the `wheel-DIR` events.
(mouse-wheel--setup-bindings): Always bind the `wheel-DIR` events.

* lisp/completion-preview.el (completion-preview--mouse-map):
Unconditionally bind the `wheel-DIR` events.
* lisp/edmacro.el (edmacro-fix-menu-commands): Hard code the
`wheel-DIR` events as mouse events regardless of `mouse-wheel-*-event`s.
* lisp/progmodes/flymake.el (flymake--mode-line-counter-map):
Do nothing, because it's already been done in commit e5be6c7ae3.

* doc/lispref/commands.texi (Misc Events): Document the need to use
`wheel-up/down/left/right` unconditionally.
2024-01-20 15:03:26 -05:00
Stefan Monnier
82f71e106a * lisp/completion-preview.el: Fix use in non-GUI session
Fix loading in non-GUI sessions where `mwheel` is not preloaded.
Not requiring `mwheel` would be a lot more complex, since it would
require delaying the construction of `completion-preview--mouse-map`.

* lisp/completion-preview.el (<toplevel>): Require `mwheel`.
Remove correspondingly redundant `defvar`s.
(completion-preview--mouse-map): Use `key-description` rather than mimicking
it with `format`.
2024-01-20 15:03:26 -05:00
Stefan Monnier
eb779ae646 * lisp/keymap.el (define-keymap): Demote "duplicate def" to a warning
* test/src/keymap-tests.el (keymap-test-duplicate-definitions):
Adjust accordingly.
2024-01-20 15:03:05 -05:00
Paul Eggert
3add626f14 Update from Gnulib by running admin/merge-gnulib 2024-01-20 11:45:38 -08:00
Paul Eggert
d276996c4f Avoid Gnulib ‘access’ module
* admin/merge-gnulib (AVOIDED_MODULES): Add ‘access’,
since I don’t think Emacs cares about the Mac OS X 10.5
bug where faccessat ignores a trailing slash on a symlink
to a directory.  This will matter the next time we run
admin/merge-gnulib.
2024-01-20 11:45:37 -08:00
Eshel Yaron
412cc0212d Eldoc: play nice with mode-line-format-right-align (bug#68547)
* lisp/emacs-lisp/eldoc.el (eldoc-minibuffer-message): Avoid nesting
'mode-line-format', since that breaks 'mode-line-format-right-align'.
2024-01-20 06:00:21 -06:00
Eli Zaretskii
ce836aafaa ; Merge NEWS.29. 2024-01-20 06:40:54 -05:00
Eli Zaretskii
8bb5525b62 ; Fix merge snafus
* lisp/jsonrpc.el:
* lisp/progmodes/eglot.el: Fix merge snafus.
2024-01-20 06:37:09 -05:00
Eli Zaretskii
1b31a784bf Merge from origin/emacs-29
5bb5590dec Fix blunder in labeled_narrow_to_region
78ddb32fad Fix documentation of icon-elements
725a3f32f8 ; Fix typos in symbol names
6653ee66ca Improve two docstrings in ox-latex
7d869a0402 Doc fix in auth-source-read-char-choice
f149de223b Merge branch 'emacs-29' of git.savannah.gnu.org:/srv/git/...
1f97a87879 Fix info-xref-tests
51f391998b Add @kindex in manuals for existing keybindings on 'C-x x...
2024-01-20 06:25:59 -05:00
Eshel Yaron
3a5ee06057 ; Use HTML entities for reserved characters in 'dom-print'
* lisp/dom.el (dom-print): Encode HTML reserved characters in strings.
* test/lisp/dom-tests.el (dom-tests-print): New test.  (Bug#68508)
2024-01-20 11:40:22 +02:00
Po Lu
b3e4fbe867 Round projs computed executing IP/ISECT instructions and improve IUP
* src/sfnt.c (sfnt_multiply_divide_rounded): New function.
(sfnt_multiply_divide_signed): Always round values, as fonts
which rely on IP to move points in concert with prior motion and
subsequently round such points with MDAP are sensitive to minor
deviations in the behavior of the former instruction.
(load_unscaled): New macro.
(IUP_SINGLE_PAIR, sfnt_interpret_iup_1): Compute ratio w/
unscaled points if possible.
2024-01-20 09:30:04 +08:00
Stefan Monnier
a34b76cd66 trace.el: Mention the last change in NEWS 2024-01-19 15:04:50 -05:00
Stefan Monnier
1293aac0df trace.el: Make it usable in batch mode as well
While at it, this fixes a bug where a traced function was not
able to set `deactivate-mark`.

* lisp/emacs-lisp/trace.el (trace--insert): New function, extracted
from `trace-make-advice`.  Output to stdout in batch mode.
(trace--entry-message): Rename from `trace-entry-message`.
Change calling convention.  Do the insertion directly from here.
(trace--exit-message): Rename from `trace-exit-message`.
Change calling convention.  Do the insertion directly from here.
(trace-make-advice, trace-values): Simplify accordingly.
2024-01-19 15:02:50 -05:00
Po Lu
bd5bfc2913 Fix another cause of superfluous inotify signals on Android
* src/android.c (android_select): If the event queue isn't
empty upon the initial check, clear all fdsets.
2024-01-19 20:51:24 +08:00
F. Jason Park
dd2caf1a76 Redo doc strings for ERC's entry point commands
* lisp/erc/erc.el: Bump Compat version in Package-Requires header to
29.1.4.4.
(erc-select-read-args): Revise doc string, and update name of internal
`--interactive-env--' entry-point parameter.
(erc, erc-tls): Don't use `&interactive-env' as a variable name, in
case it confuses persons or programs.  Overhaul doc string in response
to user complaints.  For `erc' specifically, include literal
`:keyword' symbols to help non-Emacs users understand the required
syntax, which isn't obvious without an example, like `erc-tls' has,
and with only "&key" and upcased metasynctatic variables to go by.
(erc--current-buffer-joined-p): Remove assertion.
* test/lisp/erc/erc-scenarios-keep-place-indicator.el
(erc-scenarios-keep-place-indicator--follow): Try waiting for
intermittently failing condition.
* test/lisp/erc/erc-tests.el (erc-select-read-args): Update name of
internal keyword variable.
2024-01-18 17:06:08 -08:00