Fix bug#24905
* lisp/progmodes/python.el (python-info-docstring-p): Improve
infloop avoidance: replace (bobp) with generic test for
forward progress.
* test/lisp/progmodes/python-tests.el (python-bob-infloop-avoid): Add
test for bug#24905
2015-02-07 "Fix hideshow integration[...]" changed the regexp added to
`hs-special-modes-alist' so that it worked when not searching from the
beginning of the line. However, this allows matching tokens ending in
"def" or "class", not just those keywords. This results in an infinite
loop in hs-hide-all (Bug #24815).
* lisp/progmodes/python.el (python-mode): Add symbol boundaries around
the def|class matching part of the regexp added to
hs-special-modes-alist.
Apple changed the spelling of its operating system again, to "macOS",
effective with macOS 10.12 Sierra (2016-09-20). Change Emacs
documentation and comments to match this. Stick with older OS
spellings ("OS X", "Mac OS X") when talking about older releases where
the older names are more correct.
With Python 3.5, (python-shell-completion-native-get-completions ... "")
would return an empty list, causing python.el to think that native
completion was unavailable (the difference between Python 2 and Python 3
is due to https://bugs.python.org/issue25660).
* lisp/progmodes/python.el (python-shell-completion-native-try): Use "_"
to check whether native completion is available instead of "".
* lisp/progmodes/python.el (python-eldoc-get-doc): New defvar.
(python-eldoc-function-timeout)
(python-eldoc-function-timeout-permanent): New defcustoms.
(python-eldoc-function): If python-eldoc--get-doc-at-point times
out, effectively turn off ElDoc in current buffer. (Bug#23609)
These enable C files from the master repository to be visited in Emacs 25
without generating irritating questions about configuration variable safety.
* lisp/progmodes/cc-vars.el: (c-string-list-p, c-string-or-string-list-p): New
functions.
(c-noise-macro-names, c-noise-macro-with-parens-names): give the
safe-local-variable property c-string-list-p.
(c-macro-names-with-semicolon): give the safe-local-variable property
c-string-or-string-list-p.
* lisp/progmodes/elisp-mode.el (xref-location-marker): Use
save-excursion, in order not to alter the value of point if the
buffer is currently open in the background (problem reported by
Robert Weiner).
* lisp/progmodes/etags.el (xref-location-marker): Same.
* lisp/progmodes/project.el (project-file-completion-table):
`shell-quote-argument' DIR as well.
* lisp/progmodes/xref.el (xref--rgrep-command): Pass DIR through
`shell-quote-argument' (bug#23453). Thanks for Kaushal Modi for
pointing out the problem. Assert that DIR doesn't start with `~'.
* lisp/progmodes/xref.el (xref-query-replace-in-results): Collect
all xrefs from the buffer first, then delegate most of the
processing to the value returned by xref--buf-pairs-iterator.
(xref--buf-pairs-iterator): New function. Return an "iterator"
which partitions returned markers into buffers, and only processes
markers from one buffer at a time. When an xref is out of date,
skip it with a message instead of signaling error (bug#23284).
(xref--outdated-p): Extract from xref--buf-pairs-iterator. Trim
CR from both strings before comparing.
(xref--query-replace-1): Remove the variable current-buf, no need
to track it anymore. Simplify the filter-predicate and search
functions accordingly. Iterate over buffer-markers pairs returned
by the iterator, and call `perform-replace' for each of them. Use
multi-query-replace-map (bug#23284). Use `switch-to-buffer' every
time after the first, in order not to jump between windows.
* test/automated/xref-tests.el
(xref--buf-pairs-iterator-groups-markers-by-buffers-1)
(xref--buf-pairs-iterator-groups-markers-by-buffers-2)
(xref--buf-pairs-iterator-cleans-up-markers): New tests.
* lisp/progmodes/xref.el (xref--collect-matches-1): Stop after one
match if re-search-forward doesn't move point (bug#23426).
* test/automated/xref-tests.el
(xref-collect-matches-finds-an-empty-line-regexp-match):
Uncomment test.
* config.bat:
* msdos/sedlisp.inp:
* msdos/sedlibmk.inp:
* msdos/sedleim.inp:
* msdos/sedadmin.inp:
* msdos/sed6.inp:
* msdos/sed3v2.inp:
* msdos/sed2v2.inp:
* msdos/sed1v2.inp: Adapt to Emacs 25.
* src/process.c (remove_slash_colon): Move out of "#ifdef
subprocesses" block, as it its called unconditionally. Move
ADD_SUBFEATURE calls into "#ifdef subprocesses" block, as they
reference variables only defined in that block.
* src/msdos.h: Provide prototypes for IT_set_frame_parameters,
faccessat, msdos_fatal_signal, syms_of_msdos, pthread_sigmask,
dos_keysns, dos_keyread, run_msdos_command, and
syms_of_win16select, to avoid compiler warnings.
* src/msdos.c (SYS_ENVIRON): Define to either '_environ' or
'environ', depending on the DJGPP version.
Remove declarations of externally-visible Lisp objects, like
Qbackground_color and Qreverse.
(run_msdos_command): First argument is not signed, not unsigned.
Use SYS_ENVIRON.
(sys_select): Use 'timespec_cmp' instead of 'timespec_sign', as
the latter doesn't work when 'time_t' is an unsigned data type.
This caused idle timers to behave incorrectly: they only fired
after a keyboard input event.
* src/frame.c (adjust_frame_size) [MSDOS]: Account for
FRAME_TOP_MARGIN that isn't counted in the frame's number of
lines, but dos_set_window_size needs it to be added.
* src/lread.c (INFINITY, NAN) [DJGPP < 2.05]: Provide definitions.
* src/fns.c (sort_vector_copy) [__GNUC__ < 4]: Provide a prototype
that works around compilation errors with older GCC versions.
* src/w16select.c: Don't declare QCLIPBOARD and QPRIMARY as Lisp
Objects.
* src/filelock.c [MSDOS]: Ifdef away most of the code. Provide
no-op implementations for 'lock_file' and 'unlock_file'.
(Ffile_locked_p) [MSDOS]: Always return nil. This avoids multiple
ifdefs in all users of filelock.c functionality.
* src/conf_post.h (EOVERFLOW, SIZE_MAX) [DJGPP < 2.04]: Define.
* src/emacs.c [MSDOS]: Include dosfns.h, to avoid compiler
warnings.
* src/dosfns.h: Provide prototypes for dos_cleanup,
syms_of_dosfns, and init_dosfns.
* src/deps.mk (atimer.o): Depend on msdos.h.
(emacs.o): Depend on dosfns.h.
* src/atimer.c [MSDOS]: Include msdos.h, to avoid compiler
warnings.
* lisp/window.el (window--adjust-process-windows): Skip the body
if 'process-list' is not available. This avoids failure to start
up on MS-DOS.
* lisp/vc/diff.el (diff-no-select): Test 'make-process', not
'start-process', as the latter is now available on all platforms.
* lisp/textmodes/ispell.el (ispell-async-processp): Replace
'start-process' with 'make-process' in a comment.
* lisp/term/internal.el (IT-unicode-translations): Modify and add
a few translations to display Info files with Unicode markup. Fix
an ancient off-by-one mismatch error with Unicode codepoints.
* lisp/progmodes/compile.el (compilation-start): Test
'make-process', not 'start-process', as the latter is now
available on all platforms.
* lisp/man.el (Man-build-man-command, Man-getpage-in-background):
Test 'make-process', not 'start-process', as the latter is now
available on all platforms.
* lisp/international/mule-cmds.el (set-coding-system-map): Test
'make-process', not 'start-process', as the latter is now
available on all platforms.
* lisp/eshell/esh-cmd.el (eshell-do-pipelines-synchronously): Doc
fix.
(eshell-execute-pipeline): Test 'make-process', not
'start-process', as the latter is now available on all platforms.
* lisp/progmodes/cc-engine.el (c-invalidate-state-cache): User
c-state-old-cpp-end as an argument to c-with-all-but-one-cpps-commented-out
regardless of the value of `here'.
Also correct the misfontification of the last enum identifier.
* lisp/progmodes/cc-engine.el (c-forward-keyword-prefixed-id): setq
c-last-identifier-range to nil to ensure that only types recognized by this
macro are set for fontification as types.
(c-backward-typed-enum-colon): Function renamed from
c-backward-colon-prefixed-type. On finding a colon in the backward search,
check it is preceded by an identifier rather than a keyword.
* lisp/progmodes/js.el (js--indent-in-array-comp): Also check the
depth in parens between the bracket and `for' (bug#23391).
* test/indent/js.js: Add a corresponding example.
Python 3.5, released in mid September 2015, introduced a few new
keywords to better support asynchronous code, "async" and "await"
in particular. See https://www.python.org/dev/peps/pep-0492/ for
details. (Bug#21783)
* lisp/progmodes/python.el (python-rx-constituents): Add async
def/for/with as block-start and async def as defun.
* lisp/progmodes/python.el (python-font-lock-keywords): Add async
def/for/with as keyword.
* test/automated/python-tests.el (python-indent-after-async-block-1,
python-indent-after-async-block-2, python-indent-after-async-block-3,
python-nav-beginning-of-defun-3): New tests to test indentation and
navigation for the async keyword.
* lisp/progmodes/vhdl-mode.el (vhdl-version, vhdl-time-stamp): Update.
(vhdl-mode): No longer set comment-padding.
(vhdl-begin-p): Handle missing space between keyword and parenthesis.
(vhdl-beginning-of-statement-1): Fix indentation for "else generate".
(vhdl-template-else, vhdl-template-elsif): Support generate statement.
(vhdl-re-search-forward, vhdl-re-search-backward): Save match data.
* lisp/progmodes/sh-script.el (sh-mode-hook): Add
sh-electric-here-document-mode as an option and the default value.
(sh-mode): Mention sh-mode-hook in docstring.
(sh-mode): Remove sh-electric-here-document-mode invocation.
* lisp/progmodes/xref.el (xref-collect-references): Instead of
calling `semantic-symref-find-references-by-name', use
`semantic-symref-instantiate' and `semantic-symref-perform-search'
directly. Ask for `line-and-text' results (bug#23223).
(xref-collect-matches): Include the line text in the "hit"
structure.
(xref--convert-hits): New function, split off from
`xref-collect-references' and `xref-collect-matches', to convert
"hits" to xref instance list. Create a temporary buffer here, to
use it for post-processing all hit lines.
(xref--collect-matches): Use a different approach for non-visited
files. Insert the line text into the temp buffer, apply the
file's major mode the best we can without reading its whole
contents, syntax-propertize, and search in the result.
(xref--collect-matches-1): Extract, to handle the common logic
between two cases.
(xref--find-buffer-visiting): New function, a wrapper around
`find-buffer-visiting' to amortize its cost.
* lisp/cedet/semantic/symref/idutils.el
(semantic-symref-idutils--line-re): New constant.
(semantic-symref-parse-tool-output-one-line): Support result type
`line-and-text'.
* lisp/cedet/semantic/symref/grep.el
(semantic-symref-grep--line-re)
(semantic-symref-parse-tool-output-one-line): Same.
* lisp/cedet/semantic/symref/cscope.el
(semantic-symref-cscope--line-re)
(semantic-symref-parse-tool-output-one-line): Same.
* lisp/cedet/semantic/symref/global.el
(semantic-symref-global--line-re)
(semantic-symref-parse-tool-output-one-line): Same.
* lisp/progmodes/prolog.el (prolog-ensure-process):
Work around incompatibility of SWI-Prolog 7.2.3 and earlier
with the new way of dealing with the EMACS and INSIDE_EMACS
environment variables.
This mostly restores the change that I reverted on March 23,
fixing most of Bug#20202. The only part of the change that is
still reverted is the change to M-x term, where compatibility with
current Bash constrains us from moving too quickly (Bug#20484).
Problem reported by Phillip Lord in: http://bugs.gnu.org/20484#108
* etc/NEWS: Document this.
* lisp/comint.el (comint-exec-1):
* lisp/net/tramp-sh.el (tramp-remote-process-environment):
* lisp/progmodes/compile.el (compilation-start):
Don’t set EMACS=t in the subsidiary process.
* lisp/progmodes/grep.el (grep-find-program): Renamed from
'find-program', which was a variable. All uses changed.
(grep-xargs-program): Renamed from 'xargs-program', which was a
variable. All uses changed.
(grep-program): Now a defcustom rather than a simple variable.
(Bug#23219)
* lisp/progmodes/project.el (project-roots): Implement for the
`transient' project type (bug#23224).
(project-current): Instead of signaling an error, return a
transient project instance rooted in the chosen directory.
* lisp/progmodes/js.el (js--continued-expression-p): Make an
effort to recognize unary plus and minus, in the contexts where
they make sense (https://github.com/mooz/js2-mode/issues/322).
This fixes debbugs #7917.
* lisp/progmodes/cc-engine.el (c-forward-keyword-prefixed-id): Accept 'maybe
(from c-forward-type) as sufficient to record an id. Record type id as well
as ref ids.
(c-forward-name): Bind c-last-identifier-range around the call to
c-forward-<>-arglist to prevent it getting corrupted. Don't automatically
assume an identifier is a type when a template ">" is followed by a "(".
(c-forward-type): Don't automatically assume an identifier is a type when a
template ">" is followed by a "(".
* lisp/progmodes/cc-fonts.el (c-font-lock-<>-arglists): Don't fontify an
identifier as a type when its associated ">" is followed by a "(".