Make quoted-printable-encode-region work in multibyte buffers
* lisp/mail/qp.el (quoted-printable-encode-region): If we're in a
multibyte buffer (that has been encoded with some coding system),
then get-byte will get the correct byte value.
Paul Eggert [Mon, 31 Aug 2020 06:40:11 +0000 (23:40 -0700)]
Remove mark_maybe_object
* src/alloc.c (mark_maybe_object, mark_maybe_objects): Remove.
(mark_objects): New function.
* src/eval.c (mark_specpdl): Use mark_objects instead of
mark_maybe_objects, since the array now has only valid Lisp objects.
* src/lisp.h (SAFE_ALLOCA_LISP_EXTRA): When allocating a large
array, clear it so that it contains only valid Lisp objects. This
is simpler and safer, and does not hurt performance significantly
on my usual benchmark as the code is executed so rarely.
Paul Eggert [Mon, 31 Aug 2020 06:40:11 +0000 (23:40 -0700)]
Avoid some false matches in mark_maybe_pointer
This lets Emacs avoid marking some garbage as if it were in use.
On one test platform (RHEL 7.8, Intel Xeon Silver 4116) it
sped up ‘cd lisp; make compile-always’ by a bit over 1%.
* src/alloc.c (live_string_holding, live_cons_holding)
(live_symbol_holding, live_large_vector_holding)
(live_small_vector_holding):
Count only pointers that point to a struct component,
or are a tagged pointer to the start of the struct.
Exception: for non-bool-vector pseudovectors,
count any pointer past the header, since it’s too much
of a pain to write code for every pseudovector.
(live_vector_pointer): New function.
Paul Eggert [Mon, 31 Aug 2020 06:40:11 +0000 (23:40 -0700)]
Omit no-longer-needed stack mark_maybe_object
* src/alloc.c (mark_memory): Do not bother using mark_maybe_object
on the stack, since mark_maybe_pointer now marks everything that
mark_maybe_object would.
Paul Eggert [Mon, 31 Aug 2020 06:40:11 +0000 (23:40 -0700)]
Fix GC bug with Lisp floats and --with-wide-int
On --with-wide-int platforms where Lisp_Object can be
put into non-adjacent registers, mark_maybe_pointer failed
to mark a float whose only reference was as a tagged pointer.
* src/alloc.c (live_float_holding): New function,
a generalization of the old live_float_p.
(live_float_p): Use it.
(mark_maybe_pointer): Use live_float_holding, not live_float_p.
Stefan Kangas [Sun, 30 Aug 2020 16:21:11 +0000 (18:21 +0200)]
Various life.el improvements
* lisp/play/life.el (life): New defgroup.
(life-step-time): New defcustom (lower default from 1 to 0.5).
(life): Use above new variable. Make prefix arguments set step time
in tenths of a second instead of whole seconds.
(life-expand-plane-if-needed): Rename argument to step-time.
(life-setup): Fix running `M-x life' with existing buffer.
Mauro Aranda [Sun, 30 Aug 2020 13:55:19 +0000 (15:55 +0200)]
Respect :must-match for file types in customization buffers
* lisp/wid-edit.el (file widget): Add a :match and a :validate
function to the 'file widget, to be able to check if the widget
value is an existent file, when required (bug#25678).
João Távora [Sat, 29 Aug 2020 15:39:47 +0000 (16:39 +0100)]
Place flymake-eldoc-function at the end of eldoc-documentation-functions
Having it placed in the beginning of that hook meant it was mostly
impossible to track the args to a function call while writing it from
scratch, since most compilers issue a diagnostic about incorrect
number of arguments.
See bug#43103.
* lisp/progmodes/flymake.el (flymake-mode): Lower priority of
flymake-eldoc-function.
João Távora [Sat, 29 Aug 2020 13:28:54 +0000 (14:28 +0100)]
Prevent ElDoc blinking when eldoc-documentation-enthusiast is used
This eldoc-documentation-strategy function didn't always obey protocol
since it returned nil sometimes, which the eldoc engine took it as a
hint for the "old" protocol to clear the echo area.
* lisp/emacs-lisp/eldoc.el (eldoc-documentation-enthusiast):
Return t.
(Version): Bump to 1.9.0
Paul Eggert [Sat, 29 Aug 2020 05:37:29 +0000 (22:37 -0700)]
Revert recent expand-file-name changes if DOS_NT
* src/fileio.c (Fexpand_file_name): Restore pre-August-26
behavior, if DOS_NT. This should fix the recently-introduced
expand-file-name bugs on DOS_NT (Bug#26911).
Andrew G Cohen [Sat, 29 Aug 2020 04:22:40 +0000 (12:22 +0800)]
Allow direct choice of smtp authentication method
* lisp/mail/smtpmail.el (smtpmail-try-auth-methods): Let the
authorization credentials have an entry with key :smtp-auth containing
a preferred authentication mechanism.
Daniel Martín [Sun, 26 Jul 2020 13:24:59 +0000 (15:24 +0200)]
Add support for parsing column numbers in Visual Studio messages
* lisp/progmodes/compile.el (compilation-error-regexp-alist-alist):
Extend regular expression to match optional column numbers.
*
test/lisp/progmodes/compile-tests.el (compile-tests--test-regexps-data):
Add a test.
* test/lisp/progmodes/compile-tests.el (compile-test-error-regexps):
Update the total number of compilation errors in a test.
* etc/compilation.txt: Update compilation.txt with the newly supported
message format.
* etc/NEWS: Advertise the feature.
Stefan Kangas [Fri, 28 Aug 2020 17:23:01 +0000 (19:23 +0200)]
Add commands to run shell commands in project root
* lisp/progmodes/project.el (project-async-shell-command)
(project-shell-command): New commands to run 'async-shell-command'
and 'shell-command' in project's root directory.
(project-prefix-map): Bind commands to '!' and '&'.
* doc/emacs/maintaining.texi (Project File Commands): Document the
new commands.
* etc/NEWS: Announce the new commands.
Stefan Kangas [Fri, 28 Aug 2020 15:29:31 +0000 (17:29 +0200)]
Make XEmacs compat aliases obsolete in warnings.el
* lisp/emacs-lisp/warnings.el (display-warning-minimum-level)
(log-warning-minimum-level): Make XEmacs compat aliases into obsolete
aliases for 'warning-minimum-level' and 'warning-minimum-log-level'.
Eric Abrahamsen [Fri, 28 Aug 2020 00:58:03 +0000 (17:58 -0700)]
New eieio-persistent-make-instance generic function
This allows override of the read process for eieio-persistent objects,
providing the possibility of matching read/write customization for
eieio-persistent subclasses.
* lisp/emacs-lisp/eieio-base.el (eieio-persistent-make-instance): New
generic function for constructing instances from object data written
to disk. Previously known as eieio-persistent-convert-list-to-object.
Eric Abrahamsen [Fri, 28 Aug 2020 00:17:19 +0000 (17:17 -0700)]
Remove redundant slot validation in eieio-persistent-read
Actual object creation (in `make-instance') will later run all slot
values through cl-typep, which does a better job of validation. This
validation is redundant, and slows the read process down.
* lisp/emacs-lisp/eieio-base.el (eieio-persistent-fix-value): Rename
from `eieio-persistent-validate/fix-slot-value', as we no longer
validate, and we don't care about the slot definition.
(eieio-persistent-slot-type-is-class-p): Delete function.
(eieio-persistent-convert-list-to-object): Still call
`eieio--full-class-object', to trigger an autoload if necessary, but
discard the return value.
Harald Jörg [Fri, 28 Aug 2020 14:33:13 +0000 (16:33 +0200)]
Fix indent-region for identifiers with underscores in cperl-mode
* lisp/progmodes/cperl-mode.el (cperl-fix-line-spacing): Fix Bug#18985.
Hash keys or function names starting with a Perl keyword followed
by an underscore (as in "for_me" are no longer split into two words
by M-x indent-region.
Paul Eggert [Thu, 27 Aug 2020 21:46:52 +0000 (14:46 -0700)]
Fix recently-introduced expand-file-name bug
The bug was that (expand-file-name "~") returned something
like "/home/eggert/" instead of "/home/eggert".
Problem reported by Mattias Engdegård (Bug#26911#27).
* src/fileio.c (Fexpand_file_name): When concatenating NEWDIR to
NM, instead of stripping trailing slashes from NEWDIR (which can
turn non-symlinks into symlinks), strip leading slashes from NM.
This also simplifies the code by removing no-longer-needed DOS_NT
special-casing. Also, remove an unnecessary ‘target[length] = 0;’
as that byte will be overwritten by the next memcpy anyway.
* test/src/fileio-tests.el (fileio-tests--HOME-trailing-slash):
New test.
Eric Abrahamsen [Thu, 27 Aug 2020 20:57:03 +0000 (13:57 -0700)]
Switch Gnus D-Bus signal from :session to :system
* lisp/gnus/gnus-dbus.el (gnus-dbus-register-sleep-signal): Apparently
this needs to be :system -- perhaps because PrepareForSleep is a
system-level event?
Mauro Aranda [Thu, 27 Aug 2020 14:22:35 +0000 (16:22 +0200)]
Keep the user theme in sync when marking a variable as set
* lisp/custom.el (customize-mark-as-set): Keep the user theme in sync
even if the new value of the variable is the saved-value or the
standard-value. If we don't do this, custom themes might end up
stepping over the user preferences in a session (bug#28904).
Stefan Kangas [Thu, 27 Aug 2020 11:38:37 +0000 (13:38 +0200)]
Substitute command keys in display-local-help
* lisp/help-at-pt.el (display-local-help): Pass 'help-echo' property
through 'substitute-command-keys' before displaying to be consistent
with tooltips. (Bug#37628)
This was discussed in:
https://lists.gnu.org/archive/html/emacs-devel/2019-10/msg00090.html
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.