Stephen Berman [Thu, 27 Aug 2020 11:53:22 +0000 (13:53 +0200)]
Prevent spurious tabs by RET in todo-edit-mode (bug#43068)
* lisp/calendar/todo-mode.el (todo-key-bindings-t)
(todo-edit-mode-map): Remove remapping of `newline' to
`newline-and-indent'.
(todo-modes-set-1): Remove local setting of `indent-line-function'.
(todo-edit-mode): Locally set `indent-line-function' to `todo-indent'.
* test/lisp/calendar/todo-mode-tests.el (todo-test-move-item05):
Prevent interactive test failure. (Until the addition of testcat4
to todo-test-1.todo, the test passed by chance, since testcat3 is
empty and has no archived items.)
(todo-test-edit-item-date-month): Refer to bug number.
(todo-test-multiline-item-indentation-1)
(todo-test-multiline-item-indentation-2)
(todo-test-multiline-item-indentation-3): New tests.
* test/lisp/calendar/todo-mode-resources/todo-test-1.todo: Remove
spurious tabs from testcat1.
Stefan Kangas [Thu, 27 Aug 2020 05:07:39 +0000 (07:07 +0200)]
Fix flyspell welcome message
* lisp/textmodes/flyspell.el (flyspell-mode, flyspell-mode-on):
Fix showing welcome message when `flyspell-issue-welcome-flag' and
`flyspell-issue-message-flag' are both non-nil. (Bug#43065)
Stefan Kangas [Thu, 27 Aug 2020 04:48:39 +0000 (06:48 +0200)]
Refer to correct mouse button in flyspell message
* lisp/textmodes/flyspell.el (make-flyspell-overlay)
(flyspell-mode-on): Refer to mouse-3 in help messages when the
variable 'flyspell-use-mouse-3-for-menu' is non-nil. (Bug#11680)
Stefan Kangas [Wed, 26 Aug 2020 19:53:17 +0000 (21:53 +0200)]
Signal error on Hunspell installation problem
* lisp/textmodes/ispell.el (ispell-find-hunspell-dictionaries):
Signal user-error when Hunspell warns that it "Can't open affix or
dictionary files", and propagate this message. (Bug#25825)
Stefan Kangas [Wed, 26 Aug 2020 22:50:59 +0000 (00:50 +0200)]
Sort Info index completions alphabetically
* lisp/info.el (Info-complete-menu-item): Sort the list of completions
alphabetically using 'nreverse'. This makes no difference for Emacs
but helps third-party completion frameworks such as Ivy. (Bug#38614)
Paul Eggert [Wed, 26 Aug 2020 20:25:35 +0000 (13:25 -0700)]
Fix expand-file-name symlink-to-dir bug
Problem reported by Yegor Timoshenko (Bug#26911),
and I ran into it myself recently in normal-top-level.
* doc/lispref/files.texi (File Name Expansion), etc/NEWS: Mention this.
* src/fileio.c (Fexpand_file_name): Expand "/a/b/." to "/a/b/" not
"/a/b", to avoid misinterpreting a symlink "/a/b". Similarly,
expand "/a/b/c/.." to "/a/b/" not "/a/b".
* test/lisp/net/tramp-tests.el (tramp-test05-expand-file-name):
Adjust to match new behavior.
(tramp-test05-expand-file-name-relative): This test now succeeds,
at least on Fedora 31.
* test/src/fileio-tests.el:
(fileio-tests--expand-file-name-trailing-slash) New test.
Paul Eggert [Wed, 26 Aug 2020 17:53:32 +0000 (10:53 -0700)]
Fix PWD startup checking with symlinks
* lisp/startup.el (normal-top-level): Do not put "." after "/";
it’s not needed and with current file-name-as-directory it does
the wrong thing if PWD is a symlink.
ispell: Commands to check comments or strings at point or in region
* lisp/textmodes/ispell.el (ispell-comments-and-strings): Accept START
and END arguments, defaulting to active region in interactive calls.
(ispell-comment-or-string-at-point): New command. (bug#6411)
Brian Leung [Wed, 26 Aug 2020 10:01:14 +0000 (12:01 +0200)]
eshell: Remove unnecessary check in em-hist
* lisp/eshell/em-hist.el
(eshell-previous-matching-input-string-position): Both before and
within the while loop, n is always smaller than n (bug#43056).
Fix lexical misunderstandings in gnus-icalendar-tests.el (bug#39782)
* test/lisp/gnus/gnus-icalendar-tests.el:
(icalendar-tests--get-ical-event): Remove unused function accidentally
copy-pasted from icalendar-tests.el.
(gnus-icalendar-parse, gnus-icalendary-byday):
Remove unintended initial newlines.
Duplicate comma-escaping backslashes so that they have intended
effects, conforming to RFC 5545.
Remove ineffective comma-escaping backslashes where not intended.
Paul Eggert [Wed, 26 Aug 2020 07:07:08 +0000 (00:07 -0700)]
regex-emacs: omit regstart tests and regend set
* src/regex-emacs.c (PUSH_FAILURE_REG, POP_FAILURE_REG_OR_COUNT)
(re_match_2_internal): Add some assertions that regstart
is set whenever regend is.
(re_match_2_internal): Omit two unnecessary REG_UNSET (regstart ...)s
and one unnecessary assignment to regend.
Paul Eggert [Wed, 26 Aug 2020 01:33:22 +0000 (18:33 -0700)]
Fix gpg2-related test failures on RHEL 7.8
* test/lisp/gnus/mml-sec-tests.el (test-conf)
(mml-secure-en-decrypt-passphrase-no-cache-openpgp-todo)
(mml-secure-run-tests-with-gpg2):
Use epg-find-configuration instead of the obsolescent
epg-configuration. This fixes test failures on RHEL 7.8,
where ‘gpg’ and ‘gpg2’ are both 2.0.22.
Stefan Kangas [Tue, 25 Aug 2020 22:37:40 +0000 (00:37 +0200)]
Add package prefix to jsonrpc defconst
* lisp/jsonrpc.el (jsonrpc-default-request-timeout): Rename from
'jrpc-default-request-timeout'.
(jrpc-default-request-timeout): Make into obsolete variable alias
for 'jsonrpc-default-request-timeout'. (Bug#40054)
Paul Eggert [Tue, 25 Aug 2020 21:27:17 +0000 (14:27 -0700)]
Omit "V" at the start of DEFVAR_BOOL vars
Problem noted by Stefan Monnier in:
https://lists.gnu.org/r/emacs-devel/2020-08/msg00846.html
* src/font.c (xft_ignore_color_fonts):
* src/syntax.c (comment_end_can_be_escaped):
* src/xdisp.c (word_wrap_by_category, display_fill_column_indicator):
Rename these DEFVAR_BOOL variables to avoid the initial "V"
that wrongly suggests that they are Lisp_Object variables.
All uses changed.
Eric Abrahamsen [Fri, 21 Aug 2020 20:36:58 +0000 (13:36 -0700)]
Add basic D-Bus integration to Gnus
* lisp/gnus/gnus-dbus.el: New library, registering a signal that
closes all Gnus servers when the system is going to sleep.
* lisp/gnus/gnus-start.el: Check new option
`gnus-dbus-close-on-sleep', and register the appropriate D-Bus signal
if it is non-nil.
* lisp/gnus/gnus.el: New gnus-dbus customization group.
* doc/misc/gnus.texi: Document.
Preserve setf semantics in 'substring', 'cons', 'logand' expanders
* doc/lispref/variables.texi (Adding Generalized Variables): Fix example.
* lisp/emacs-lisp/cl-lib.el (substring)
* lisp/emacs-lisp/gv.el (cons, logand): Return the value being
assigned, as specified for 'setf'. (bug#35546)
Tweak the file/buffer comparison from previous save-some-buffers change
* lisp/files.el (save-some-buffers): Relax the "similarity" regexp
from the previous regexp: Don't show both file and buffer names if
the file is /tmp/foo and the buffer name is foo<zot>.
* lisp/net/shr.el (shr-colorize-region): Extend backgrounds to the
end (bug#43031). This avoid ragged edges to the right when, for
instance, the <body> has a bgcolor.
(shr-face-background): Ditto.
Stephen Berman [Tue, 25 Aug 2020 11:30:58 +0000 (13:30 +0200)]
Tweak how "u" works in Info buffers when scroll-conservatively is set
* info.el (Info-up): If scroll-conservatively is non-zero and
less than 101, display as much of the superior node above the
target line as possible (Bug#13690).
Make shadowing warning in describe_map less confusing
* src/keymap.c (describe_map): A binding may be shadowed by
something else than a mode (bug#14086) (just a `define-key'
works), so don't say that it's a mode that shadows it.
Hideshow has defaults that are overridden if we look for derived modes
in hs-special-modes-alist. For instance, in lisp-interaction-mode
we'll choose a lookup based on parent modes, and that overrides the
default (bug#43032).
Paul Eggert [Mon, 24 Aug 2020 20:12:51 +0000 (13:12 -0700)]
replace-buffer-contents cleanups
* src/editfns.c (NOTE_DELETE, NOTE_INSERT): Avoid unnecessary parens.
(Freplace_buffer_contents): Check args before returning results.
Avoid integer overflow when computing too_expensive, and work even
if MAX-COSTS is bignum. Call alloca and/or malloc just once, not
three times.
(set_bit, bit_is_set): Simplify micro-optimization by using eassume.
Paul Eggert [Mon, 24 Aug 2020 20:12:51 +0000 (13:12 -0700)]
Fix replace-region-contents performance bug
* src/editfns.c (rbc_quitcounter): Remove; the quitcounter
is now part of the context.
(EXTRA_CONTEXT_FIELDS): Remove unused member early_abort_tests.
Add jmp, quitcounter.
(Freplace_buffer_contents): Use setjmp/longjmp to recover from
a compareseq that runs too long. Omit unnecessary rarely_quit
call.
(buffer_chars_equal): Occasionally check for early abort and
longjmp out if so (Bug#43016).
Rewrite the epa key interface to use buttons instead of widgets
* lisp/epa.el (epa-font-lock-keywords): Removed.
(epa-key-list-mode-map): Bind tab/backtab to button navigation.
(epa-key): Remove widget.
(epa--button-key-text): Return the propertized text instead of
return a widget text.
(epa-key-list-mode): Don't use font locking; everything is output
as it should be.
(epa--insert-keys): Rewrite to just output the data instead of
widgetising.
(epa--select-keys): Insert buttons instead of widgets.
Fix error when loading a new, non-existent foo.gpg file
* lisp/epa-file.el (epa-file-insert-file-contents): Propagate the
correct error upwards (bug introduced by fixing bug#3829, and
messing up where the `when' form ended).
Reported by "Herbert J. Skuhra" <herbert@gojira.at>.
Extend the default value in dired-diff to all the backup files
* lisp/dired-aux.el (dired-diff): When diffing files with backup
files, put all the backup files into the defaults so that they can
be reached with `M-n' from `read-file-name' (bug#24089).
Noam Postavsky [Mon, 24 Aug 2020 15:33:49 +0000 (17:33 +0200)]
Fix inferior octave single-quote font lock
* lisp/progmodes/octave.el (octave-mode-syntax-table): Fix
fontification of single quotes in inferior octave mode (bug#25517).
It looks like the problem is that octave-mode-syntax-table sets single
quotes as punctuation even though GNU Octave's manual says single quotes
are string syntax [1].
Have gnutls_symmetric cache the results from Fgnutls_ciphers
* src/gnutls.c (gnutls_symmetric): Cache the results from
Fgnutls_ciphers, since that function isn't very fast (bug#42998).
(syms_of_gnutls): Initialize cache variable.
Paul Eggert [Sun, 23 Aug 2020 21:59:15 +0000 (14:59 -0700)]
Simplify by using Gnulib sigdescr_np module
Inspired by a straightforward patch by Bruno Haible.
* admin/merge-gnulib (GNULIB_MODULES): Add sigdescr_np.
* configure.ac: Do not check for sys_siglist or __sys_siglist.
* lib/gnulib.mk.in, m4/gnulib-comp.m4: Regenerate.
* lib/sigdescr_np.c, m4/sigdescr_np.m4: New files, copied from Gnulib.
* src/sysdep.c (sys_siglist, sys_siglist_entries): Remove.
(init_signals): Do not initialize sys_siglist.
(safe_strsignal): Use sigdescr_np instead of sys_siglist.
Paul Eggert [Sun, 23 Aug 2020 21:09:48 +0000 (14:09 -0700)]
Update from Gnulib
This incorporates:
2020-08-23 intprops: be consistent about +X vs X+0
2020-08-23 intprops: fix INT_MULTIPLY_WRAPV bit-field bug
2020-08-23 verify: Make assume work on bit field expressions
2020-08-23 libc-config: Improve comments
2020-08-22 verify: Do use __builtin_assume on clang
2020-08-22 sig2str: Add more signals
2020-08-21 sigdescr_np: New module
* lib/cdefs.h, lib/intprops.h, lib/sig2str.c, lib/string.in.h:
* lib/verify.h, m4/string_h.m4: Copy from Gnulib.
* lib/gnulib.mk.in: Regenerate.
Eli Zaretskii [Sun, 23 Aug 2020 18:23:45 +0000 (21:23 +0300)]
Improve handling of coding-system mnemonic indicators
This fixes assertion violations when the mnemonic is
given as a string, and allows non-ASCII characters be
used as mode-line mnemonic of a coding-system.
* src/xdisp.c (decode_mode_spec_coding): Handle multibyte
characters as coding-system's mnemonic.
(display_mode_element): If decode_mode_spec returns a multibyte
string, display it as multibyte.
* src/coding.c (Fdefine_coding_system_internal)
(Fcoding_system_put): If :mnemonic is a string, use its first
character. This avoids assertion violations if someone uses a
string as the mnemonic of a coding-system.
Always make a multibyte string for the frame title (bug#42904)
* src/xdisp.c (gui_consider_frame_title): Multibyte-encode any raw
bytes in the title, and then pass a multibyte string to the back-end
for use as a frame title. This cuts down a little on the rubbish
shown when raw bytes sneak in by mistake (as part of the buffer name,
for instance).
Eli Zaretskii [Sun, 23 Aug 2020 16:25:58 +0000 (19:25 +0300)]
Fix image display on w32 as followup to recent changes
The new code calls 'malloc' and 'free', so we can no longer
* src/image.c (struct image_type): Rename 'load' to 'load_img' and
'free' to 'free_img'. All callers changed.
(free_image) [WINDOWSNT]: Don't #undef 'free'.
Alan Third [Sun, 23 Aug 2020 15:28:17 +0000 (16:28 +0100)]
Set basic SVG attributes (bug#40845)
* test/manual/image-transforms-tests.el: Replace hard-coded colors
with defaults.
* src/dispextern.h (struct image):
* src/image.c (search_image_cache):
(xbm_load_image):
(xbm_load):
(pbm_load): Rename from frame to face where relevant.
(svg_load_image): Parse the image to find out the size, then wrap it
in another SVG to set a new size and colors, etc.
(lookup_image): Use the face colors instead of the frame colors.
(search_image_cache): Add ability to ignore the face colors.
(uncache_image): Uncache all copies of the image that share the spec,
even if the face colors don't match.
* etc/NEWS: Describe the changes.
Michael Albinus [Sun, 23 Aug 2020 11:30:43 +0000 (13:30 +0200)]
Rework direct async processes in Tramp
* doc/misc/tramp.texi (Remote processes): Precise restrictions for direct
async processes.
* lisp/net/tramp.el (tramp-methods): Adapt docstring.
(tramp-direct-async-process-p): Make it more precise.
(tramp-handle-make-process): Rewrite, based on `make-process'.
* test/lisp/net/tramp-tests.el (tramp-test-temporary-file-directory):
Add `tramp-direct-async-args` for mock method.
(tramp-test29-start-file-process, tramp-test30-make-process):
Use weaker regexp checking "foo".
(tramp-test30-make-process): Do not check stderr for direct async processes.
(tramp--test--deftest-direct-async-process): New defmacro.
(tramp-test29-start-file-process-direct-async)
(tramp-test30-make-process-direct-async): New tests.
Yuan Fu [Wed, 27 May 2020 02:47:27 +0000 (22:47 -0400)]
Improve word wrapping for CJK characters
Note about the change around line 9257 and 23372:
Before, the test for whitespace checks for can_wrap_before and
can_wrap_after simutaniously. Now we separate these two checks, and
the logic needs to change a little bit. However, when we don't enable
the new wrapping feature, 'can_wrap_after' is equivalent to
'IT_DISPLAYING_WHITESPACE' and 'can_wrap_before' is equivalent to
'!IT_DISPLAYING_WHITESPACE'. And the new logic is equivalent with the
old one in that case.
Old logic:
if (whitespace) /* Which means can wrap after && can't wrap
before. */
may_wrap = true;
else if (may_wrap) /* aka (!whitespace && may_wrap)
(set wrap point) * aka (can't wrap after && can wrap before
may_wrap = false * && may_wrap)
*/
New logic:
if (can_wrap_after)
next_may_wrap = true
else
next_may_wrap = false;
if (may_wrap && can_wrap_before)
(set wrap point)
/* Update may_wrap. */
may_wrap = next_may_wrap;
* src/xdisp.c (it_char_has_category, char_can_wrap_before)
(char_can_wrap_after): New functions.
(move_it_in_display_line_to, display_line): Replace calls to
'IT_DISPLAYING_WHITESPACE' with either 'char_can_wrap_before' or
'char_can_wrap_after'.
(word-wrap-by-category): New variable.
* lisp/cus-start.el (minibuffer-prompt-properties--setter): Add
'word-wrap-by-category' as a customizable variable.
* doc/emacs/display.texi (Visual Line Mode): Add a paragraph about the
new 'word-wrap-by-category' feature.
* etc/NEWS: Announce the change.