Eli Zaretskii [Thu, 15 Dec 2016 16:18:59 +0000 (18:18 +0200)]
Prevent crashes in xg_select due to concurrency
* src/xgselect.c (xg_select): Don't call Glib functions that use
'context' if we failed to acquire it. This means some other
thread owns the context, in which case both using the context and
calling block_input/unblock_input will step on that thread's toes
and eventually lead to crashes. (Bug#25172)
Nicolas Petton [Thu, 15 Dec 2016 09:24:57 +0000 (10:24 +0100)]
Fix circular list handling in seq-mapn
* lisp/emacs-lisp/seq.el (seq-mapn): Do not copy list arguments.
* test/lisp/emacs-lisp/seq-tests.el (test-seq-mapn-circular-lists):
Add a regression test.
Mark Oteiza [Wed, 14 Dec 2016 17:25:04 +0000 (12:25 -0500)]
Reset window scroll when displaying an image
When viewing a large image full size and scrolling, for instance, to
the lower right corner, then selecting a much smaller image in the
thumbnail buffer, the window stays scrolled so the new image is out of
the window. One must scroll back to the "origin" to view the new
displayed image, or just kill the image-dired-display-image buffer and
try again. This fixes the issue.
* lisp/image-dired.el (image-dired-display-window-width):
(image-dired-display-window-height): Operate on a window as argument.
(image-dired-display-image): Bind (image-dired-display-window) and use
it. Set window vscroll and hscroll to zero when refreshing the
buffer's contents.
Mark Oteiza [Wed, 14 Dec 2016 03:56:42 +0000 (22:56 -0500)]
More image-dired polish
* lisp/image-dired.el (image-dired-file-name-at-point): New function.
(image-dired-thumbnail-mode, image-dired-display-image-mode): Disable
undo list. Add image-dired-file-name-at-point to
file-name-at-point-functions to facilitate find-file and friends.
(image-dired-thumbnail-display-external):
(image-dired-dired-display-external): Use start-process instead, to
avoid needlessly blocking and using a shell.
Reuben Thomas [Tue, 13 Dec 2016 00:30:51 +0000 (00:30 +0000)]
Minor docstring and comment fixes to ispell.el
lisp/textmodes/ispell.el (ispell-aspell-dictionary-alist): Mention
ispell-aspell-dictionary-alist, not ispell-dictionary-alist.
(ispell-set-spellchecker-params): Change double-single quotes to
single single quotes in comment.
Reuben Thomas [Sun, 4 Dec 2016 22:01:56 +0000 (22:01 +0000)]
Remove XEmacs-specific ispell-with-no-warnings
* lisp/textmodes/ispell.el (ispell-with-no-warnings): Remove this
defmacro, needed only for XEmacs.
(ispell-command-loop, ispell-message): Use with-no-warnings directly.
Reuben Thomas [Sun, 4 Dec 2016 21:58:00 +0000 (21:58 +0000)]
Remove meaningless defconst ispell-version
* lisp/textmodes/ispell.el (ispell-version): Since ispell.el is now
firmly part of Emacs, and the version hasn’t changed since 2003, and
isn’t used anywhere, remove it. 3rd-party code can better use the
Emacs version, or feature or function checks.
(ispell-check-version): No longer report ispell.el version.
Reuben Thomas [Sun, 4 Dec 2016 21:50:18 +0000 (21:50 +0000)]
Remove support for ispell < 3.1.12
* lisp/textmodes/ispell.el (ispell-offset): Remove.
(ispell-check-version): Require ispell >= 3.1.12, released in 1994.
(ispell-process-line): No longer use ispell-offset.
Reuben Thomas [Sun, 4 Dec 2016 13:55:31 +0000 (13:55 +0000)]
Generalise over-specific documentation
* lisp/textmodes/ispell.el (ispell-personal-dictionary): Rather than
document precise personal wordlist filenames for only two supported
spelling checkers, simply say that the default personal dictionary
depends on the chosen spelling checker. The user can check the
spelling checker’s documentation if necessary. This is simpler, and
works for other supported (and future, or unknown) spelling checkers.
Reuben Thomas [Sun, 4 Dec 2016 00:49:35 +0000 (00:49 +0000)]
Remove ispell.el pre-GNU Emacs comments
* lisp/textmodes/ispell.el (Commentary): Remove original maintainer
details, as Emacs version, bug report address and so forth should be
used instead for this version. Remove in-line change history; use
git instead.
Mark Oteiza [Tue, 13 Dec 2016 16:47:21 +0000 (11:47 -0500)]
More small fixes for image-dired
* lisp/image-dired.el: Fix commentary to refer to correct Emacs manual
node.
(image-dired--with-db-file): Add declare forms.
(image-dired-hidden-p): Rewrite with cl-loop. It's not necessary to
run through the whole list.
Mark Oteiza [Tue, 13 Dec 2016 16:41:45 +0000 (11:41 -0500)]
Remove image-dired-kill-buffer-and-window
This breaks window layout, especially when quitting a
image-dired-display-image-mode buffer.
* lisp/image-dired.el (image-dired-thumbnail-mode-map):
(image-dired-display-image-mode-map): Replace in keymap and menu items
bindings to image-dired-kill-buffer-and-window with quit-window.
(image-dired-kill-buffer-and-window): Remove.
Mark Oteiza [Tue, 13 Dec 2016 16:32:04 +0000 (11:32 -0500)]
Replace image-dired-setup-dired-keybindings with a minor mode
* lisp/image-dired.el (image-dired-thumbnail-mode): Fix docstring to
remove mention of nonexistent image-dired-dired and to refer to the
new minor mode.
(image-dired-minor-mode-map): New keymap assimilated from
image-dired-setup-dired-keybindings. In the future, the keymap parent
should be removed, and perhaps also the duplicate bindings that
already exist in dired-mode-map.
(image-dired-setup-dired-keybindings): Remove. Replace with an
obsolete function alias.
(image-dired-minor-mode): New minor mode, assuming the role of
image-dired-setup-dired-keybindings.
Noam Postavsky [Sun, 11 Dec 2016 18:08:15 +0000 (13:08 -0500)]
Clean up var watcher disabling on thread switching
* src/data.c (Fset_default): Move code into new C level function,
`set_default_internal'.
(set_default_internal): New function, like `Fset_default' but also takes
additional bindflag parameter.
(set_internal): Only call `notify_variable_watchers' if bindflag is not
SET_INTERNAL_THREAD_SWITCH.
* src/eval.c (do_specbind, do_one_unbind): Add bindflag parameter,
passed on to set_internal and set_default_internal. Adjust callers.
(rebind_for_thread_switch, unbind_for_thread_switch): Pass
SET_INTERNAL_THREAD_SWITCH to do_specbind, do_one_unbind instead of
temporarily adjusting symbol's trapped_write field.
Glenn Morris [Tue, 13 Dec 2016 01:03:20 +0000 (20:03 -0500)]
Minor fix for define-derived-mode
* lisp/emacs-lisp/derived.el (define-derived-mode):
Do not let eg eval-defun reset the values of syntax or abbrev tables,
since they might have been defined externally. (Bug#16160)
Move backtrace to ELisp using a new mapbacktrace primitive
* src/eval.c (get_backtrace_starting_at, backtrace_frame_apply)
(Fmapbacktrace, Fbacktrace_frame_internal): New functions.
(get_backtrace_frame, Fbacktrace_debug): Use `get_backtrace_starting_at'.
* lisp/subr.el (backtrace--print-frame): New function.
(backtrace): Reimplement using `backtrace--print-frame' and `mapbacktrace'.
(backtrace-frame): Reimplement using `backtrace-frame--internal'.
* lisp/emacs-lisp/debug.el (debugger-setup-buffer): Pass a base to
`mapbacktrace' instead of searching for "(debug" in the output of
`backtrace'.
* test/lisp/subr-tests.el (subr-test-backtrace-simple-tests)
(subr-test-backtrace-integration-test): New tests.
* doc/lispref/debugging.texi (Internals of Debugger): Document
`mapbacktrace' and missing argument BASE of `backtrace-frame'.
Paul Eggert [Mon, 12 Dec 2016 22:27:35 +0000 (14:27 -0800)]
Use C99 syntax for font drivers
Problem reported by Daniel Colascione in:
http://lists.gnu.org/archive/html/emacs-devel/2016-12/msg00515.html
* src/ftcrfont.c (ftcrfont_driver):
* src/ftfont.c (ftfont_driver):
* src/ftxfont.c (ftxfont_driver):
* src/macfont.m (macfont_driver):
* src/nsfont.m (nsfont_driver):
* src/xfont.c (xfont_driver):
* src/xftfont.c (xftfont_driver):
Use C99 syntax, not the old GNU C syntax.
Glenn Morris [Mon, 12 Dec 2016 20:20:39 +0000 (15:20 -0500)]
Minor advice.el fix
* lisp/emacs-lisp/advice.el (ad-preactivate-advice):
Avoid setting the function definition of nil.
This was happening during bootstrap of org-compat.el,
apparently due to eager macro expansion of code behind
a (featurep 'xemacs) test.
Eli Zaretskii [Mon, 12 Dec 2016 17:56:03 +0000 (19:56 +0200)]
Make etags-tests work in out-of-tree builds
* test/lisp/progmodes/etags-tests.el (etags-bug-158)
(etags-bug-23164): Make them work in an out-of-tree build.
Reported by Ken Brown <kbrown@cornell.edu>.
Eli Zaretskii [Mon, 12 Dec 2016 17:08:21 +0000 (19:08 +0200)]
Avoid crashing if a new thread is signaled right away
* src/thread.c (post_acquire_global_lock): Don't raise the pending
signal if the thread's handlers were not yet set up, as that will
cause Emacs to exit with a fatal error. This can happen if a
thread is signaled as soon as make-thread returns, before the new
thread had an opportunity to acquire the global lock, set up the
handlers, and call the thread function.
* test/src/thread-tests.el (thread-signal-early): New test.
Eli Zaretskii [Mon, 12 Dec 2016 16:03:40 +0000 (18:03 +0200)]
Fix point motion in cloned buffers
* src/thread.c (post_acquire_global_lock): Call
set_buffer_internal_2 instead of tricking set_buffer_internal_1
into resetting the current buffer even if it didn't change. This
avoids bug#25165, caused by failing to record the modified values
of point and mark, because current_buffer was set to NULL. Also,
don't bother re-setting the buffer if there was no thread switch,
as that just wastes cycles.
* src/buffer.c (set_buffer_internal_2): New function, with most of
the body of set_buffer_internal_1, but without the test for B
being identical to the current buffer.
(set_buffer_internal_1): Call set_buffer_internal_2 if B is not
identical to the current buffer.
* src/buffer.h (set_buffer_internal_2): Add prototype.
* test/src/thread-tests.el (thread-sticky-point): New test.
Michael Albinus [Mon, 12 Dec 2016 10:12:34 +0000 (11:12 +0100)]
Further improvements in Tramp's file name unquoting
* lisp/net/tramp-adb.el (tramp-adb-handle-file-local-copy)
(tramp-adb-handle-write-region): Unquote localname.
(tramp-adb-handle-copy-file): Implement direct copy on remote device.
(tramp-adb-handle-rename-file): Quote arguments, add "-f" to force.
* lisp/net/tramp.el (tramp-file-name-unquote-localname): New defun.
(tramp-handle-file-name-case-insensitive-p):
* lisp/net/tramp-gvfs.el (tramp-gvfs-get-file-attributes)
(tramp-gvfs-connection-mounted-p, tramp-gvfs-mount-spec)
(tramp-gvfs-maybe-open-connection):
* lisp/net/tramp-sh.el (tramp-make-copy-program-file-name):
* lisp/net/tramp-smb.el (tramp-smb-get-share)
(tramp-smb-get-localname): Use it.
* test/lisp/net/tramp-tests.el (tramp--test-docker-p): New defun.
(tramp--test-special-characters, tramp-test34-utf8)
(tramp-test34-utf8-with-stat, tramp-test34-utf8-with-perl)
(tramp-test34-utf8-with-ls): Use it.
Noam Postavsky [Fri, 28 Oct 2016 02:17:11 +0000 (22:17 -0400)]
Quote filenames containing '~' in prompts
When in a directory named '~', the default value given by
`read-file-name' should be quoted by prepending '/:', in order to
prevent it from being interpreted as referring to the $HOME
directory (Bug#16984).
* lisp/minibuffer.el (minibuffer-maybe-quote-filename): New function.
(completion--sifn-requote, read-file-name-default): Use it instead of
`minibuffer--double-dollars'.
* test/lisp/files-tests.el (files-test-read-file-in-~): Test it.
Eli Zaretskii [Sun, 11 Dec 2016 15:59:55 +0000 (17:59 +0200)]
Avoid aborts when a thread signals an error
* src/thread.h (struct thread_state): Add members
m_waiting_for_input and m_input_available_clear_time.
(waiting_for_input, input_available_clear_time): New macros.
* src/keyboard.c (waiting_for_input, input_available_clear_time):
Remove; they are now macros that reference the current thread.
(Bug#25171)
* src/w32select.c: Don't include keyboard.h.
* test/src/thread-tests.el (thread-errors): New test.
Philipp Stephani [Sat, 10 Dec 2016 20:36:15 +0000 (21:36 +0100)]
Clean up compile-tests.el
Switch to lexical binding. Make checkdoc happy.
* test/lisp/progmodes/compile-tests.el (compile--test-error-line)
(compile-test-error-regexps): Instead of checking a single Boolean
value, use `should' for each attribute of the message to be compared.
(compile-tests--test-regexps-data): Document sixth list element
TYPE.
Glenn Morris [Sun, 11 Dec 2016 03:03:28 +0000 (19:03 -0800)]
Tweaks for message bogus address detection
* lisp/gnus/message.el (message-bogus-recipient-p):
Do not require "@", since some mailers deliver to local addresses
without one. (Bug#23054)
Move "@.*@" from here...
(message-bogus-addresses): ...to here, so it can be customized.
Eli Zaretskii [Sat, 10 Dec 2016 09:06:23 +0000 (11:06 +0200)]
Fix building with check-lisp-object-type
* src/thread.c (mark_one_thread): Use NILP to compare with
m_saved_last_thing_searched, which is a Lisp object. Reported by
Andreas Politz <politza@hochschule-trier.de>.
Eli Zaretskii [Fri, 9 Dec 2016 16:23:04 +0000 (18:23 +0200)]
Fix compilation warnings due to prototype of thread_select
* src/thread.h <int select_func>: Make the 5th and 6th arguments
be 'const'.
* src/process.c [WINDOWSNT]:
* src/w32proc.c: Make the 5th and 6th argument to sys_select be
'const'.
Eli Zaretskii [Fri, 9 Dec 2016 14:03:08 +0000 (16:03 +0200)]
Fix subtle errors with let-binding of localized variables
* src/eval.c (do_specbind): Don't require a "symbol" that is
actually a cons cell, in order to call set-default, as there are
no longer such bindings. This makes do_specbind work like the
pre-concurrency implementation in specbind for bindings of
forwarded symbols. Use specpdl_kind to access the type of the
binding.
(specpdl_kind): New function.
Noam Postavsky [Fri, 9 Dec 2016 05:14:48 +0000 (00:14 -0500)]
Fix bad quoting of python-shell-interpreter
`python-shell-calculate-command' was using `shell-quote-argument' as if
it was generating a shell command, but its callers don't pass the result
to a shell, and they expect to parse it with `split-string-and-unquote'.
This caused problems depending on the flavor of shell quoting in
effect (Bug#25025).
* lisp/progmodes/python.el (python-shell-calculate-command): Use
`combine-and-quote-strings' to quote the interpreter, so that it can be
parsed by `python-shell-make-comint' successfully using
`split-string-and-unquote'.
Paul Eggert [Thu, 8 Dec 2016 19:32:48 +0000 (11:32 -0800)]
Make read1 more reentrant
This is needed if ‘read’ is called soon after startup, before the
Unicode tables have been set up, and it reads a \N escape and
needs to look up a value the Unicode tables, a lookup that in turn
calls read1 recursively. Although this change doesn’t make ‘read’
fully reentrant, it’s good enough to handle this case.
* src/lread.c (read_buffer_size, read_buffer): Remove static vars.
(grow_read_buffer): Revamp to use locals, not statics, and to
record memory allocation un the specpdl. All callers changed.
(read1): Start with a stack-based buffer, and use the heap
only if the stack buffer is too small. Use unbind_to to
free any heap buffer allocated. Use bool for boolean.
Redo symbol loop so that only one call to grow_read_buffer
is needed.
(init_obarray): Remove no-longer-needed initialization.
Tino Calancha [Thu, 8 Dec 2016 04:46:25 +0000 (13:46 +0900)]
Fix Bug#24962
* lisp/buff-menu.el (list-buffers--refresh):
List buffers with name starting with " " if they visit a file.
* test/lisp/buff-menu-tests.el (buff-menu-24962):
Update test result as pass.
Paul Eggert [Wed, 7 Dec 2016 20:53:02 +0000 (12:53 -0800)]
Put post-25 ChangeLog entries into ChangeLog.3
* ChangeLog.2: Copy from emacs-25 branch.
* ChangeLog.3: New file, with changes only in master.
* Makefile.in (CHANGELOG_HISTORY_INDEX_MAX): Bump from 2 to 3.