Paul Eggert [Sat, 18 Jan 2020 07:59:51 +0000 (23:59 -0800)]
Improve performance when a string's byte count changes
* src/alloc.c (allocate_string_data): Now static.
Remove code for when Faset calls this function when S
already has data assigned, as that can no longer happen.
(resize_string_data): New function, which avoids relocation in
more cases than the old code did, by not bothering to relocate
when the size changes falls within the alignment slop.
* src/data.c (Faset): Use resize_string_data.
Change a while to a do-while since it must iterate at least once.
Alan Mackenzie [Fri, 17 Jan 2020 21:53:13 +0000 (21:53 +0000)]
Introduce element &error into edebug specification lists for macros
This fixes bug #37540.
* lisp/emacs-lisp/edebug.el (top level): New entry for &error in alist used to
associate elements with their handling functions.
(edebug-match-&error): New function.
(nested-backquote-form): Use the new element &error to abort instrumentation
on encountering a three deep nesting of backquotes (without intervening
commas).
* doc/lispref/edebug.texi (Specification List): Add an entry for &error.
Damien Cassou [Fri, 27 Dec 2019 14:35:52 +0000 (15:35 +0100)]
Add unattended spell-checking to checkdoc
This commit makes checkdoc capable of spell-checking even when the
user isn't using it interactively. When TAKE-NOTES is non-nil,
checkdoc will run spell-checking (with ispell) and report spelling
mistakes.
Fixes: (bug#38583).
* lisp/textmodes/ispell.el (ispell-word): Extract part of it to
`ispell--run-on-word`.
(ispell--run-on-word): New function, extracted from `ispell-word`.
(ispell-error-checking-word): New function.
(ispell-correct-p): New function. Use `ispell--run-on-word` and
`ispell-error-checking-word`.
* lisp/emacs-lisp/checkdoc.el (checkdoc-current-buffer): Pass
TAKE-NOTES to `checkdoc-start`.
(checkdoc-continue): Pass TAKE-NOTES to `checkdoc-this-string-valid`.
(checkdoc-this-string-valid): Add optional argument TAKE-NOTES and
pass it to `checkdoc-this-string-valid-engine`.
(checkdoc-this-string-valid-engine): Add optional argument TAKE-NOTES
and pass it to `checkdoc-ispell-docstring-engine`.
(checkdoc-ispell-init): Call `ispell-set-spellchecker-params` and
`ispell-accept-buffer-local-defs`. These calls are required to
properly use ispell. The problem went unnoticed until now because
checkdoc was only using ispell through the high-level command
`ispell-word` which takes care of all the initialization for the user.
(checkdoc-ispell-docstring-engine): Add optional argument TAKE-NOTES
to force reporting of spell-checking errors. Throw error
when (checkdoc-ispell-init) fails configuring ispell. Replace a
few (if cond nil body) with (unless cond body). Replace (let ((var
nil))) with (let (var)). Replace (if (not (eq checkdoc-autofix-flag
'never)) body) with just body because `checkdoc-autofix-flag` is
checked at the beginning of the function.
Stefan Kangas [Fri, 17 Jan 2020 05:55:30 +0000 (06:55 +0100)]
Make sb-image.el obsolete (Bug#37837)
* lisp/sb-image.el: Move from here...
* lisp/obsolete/sb-image.el: ...to here.
* lisp/speedbar.el (ezimage): Require instead of 'sb-image'.
(speedbar-use-images, speedbar-expand-image-button-alist)
(speedbar-insert-image-button-maybe, speedbar-image-dump): Move
here from 'sb-image.el'.
Stefan Kangas [Thu, 16 Jan 2020 23:23:06 +0000 (00:23 +0100)]
Remove a FIXME from package.el
* lisp/emacs-lisp/package.el (package-unpack): Remove FIXME about
maybe deleting the package directory. It was decided that this was
undesirable. (Bug#7756)
Paul Eggert [Thu, 16 Jan 2020 18:49:29 +0000 (10:49 -0800)]
Fix hexl jumping to end of file
Plus some other small fixes nearby.
* lisp/hexl.el (hexl-end-of-line): Simplify to match next fix.
(hexl-end-of-1k-page, hexl-end-of-512b-page): Use min instead
of max. Tiny change by Vladimir Nikishkin (Bug#39131).
(hexl-insert-char): Use = instead of eq to compare integers.
Damien Cassou [Fri, 27 Dec 2019 14:35:52 +0000 (15:35 +0100)]
Add unattended spell-checking to checkdoc
This commit makes checkdoc capable of spell-checking even when the
user isn't using it interactively. When TAKE-NOTES is non-nil,
checkdoc will run spell-checking (with ispell) and report spelling
mistakes.
Fixes: (bug#38583).
* lisp/textmodes/ispell.el (ispell-word): Extract part of it to
`ispell--run-on-word`.
(ispell--run-on-word): New function, extracted from `ispell-word`.
(ispell-error-checking-word): New function.
(ispell-correct-p): New function. Use `ispell--run-on-word` and
`ispell-error-checking-word`.
* lisp/emacs-lisp/checkdoc.el (checkdoc-current-buffer): Pass
TAKE-NOTES to `checkdoc-start`.
(checkdoc-continue): Pass TAKE-NOTES to `checkdoc-this-string-valid`.
(checkdoc-this-string-valid): Add optional argument TAKE-NOTES and
pass it to `checkdoc-this-string-valid-engine`.
(checkdoc-this-string-valid-engine): Add optional argument TAKE-NOTES
and pass it to `checkdoc-ispell-docstring-engine`.
(checkdoc-ispell-init): Call `ispell-set-spellchecker-params` and
`ispell-accept-buffer-local-defs`. These calls are required to
properly use ispell. The problem went unnoticed until now because
checkdoc was only using ispell through the high-level command
`ispell-word` which takes care of all the initialization for the user.
(checkdoc-ispell-docstring-engine): Add optional argument TAKE-NOTES
to force reporting of spell-checking errors. Throw error
when (checkdoc-ispell-init) fails configuring ispell. Replace a
few (if cond nil body) with (unless cond body). Replace (let ((var
nil))) with (let (var)). Replace (if (not (eq checkdoc-autofix-flag
'never)) body) with just body because `checkdoc-autofix-flag` is
checked at the beginning of the function.
Robert Pluim [Wed, 15 Jan 2020 11:24:43 +0000 (12:24 +0100)]
Make emacs prefer an existing ~/.emacs.d to an existing XDG location
* doc/emacs/custom.texi (Find Init): Update description of how Emacs
finds its init file directory and the interaction with
$XDG_CONFIG_HOME
(Early Init File): Correct XDG location of early-init.el
* etc/NEWS: Update description to make it clear the ~/.emacs.d is
preferred, even if the XDG location exists.
* lisp/startup.el: Prefer ~/.emacs.d even if the XDG location exists.
* lib-src/emacsclient.c (open_config): Prefer home directory the XDG
location.
Paul Eggert [Thu, 16 Jan 2020 01:36:59 +0000 (17:36 -0800)]
parse-time-string now parses ISO 8601 format strings
* lisp/calendar/parse-time.el (parse-time-string):
Parse strings in ISO 8601 format too (Bug#39001).
(parse-time--rfc-822ish): New internal function,
containing most of the old parse-time-string implementation.
(parse-iso8601-time-string): Simplify, now that
parse-time-string groks ISO 8601.
Juri Linkov [Wed, 15 Jan 2020 23:30:33 +0000 (01:30 +0200)]
Move shell-related menu items to "Shell Commands" submenu (bug#37594)
* lisp/menu-bar.el (menu-bar-shell-commands-menu): New variable.
(menu-bar-tools-menu): Move shell-related menu items to
'menu-bar-shell-commands-menu' and add menu items for
'async-shell-command' and 'shell'.
Stefan Monnier [Wed, 15 Jan 2020 21:50:50 +0000 (16:50 -0500)]
* admin/unidata/unidata-gen.el: Use lexical-binding
(unidata-prop): Use defstruct to define the 6 accessor functions.
(unidata-gen-table-character, unidata-gen-table, unidata-gen-table-name)
(unidata-check): Move common code out of `if`.
(unidata-word-list-diff, unidata-split-decomposition):
Move common code out of `if`; use `push`.
Juri Linkov [Wed, 15 Jan 2020 00:02:53 +0000 (02:02 +0200)]
* lisp/isearch.el: Fix corner cases of isearch-lazy-count.
* lisp/isearch.el (isearch-mode): Reset isearch-lazy-count-current
and isearch-lazy-count-total to nil, so when isearch-mode is started,
there should be no counts from previous Isearch.
(isearch-lazy-highlight-new-loop): Call isearch-message after resetting
lazy-count variables only when isearch-mode is started. This avoids
the problem of inappropriate calls of isearch-message-function
when query-replace in the minibuffer performs lazy-highlighting that
used to call minibuffer-history-isearch-message unnecessarily.
Michael Albinus [Tue, 14 Jan 2020 10:46:42 +0000 (11:46 +0100)]
Refactor Tramp async process code
* lisp/net/tramp-adb.el (tramp-adb-handle-make-process):
* lisp/net/tramp-sh.el (tramp-sh-handle-make-process):
Update stderr buffer when process has finished. Do not call
`auto-revert'.
* test/lisp/net/tramp-tests.el (tramp-test31-interrupt-process):
Tag it :unstable. Change `accept-process-output' arguments.
(tramp--test-async-shell-command): New defun.
(tramp--test-shell-command-to-string-asynchronously): Use it.
(tramp-test32-shell-command): Refactor code.
Paul Eggert [Tue, 14 Jan 2020 00:25:28 +0000 (16:25 -0800)]
Update from gnulib
This incorporates:
2020-01-10 fix major regression from 2020-01-04
2020-01-05 tests: avoid GCC over-optimization
2020-01-04 fix AC_CHECK_DECL so it deactivates clang's built-ins
2020-01-03 getopt-posix: fix compilation failure in testdirs
2020-01-03 doc: mention the 64-bit inode number problem
2020-01-02 wchar: make the HP-UX workaround work on HP-UX 11.31
* build-aux/config.guess, build-aux/config.sub, lib/inttypes.in.h:
* lib/stdlib.in.h, lib/unistd.in.h, m4/00gnulib.m4, m4/largefile.m4:
* m4/unistd_h.m4: Copy from Gnulib
* lib/gnulib.mk.in, m4/gnulib-comp.m4: Regenerate.
Paul Eggert [Tue, 14 Jan 2020 00:07:27 +0000 (16:07 -0800)]
Port configure.ac to future Gnulib
Rewrite an ancient Alpha ELF check to port to a future Gnulib
version that may require AC_CHECK_DECL to be set up properly as
per the ‘Expanded Before Required’ section of the Autoconf manual
Autoconf doesn’t guarantee that AC_CHECK_DECL will work properly
if called conditionally (e.g., inside a shell ‘case’ statement)
and the condition is false. Problem reported by Bruno Haible in:
https://lists.gnu.org/r/bug-gnulib/2020-01/msg00088.html
* configure.ac (LD_SWITCH_MACHINE): Migrate ELF check later,
when AC_CHECK_DECL is properly set up.
Always use lexical-binding in lisp-interaction-mode (bug#38835)
* lisp/progmodes/elisp-mode.el (lisp-interaction-mode):
Set lexical-binding.
* lisp/startup.el (command-line, startup--get-buffer-create-scratch):
Don't set lexical-binding here.
* doc/lispref/variables.texi:
* etc/NEWS:
Make it clear that lisp-interaction-mode uses lexical-binding.
Amin Bandali [Mon, 18 Nov 2019 15:24:48 +0000 (10:24 -0500)]
Improve ERC's matching of nicks and URLs (bug#38257)
* lisp/erc/erc-{button,match}.el (erc-{button,match}-syntax-table):
Omit (, ), and '; as they're not valid nick characters, per RFC 2812
section 2.3.1. This enables correct matching/highlighting of nicks
when they're surrounded by parens, like (nick), and when adjacent to
an apostrophe, like nick's.
* lisp/erc/erc-button.el (erc-button-url-regexp): Use the regexp from
browse-url-button-regexp, which among other things, seems to handle
surrounding pair of parens better.
Glenn Morris [Sat, 11 Jan 2020 15:50:31 +0000 (07:50 -0800)]
Merge from origin/emacs-27
f0ebd919c1 (origin/emacs-27) ; * doc/lispref/anti.texi (Antinews): Fi... 6f059159ee Update Acknowledgments sections e1262d45f9 Update Antinews in ELisp manual fd8128f0c1 ; Move the description of define-inline to a different nod... 524441d6b3 Improve wording in the ELisp manual 8addfa91c8 Reset to the standard value when reverting session's custo... d6f9b09777 Fix saving multiple themes c556aabde8 Calc: fix interval entry (bug#39040) 91cd3c1372 Fix horizontal line display in Custom buffers 15c8e984ae ; * etc/NEWS: Fix a typo. ff8996a337 flymake: fix typo in variable binding (bug#38752) 16eaaa07e6 ; Minor spelling fixes 5efe795659 Update Antinews in the Emacs manual 5841240295 Use NSNumber instead of BOOL (bug#39047) beec9f64a5 Add comment on fido-mode's file-sorting semantics eb3c6ad325 Consider non-string minibuffer-default in icomplete
* lisp/calc/calc.el (calcDigit-start): Initialise calc-prev-char to
something more reasonable, so that non-algebraic entry of intervals
whose start is a single digit, like (1..10), works properly.
Reported by Michel Schinz.
Eli Zaretskii [Wed, 8 Jan 2020 18:53:00 +0000 (20:53 +0200)]
Fix build without threads
* src/systhread.c (sys_thread_create) [!THREADS_ENABLED]: Update
the function's signature to match prototype. Reported by Glenn
Morris <rgm@gnu.org>. (Bug#38632)
Glenn Morris [Wed, 8 Jan 2020 17:09:47 +0000 (09:09 -0800)]
Merge from origin/emacs-27
6cd9ccb0a2 (origin/emacs-27) Fix compression of directories in Dired 42329e6d3b ; * etc/NEWS: Review of the whole text. af5709f16b Further enhancement on `tramp-file-local-name' fb432446f5 Objective C Mode imenu: cease recognizing "functions" with... a18373a999 ; * etc/NEWS: Update the text about the XDG_CONFIG_HOME/em... 73fd8a4b53 Fix BSD and macOS builds w.r.t. pthread_setname_np (bug#38... f54b24304d Scale top-left coordinates in display-monitor-attributes-list b46c75b16c xref-matches-in-files: Big Tramp speed-up 883b3490d8 * lisp/net/tramp.el (tramp-file-local-name): Remove `save-... c01f55f126 Fix rendering bug due to unsynchronized cairo surface size... 075f21c0e3 Avoid crash by access to cleared img->pixmap->data/img->ma... 16c6dfb4f1 Avoid assertion violations in very small-height windows 9063124b91 Use pthread_setname_np to set thread name
Eli Zaretskii [Wed, 8 Jan 2020 16:21:53 +0000 (18:21 +0200)]
Fix compression of directories in Dired
This fixes comporession and uncompression of directories on
MS-Windows, but also on other systems. The original code used
":" as the REGEXP of the directory entry in
dired-compress-file-suffixes, which on Windows always matched any
absolute file name, and can also match unusual file names on Posix
hosts. This false match would cause dired-compress-file to act as
if we are decompressing a directory, but use a command suitable
for compression, which would fail in interesting ways.
We now use a REGEXP that can never match any valid file name.
* lisp/dired-aux.el (dired-compress-file-suffixes): Make the
"compress directory" entry's REGEXP really fail to match any valid
file name.
(dired-compress-file): Adapt to the change in
dired-compress-file-suffixes. (Bug#39024)
(dired-compress): If the current file is a directory, or if the
uncompressed file is a directory, don't remove the original from
the listing, since it is left in the filesystem.