* doc/lispref/files.texi (Saving Buffers): Document it.
* lisp/files.el (file-preserve-symlinks-on-save): New user option
(bug#18125).
(basic-save-buffer-2): Use it.
* doc/emacs/files.texi (Copying and Naming): Document it.
* lisp/files.el (copy-directory): Allow copying symbolic links as
is (bug#10897).
(copy-directory-create-symlink): New user option.
Copyright-paperwork-exempt: yes
* lisp/simple.el (execute-extended-command): Move finding the
short command to the timer command, too (bug#50042). This further
ensures that post-command-hook is run faster.
* lisp/simple.el (execute-extended-command): Remove all the
waiting from the command and do it all with timers (bug#50042).
This ensures that post-command-hook is run immediately also when
the command has messaged something.
The Mac platform convention is to use control-left-click for context
menus (as a synonym to right-click).
* lisp/mouse.el (context-menu--old-bindings): Remove.
(context-menu--saved-bindings)
(context-menu--bind-mouse, context-menu--reset-bindings): New.
(context-menu-mode): Use new functions, with C-mouse-1 as extra
binding on NS.
* lisp/progmodes/xref.el (xref--next-error-function):
Bind `xref--current-item` during the call to `xref--show-location` so
that `xref-pulse-momentarily` finds the match extent.
* test/lisp/custom-tests.el (custom-tests-require-theme): Fix a
native-comp-related test failure.
In this test, we set load-path to nil, and under native-comp some of
the tests want to give a warning:
Warning (comp): Cannot look-up eln file as no source file was
found for /tmp/custom-tests-bfdbkW/custom-tests--d.elc
But we can't load warning.el after setting load-path to nil, so
require it first.
In particular, this makes the recently added
icomplete-vertical-goto-last (bug#49005) be O(n) instead of O(n^2).
That used to be almost unbearably slow for large n.
* lisp/icomplete.el (icomplete-forward-completions): don't call last
unless needed.
* lisp/calendar/appt.el (appt-check): Add space at the end
(bug#18164) -- all `global-mode-string' elements should have it
there to get an even space distribution.
* lisp/image-dired.el (image-dired-tag-history): New variable holding the
tag history.
(image-dired-tag-files, image-dired-tag-thumbnail, image-dired-delete-tag)
(image-dired-tag-thumbnail-remove): Use it for the user input.
It's more usual to have the newline at the end of the line, instead of the
beginning. This change avoids missing newline at the end of the file, an
empty line at the start and eventually a lot of empty lines when
`require-final-newline' is not nil.
* lisp/image-dired.el (image-dired-write-tags): Insert newline at the end
of the line, instead of the beginning.
(image-dired-remove-tag): Do not delete empty line at end of buffer.
* doc/lispref/display.texi (Echo Area Customization):
* src/xdisp.c (syms_of_xdisp): Adjust the documentation of
message-truncate-lines to changes that fixed bug#46718.
Fixes: bug#48545
* lisp/icomplete.el (icomplete--augment): Rewrite from icomplete--affixate.
(icomplete--render-vertical): Rework.
(icomplete--vertical-minibuffer-setup): Separator is hardcoded "\n", no
need to set.
This version is functionally equivalent, but doesn't duplicate any
code. When nothing "flexy" is happening, it works by simply not doing
any metadata adjustments, instead of attempting to synthesize a
function to mimic the non-flex case.
* lisp/minibuffer.el (completion--flex-adjust-metadata): Simplify.
* lisp/tab-bar.el (tab-bar-map): Bind mouse-4/wheel-up/wheel-left
to tab-previous and mouse-5/wheel-down/wheel-right to tab-next.
Bind S-mouse-4/wheel-up/wheel-left to tab-bar-move-tab-backward
and S-mouse-5/wheel-down/wheel-right to tab-bar-move-tab.
(tab-bar-move-tab-backward): New command.
(tab-bar-move-repeat-map): Use tab-bar-move-tab-backward
instead of lambda.
* src/xterm.c (handle_one_xevent): Remove restriction
to allow clicking mouse-4 and mouse-5.
* lisp/tab-bar.el (tab-bar-mouse-move-tab): New command.
(tab-bar-map): Bind [drag-mouse-1] to tab-bar-mouse-move-tab.
(tab-bar-select-tab): Zero or nil arg means the current tab.
* src/xdisp.c (handle_tab_bar_click): Remove restriction
to allow dragging the tab to another tab.
Instead of emitting menu-item keys like [tab-1],
emit normal mouse events like [mouse-1] and [down-mouse-3]
for all mouse clicks issued on the tab-bar.
* lisp/mouse.el (mouse-posn-property): Handle 'tab-bar' posn-area.
* lisp/tab-bar.el (tab--key-to-number): New internal function.
(tab-bar-handle-mouse): Use tab key to select/close tab.
(tab-bar-mouse-select-tab, tab-bar-mouse-close-tab)
(tab-bar-mouse-context-menu): New commands.
(tab-bar-map): Bind [down-mouse-1] to tab-bar-mouse-select-tab,
[down-mouse-2] to tab-bar-mouse-close-tab,
[down-mouse-3] to tab-bar-mouse-context-menu.
(tab-bar-keymap-cache): Remove.
(tab-bar-make-keymap): Don't use cache.
(tab-bar--format-tab): Remove default bindings from menu items.
(tab-bar-make-keymap-1): Prepend tab-bar-map.
* src/keyboard.c (make_lispy_event): Append event->arg to position
for Qtab_bar.
* src/term.c (handle_one_term_event): Simplify to set event arg.
* src/w32inevt.c (do_mouse_event): Set emacs_ev->arg to the value
returned from tty_handle_tab_bar_click.
* src/w32term.c (w32_handle_tab_bar_click): Return value from
handle_tab_bar_click.
(w32_read_socket): Set tab_bar_key to value returned from
w32_handle_tab_bar_click, and set event arg from it.
* src/xdisp.c (handle_tab_bar_click): Instead of emitting event,
return a list with Qtab_bar and tab caption with text properties
that contain Qmenu_item with key and binding.
(tty_handle_tab_bar_click): Simplify to return a list of Qtab_bar,
key and close_p, instead of emitting event.
* src/xterm.c (handle_one_xevent): Set tab_bar_key to value
returned from handle_tab_bar_click, and set event arg from it.
(context-menu-map): Remove menu title "Context Menu" (bug#50067).
(context-menu-minor): Reverse sub-menus to display exactly in the same order
as on the menu bar.
* lisp/term/linux.el (terminal-init-linux): Disable auto
compositions on "linux" consoles (bug#21363).
* src/composite.c (inhibit_auto_composition): New function to
implement this.
(composition_compute_stop_pos, composition_adjust_point)
(Ffind_composition_internal): Use it.
(syms_of_composite): Document it.
* src/lisp.h: Export tty_type_name.
* src/term.c (tty_type_name): Factored out.
(Ftty_type): Use it.
* lisp/image-dired.el (image-dired--with-marked): New macro for
cycling over marked thumbnails.
(image-dired-tag-thumbnail, image-dired-tag-thumbnail-remove): Can
handle now also all marked thumbnails.
(image-dired-tag-marked-thumbnails): Remove it, because it's
obsoleted by `image-dired-tag-thumbnail' now.
(image-dired-delete-marked): Use new macro
`image-dired--with-marked', and add command to menu (bug#50000).