Eli Zaretskii [Mon, 23 Mar 2020 14:37:27 +0000 (16:37 +0200)]
Don't build the Gnulib 'utimens' module on MinGW
* nt/gnulib-cfg.mk (OMIT_GNULIB_MODULE_utimens): Omit the
'utimens' module in the MinGW build: 'utimens' is not used by
Emacs, and 'fdutimens' is implemented in w32.c.
Noam Postavsky [Fri, 20 Mar 2020 08:07:39 +0000 (04:07 -0400)]
Don't signal during backtrace unrewind (Bug#40088)
backtrace_eval_unrewind is used to temporarily reverse
let-bindings (it's called with a positive argument to reverse
bindings, and then a negative argument to re-apply them) by
backtrace--locals and backtrace-eval. For the SPECPDL_LET_DEFAULT and
SPECPDL_LET_LOCAL cases (which occur for let-bindings on buffer-local
variables), the code calls Fdefault_value and Fbuffer_local_value on
the symbol.
For symbols which are unbound at top-level, the first (with positive
argument) call to backtrace_eval_unrewind will set the symbol's value
to unbound (putting the current value in the specpdl's "old value"
slot). On the second (with negative argument) call,
backtrace_eval_unrewind attempts to retrieve the symbol's value with
Fdefault_value or Fbuffer_local_value, but that raises a void-variable
signal. This interrupts the restoration of the let-bindings, so any
other variables more recent on the stack will now have the wrong
value.
* src/data.c (default_value): Make non-static.
* src/lisp.h: Declare it.
* src/eval.c (backtrace_eval_unrewind): Replace the calls to
Fdefault_value and Fbuffer_local_value with default_value and
buffer_local_value, respectively. The latter do exactly the same as
the former, except if the symbol's value is Qunbound they just return
it instead of signaling void-variable.
Noam Postavsky [Fri, 20 Mar 2020 10:00:11 +0000 (06:00 -0400)]
Fix a couple of problems in changelog generating functions
* lisp/vc/diff-mode.el (diff-add-log-current-defuns): If there is a
scan-error when calling end-of-defun, go to end of hunk. This can
easily happen since we are calling end-of-defun on a partial code
fragment from a diff.
* lisp/vc/log-edit.el (log-edit-generate-changelog-from-diff): Bind
display-buffer-overriding-action around the log-edit-show-diff call
only. Otherwise, it can affect, for example, debugger windows
triggered by the diff-add-log-current-defuns call.
Noam Postavsky [Sun, 22 Mar 2020 11:48:14 +0000 (07:48 -0400)]
Fix cl-concatenate (Bug#40180)
* lisp/emacs-lisp/cl-extra.el (cl-concatenate): Use apply, to avoid
adding extra nesting of args.
* test/lisp/emacs-lisp/cl-extra-tests.el (cl-concatenate): New test.
Eli Zaretskii [Sat, 21 Mar 2020 11:26:19 +0000 (13:26 +0200)]
Improve documentation of project.el commands
* lisp/progmodes/project.el (project-find-regexp): Require 'grep'
to be able to call 'grep-read-files'.
(project-search, project-query-replace-regexp): Doc fixes.
* doc/emacs/maintaining.texi (Projects): New section.
* doc/emacs/emacs.texi (Top): Add "Projects" to the detailed menu.
* lisp/vc/ediff-init.el (ediff-temp-file-prefix): Redefine as
obsolete variable alias for 'temporary-file-directory'.
* lisp/vc/ediff-util.el (ediff-make-temp-file): Don't use obsolete
variable name.
Stefan Kangas [Sat, 21 Mar 2020 01:47:08 +0000 (02:47 +0100)]
Declare some <package>-version variables obsolete
These are not used for anything these days and can therefore be
removed. Package developers should check the Emacs version instead.
Ref: https://lists.gnu.org/r/emacs-devel/2020-03/msg00080.html
Juri Linkov [Thu, 19 Mar 2020 23:21:57 +0000 (01:21 +0200)]
* lisp/tab-line.el (tab-line-new-button-show): New defcustom.
* lisp/tab-line.el (tab-line-format-template): Use tab-line-new-button-show.
(tab-line-new-tab-choice): Remove choice 'nil' with "No button".
(tab-line-separator): Add docstring.
* lisp/image/exif.el (exif--direct-ascii-value): New function
(bug#40127).
(exif--parse-directory): Use it to get the correct values for
in-directory (i.e., shorter than 4 octets) strings.
* lisp/image/exif.el (exif--direct-ascii-value): New function
(bug#40127).
(exif--parse-directory): Use it to get the correct values for
in-directory (i.e., shorter than 4 octets) strings.
Eli Zaretskii [Thu, 19 Mar 2020 14:57:35 +0000 (16:57 +0200)]
Fix display of :box face when overlay strings are around
* src/xdisp.c (reset_box_start_end_flags): New function.
(handle_face_prop): Only set the start_of_box_run_p flag, don't
reset it.
(pop_it): Set the face_box_p flag, if the popped face requires
that, when continuing iteration over buffer text.
(get_next_display_element, next_element_from_display_vector): Only
set the end_of_box_run_p flag, never reset it here.
(set_iterator_to_next): Don't reset the start_of_box_run_p and
end_of_box_run_p flags here. They are now reset as side effect of
PRODUCE_GLYPHS.
(append_space_for_newline): Restore the end_of_box_run_p flag
after PRODUCE_GLYPHS where we previously didn't reset it.
* src/dispextern.h (PRODUCE_GLYPHS): Call
reset_box_start_end_flags after producing glyphs.
(Bug#40124)
Paul Eggert [Wed, 18 Mar 2020 21:48:52 +0000 (14:48 -0700)]
Omit timestamp optimization invalid on 387 FPU
* src/timefns.c (frac_to_double): Omit optimization that is
invalid on machines with excess precision (e.g., gcc x86 with 387
FPU), because it double-rounds. Found via ‘gcc -m32’ on x86-64.
Glenn Morris [Wed, 18 Mar 2020 14:50:37 +0000 (07:50 -0700)]
Merge from origin/emacs-27
e92b8e535a (origin/emacs-27) Remove raw carriage return characters fr... 5747a59a88 Recalculate default font when switching font backend a2dd8c4234 * lisp/tab-line.el: Fix tab-line-format and tab-line-forma... a7b8291b6c * etc/NEWS: Make the `--eval` example slightly more precise f8254aad14 * lisp/image/image-converter.el: Support more ImageMagick ... 5beb269505 Support Unicode 13.0 3a671ad7ed Fix regression in wisent-total-conflicts
Don't generate useless range table entries for ASCII chars
In multibyte regexps, each ASCII char or range in a character
alternative produces a nonsense range table entry in addition to the
correct bits in the ASCII bitmap. Those entries do not match anything
but waste space and time.
Robert Pluim [Mon, 16 Mar 2020 16:21:02 +0000 (17:21 +0100)]
Recalculate default font when switching font backend
This is an updated version of the patch by Dmitry Antipov
<dmantipov@yandex.ru> in
<https://debbugs.gnu.org/cgi/bugreport.cgi?bug=23386#43>.
Fixes Bug#23386
* src/dispextern.h (struct redisplay_interface): New member
default_font_parameter.
* src/xterm.h: Add prototype for x_default_font_parameter.
* src/xterm.c (x_redisplay_interface): Initialize
default_font_parameter member.
* src/xfns.c (x_default_font_parameter): Make non-static.
* src/w32term.h: Add prototype for w32_default_font_parameter
* src/w32fns.c (w32_default_font_parameter): Make non-static.
* src/w32term.c (w32_redisplay_interface): Initialize
default_font_parameter member.
* src/nsterm.m (ns_redisplay_interface): Add dummy
ns_default_font_parameter (there is currently only one possible font
backend on macOS). Initialize default_font_parameter member.
* src/frame.c (gui_set_font_backend): Recalculate default font using
RIF default_font_parameter to avoid crash when changing font backend.
Juri Linkov [Mon, 16 Mar 2020 23:11:27 +0000 (01:11 +0200)]
* lisp/tab-line.el: Fix tab-line-format and tab-line-format-template.
* lisp/tab-line.el (tab-line-format): Use buffer-name in the cache key
instead of just buffer object to invalidate the cache on buffer renaming.
(tab-line-format-template): Always leave the separator after the last tab
like tab-bar.el already does.
Yuan Fu [Sun, 15 Mar 2020 15:47:43 +0000 (16:47 +0100)]
Add store/restore window configuration feature for gdb-mi
Add a feature that allows a user to save a gdb window
configuration (window layout) to a file with
'gdb-save-window-configuration' and load it back with
'gdb-load-window-configuration'. Set a default window configuration
by setting 'gdb-default-window-configuration-file'.
Add an option to make gdb preserve the window configuration
that the user had before starting gdb. In window.el, add
'with-window-non-dedicated'.
* lisp/progmodes/gdb-mi.el (top/level): Require 'pcase' and 'cl-seq'.
(gdb--window-configuration-before): New variable.
(gdb-restore-window-configuration-after-quit): New option.
(gdb-window-configuration-directory,
gdb-default-window-configuration-file): New variables.
(gdb): Save configuration on startup.
(gud-menu-map): Add "Load Layout" and "Save Layout" to menu. Add
"Restore Layout After Quit" button to menu. Rename "Restore Window
Layout" to "Restore Default Layout", add some help echo, and move it
from "GDB-MI" menu to "GDB-WINDOWs" menu.
(gdb-toggle-restore-window-configuration): New function.
(gdb-get-source-buffer): New function, extracted out of
'gdb-restore-window'.
(gdb-setup-windows): Add a condition branch that loads default window
configuration when available. Fix docstring.
(gdb-buffer-p, gdb-function-buffer-p, gdb--buffer-type,
gdb-save-window-configuration, gdb-load-window-configuration): New
functions.
(gdb-restore-windows): Edit docstring to mention
'gdb-default-window-configuration-file'.
(gdb-reset): Restore window configuration after quit.
* lisp/window.el (with-window-non-dedicated): New macro.
Eli Zaretskii [Sun, 15 Mar 2020 14:47:54 +0000 (16:47 +0200)]
Reverse the meaning of 2nd arg to 'live_buffer_holding'
* src/alloc.c (live_buffer_holding): Rename ALL_BUFFERS ti
IGNORE_KILLED, and reverse the condition for returning killed
buffers.
(live_buffer_p): Add commentary.
(live_buffer_p, mark_maybe_object, mark_maybe_pointer): Reverse
the 2nd argument to live_buffer_holding. (Bug#39962)
Juri Linkov [Sat, 14 Mar 2020 23:58:58 +0000 (01:58 +0200)]
* lisp/image/image-converter.el: Support more ImageMagick versions (bug#39994)
* lisp/image/image-converter.el (image-converter--probe): Match
a possible additional second column in some ImageMagick versions
of "convert -list format".
Stefan Monnier [Sat, 14 Mar 2020 19:39:31 +0000 (15:39 -0400)]
* lisp/progmodes/sql.el: Try and avoid `eval`; use define-derived-mode
Remove redundant `:group` args.
(sql-interactive-mode-map): `set-keymap-parent` is always fboundp.
(sql-get-product-feature): Prefer `symbol-value` over `eval`.
(sql--adjust-interactive-setup): New function, extracted from
`sql-interactive-mode`.
(sql-interactive-mode): Use it and `define-derived-mode`.
(sql-connect, sql-connection-menu-filter): Prefer `cl-progv` over `eval`.
* admin/unidata/blocks.awk: Add "Symbols for Legacy Computing" to
known aliases.
* lisp/international/fontset.el (script-representative-chars)
(setup-default-fontset): Add new scripts.
* lisp/international/characters.el: Set syntax for Symbols for
Legacy Computing characters. Update setting of char-width-table.
* lisp/international/mule-cmds.el (ucs-names): Update ranges of
characters for which we want names in 'ucs-names'.
* test/lisp/international/ucs-normalize-tests.el
(ucs-normalize-tests--failing-lines-part1)
(ucs-normalize-tests--failing-lines-part2): Update according to
'ucs-normalize-check-failing-lines'.
* lisp/cedet/semantic/wisent/comp.el (wisent-total-conflicts):
There may not be a current source file. In that case, don't try
to keep track of the number of expected conflicts (bug#39911).
Make previous mml-expand-html-into-multipart-related fix more general
* lisp/gnus/mml.el (mml-expand-html-into-multipart-related): This is
function is now called by a recursive
engine (mml-expand-all-html-into-multipart-related). The structure of
the returned value should be identical between an untouched part and a
expanded multipart (bug#39230).
Stefan Kangas [Sat, 14 Mar 2020 09:03:09 +0000 (10:03 +0100)]
Improve Package Menu hiding docstrings
* lisp/emacs-lisp/package.el (package-menu-toggle-hiding): Add
reference to 'package-menu-hidden-regexps'.
* lisp/emacs-lisp/package.el (package-menu-hide-package): Improve
docstring to say that hiding is saved in a user option. Fix a
typo. (Bug#39436)
Avoid regexp stack overflow in GDB string matching (bug#22149)
* lisp/progmodes/gdb-mi.el (gdb--string-regexp):
Swap the or-clauses so that the rarely matching one comes first.
This avoids a build-up of backtrack points on the regexp stack.
Glenn Morris [Fri, 13 Mar 2020 14:50:33 +0000 (07:50 -0700)]
Merge from origin/emacs-27
a2b07f9f11 (origin/emacs-27) ; * etc/NEWS: Explain how to get back ol... b468b3d1ff Fix a recent documentation change 1ab766fd58 Fix last change ecfe633993 * lisp/tab-bar.el: Last-minute changes. c1ce9fa7f2 * lisp/subr.el (cancel-change-group): Fix bug#39680 ef5744a988 Improve docs for horizontal scrolling with mouse and touch... 1bc3fa0bd0 * lisp/emacs-lisp/package.el (package-install): Fix typo i... 4537976afd Port .gdbinit to clang with -gdwarf-4 0883c800a0 Simplify rx example in manual a695189248 ; * etc/NEWS: Fix typo.
Noam Postavsky [Fri, 13 Mar 2020 01:07:56 +0000 (21:07 -0400)]
Make cl-equalp a bit more efficient at comparing strings
* lisp/emacs-lisp/cl-extra.el (cl-equalp): Use compare-strings with
the IGNORE-CASE argument, rather than creating downcased copies of the
strings to be compared.
Noam Postavsky [Fri, 13 Mar 2020 01:03:45 +0000 (21:03 -0400)]
rcirc: Match NickServ messages case-insensitively (Bug#39345)
Reported by Jake Nelson <jake.nelson@gmail.com>.
* lisp/net/rcirc.el (rcirc-check-auth-status): NickServ will response
will show the nick in the same case used during registration, but
it allows case-insensitive matches when logging in. Therefore, we
should accept response messages regardless of case.
Juri Linkov [Fri, 13 Mar 2020 00:10:55 +0000 (02:10 +0200)]
* lisp/tab-bar.el: Last-minute changes.
* lisp/tab-bar.el (tab-bar-mode): Check for non-nil
tab-bar-new-button and tab-bar-close-button.
(tab-bar-new-button-show): New defcustom.
(tab-bar-make-keymap-1): Check for tab-bar-new-button-show.
(tab-bar-separator): Add docstring.
Fix NS child frame in native fullscreen (bug#36672)
* lisp/frame.el (toggle-frame-fullscreen): Don't sleep on cocoa.
Fullscreen animation waiting is moved to src/nsterm.m.
* src/nsterm.h (EmacsView): Add in_fullscreen_transition,
inFullScreenTransition, waitFullScreenTransition.
(NSWindowCollectionBehaviorFullScreenAuxiliary): New define.
* src/nsterm.m (ns_make_frame_visible): Wait for fullscreen animation.
(ns_set_parent_frame): Set frame collection behavior; make child frames
non-fullscreen; make non-child frames fullscreen if parent was fullscreen.
([EmacsView initFrameFromEmacs]): Set in_fullscreen_transition; set frame
collection behavior according to parent frame.
([EmacsView windowDidMove]): Remove code by commenting with "fixme".
([EmacsView windowWillEnterFullScreen], [EmacsView windowDidEnterFullScreen])
([EmacsView windowWillExitFullScreen], [EmacsView windowDidExitFullScreen]):
Set in_fullscreen_transition.
([EmacsView inFullScreenTransition], [EmacsView waitFullScreenTransition]):
New methods.
([EmacsView updateCollectionBehavior]): Set collection behavior according to
parent frame.
([EmacsView toggleFullScreen]): Wait for fullscreen animation.
Don't re-use an existing `pending-undo-list` even if (eq last-command 'undo)
since there might have been changes to the buffer since that `undo` command
and the `pending-undo-list` can hence be invalid for the current
buffer contents.
Stefan Monnier [Tue, 10 Mar 2020 22:23:41 +0000 (18:23 -0400)]
* lisp/emacs-lisp/cl-macs.el: More care with `eval` and with `cl-typep`
(cl-eval-when, cl--compile-time-too, cl-load-time-value):
Obey lexical-binding.
(cl-check-type): Prefer the predicate rather than the type in the
error signal when it's easy to do (as is done outside of CL).
(cl-deftype-satisfies): Add definitions for standard types.
Daniel Gröber [Sun, 8 Mar 2020 18:04:13 +0000 (14:04 -0400)]
* lisp/term/rxvt.el: Enable backeted paste and window title
rxvt-unicode uses the same escape sequences as xterm so just re-use
the xterm functions to enable them. The `xterm-rxvt-function-map`
keymap already has
(define-key map "\e[200~" [xterm-paste])
so we're already handling the paste sequence and only need to enable it.
Tested on rxvt-unicode version 9.22.
(rxvt-set-window-title): New var.
(terminal-init-rxvt): Use it; enable bracketed paste mode;
run terminal-init-rxvt-hook.
Eli Zaretskii [Sun, 8 Mar 2020 15:00:10 +0000 (17:00 +0200)]
Fix the MinGW build as followup to recent "nofollow" changes
* src/w32.c (fdutimens): Call utimensat instead of utime.
(set_file_times): Function deleted.
(convert_from_timespec): Renamed from convert_from_time_t and
modified to accept 'struct timespec' argument instead of 'time_t'.
(utimensat): Renamed from utime and modified to accept 'struct
timespec [2]' argument and an additional argument FLAG. Emulate
Posix 'utimensat'. Call 'convert_from_timespec'.
(w32_copy_file): Call 'utimensat' instead of 'set_file_times'.
* src/fileio.c (Fcopy_file) [WINDOWSNT]: Make the error message be
identical to that on Posix platforms.
Stefan Monnier [Sun, 8 Mar 2020 04:28:12 +0000 (23:28 -0500)]
* lisp/emacs-lisp/bytecomp.el: Drop warning for loading into Emacs<23
Stash the major version of the compiling Emacs such that the loading
Emacs can later detect when loading a file compiled by a too-new Emacs.
(byte-compile-fix-header): Remove.
(byte-compile-from-buffer): Don't call it any more.
(byte-compile-insert-header): Stash the emacs-major-version in it.
Don't leave space for `byte-compile-fix-header`.
Fixes (Bug#39761) by making cl-extra dependent on seq rather than
vice versa.
* lisp/emacs-lisp/seq.el (seq-concatenate): Move cl-concatenate's
code here instead of calling it.
* lisp/emacs-lisp/cl-extra.el (cl-concatenate): Use cl-concatenate.
Paul Eggert [Sat, 7 Mar 2020 20:04:05 +0000 (12:04 -0800)]
Add ‘nofollow’ flag to set-file-times
This is a companion to the recent set-file-modes patch.
It adds support for a ‘nofollow’ flag to set-file-times (Bug#39773).
Like the set-file-modes patch, it needs work in the w32 port.
* admin/merge-gnulib (GNULIB_MODULES): Add futimens, utimensat.
Remove utimens.
* doc/lispref/files.texi (Changing Files):
* etc/NEWS: Mention the change.
* lib/gnulib.mk.in, m4/gnulib-comp.m4: Regenerate.
* lisp/files.el (copy-directory):
* lisp/gnus/gnus-cloud.el (gnus-cloud-replace-file):
* lisp/net/tramp-adb.el (tramp-adb-handle-copy-file):
* lisp/net/tramp-smb.el (tramp-smb-handle-copy-file):
* lisp/tar-mode.el (tar-copy):
* test/lisp/filenotify-tests.el (file-notify-test03-events):
* test/lisp/files-tests.el:
(files-tests-file-name-non-special-set-file-times):
* test/lisp/net/tramp-tests.el (tramp-test22-file-times):
When setting file times, avoid following symbolic links
when the file is not supposed to be a symbolic link.
* lib/futimens.c, lib/utimensat.c, m4/futimens.m4, m4/utimensat.m4:
New files, copied from Gnulib.
* lisp/gnus/gnus-cloud.el (gnus-cloud-replace-file):
When creating a file that is not supposed to exist already,
use the excl flag to check this.
* lisp/net/tramp-adb.el (tramp-adb-handle-set-file-times):
* lisp/net/tramp-sh.el (tramp-sh-handle-set-file-times):
* lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-set-file-times):
Accept an optional FLAG arg that is currently ignored,
and add a FIXME comment for it.
* lisp/net/tramp-gvfs.el (tramp-gvfs-handle-set-file-times):
* src/fileio.c (Fset_file_times):
Support an optional FLAG arg.
* src/fileio.c (Fcopy_file): Use futimens instead of set_file_times,
as it’s simpler and is a POSIX API.
* src/sysdep.c (set_file_times): Move from here ...
* src/w32.c (set_file_times): ... to here, and make it static,
since it is now used only in w32.c. Presumably w32.c should also
add support for futimens and utimensat (the POSIX APIs, which
Emacs now uses) and it can remove fdutimens (the Gnulib API,
which Emacs no longer uses).