Dmitry Gutov [Tue, 14 May 2019 02:09:19 +0000 (05:09 +0300)]
Allow customizing the display of project file names when reading
To hopefully resolve a long-running discussion
(https://lists.gnu.org/archive/html/emacs-devel/2019-05/msg00162.html).
* lisp/progmodes/project.el (project-read-file-name-function):
New variable.
(project--read-file-absolute, project--read-file-cpd-relative):
New functions, possible values for the above.
(project-find-file-in): Use the introduced variable.
(project--completing-read-strict): Retain just the logic that fits
the name.
Avoid artifacts in ftx and ftcr font backend drivers
* src/ftcrfont.c (ftcrfont_open):
* src/ftfont.c (ftfont_open2): Make font->height equal to sum of font->ascent
and font->descent. Respect :minspace property.
(ftfont_open2): Remove redundant assignment.
(syms_of_ftfont) <QCminspace>: New DEFSYM.
Kévin Le Gouguec [Sun, 12 May 2019 16:36:09 +0000 (18:36 +0200)]
Stop splicing anonymous faces in font-lock-append-text-property
This is the same fix as 2019-04-29 "Refrain from splicing anonymous
faces in text properties", which was only applied to
font-lock-prepend-text-property.
* lisp/font-lock.el (font-lock-append-text-property): Distinguish list
of faces from property list.
* test/lisp/font-lock-tests.el: New test suite.
Robert Pluim [Mon, 13 May 2019 20:45:16 +0000 (16:45 -0400)]
Document nil value of message-signature and mail-signature
* lisp/gnus/message.el (message-signature): Allow nil as a
customizable value, and describe its effect.
* lisp/mail/sendmail.el (mail-signature): Describe effect of nil
value (bug#32680).
Make eww understand #fragment URLs at point interactively
* lisp/net/eww.el (eww-suggest-uris): Use
thing-at-point-url-at-point instead of url-get-url-at-point
(bug#31927) because it's much better at guessing what the URL
actually is (especially with #fragments).
Paul Eggert [Mon, 13 May 2019 19:43:13 +0000 (12:43 -0700)]
Fix broken build on m68k
The GCC + valgrind fix caused the m68k build to fail (Bug#35711).
Simplify string allocation a bit to make similar problems less
likely in the future.
* src/alloc.c (sdata, SDATA_NBYTES, SDATA_DATA) [GC_CHECK_STRING_BYTES]:
Use the same implementation as with !GC_CHECK_STRING_BYTES,
as the special case is no longer needed.
(SDATA_ALIGN): New constant.
(SDATA_SIZE): Remove this macro, replacing with ...
(sdata_size): ... this new function. All uses changed.
Properly account for sizes and alignments even in the m68k case,
and even if GC_CHECK_STRING_BYTES is not defined.
* lisp/net/shr.el (shr-mark-fill, shr-insert-table): Fix problems
when block-quoting/<li>-ing a table -- the indentation/prefix was
inserted twice (bug#32277).
Noam Postavsky [Sun, 5 May 2019 17:24:15 +0000 (13:24 -0400)]
Improve printing for named keyboard macros (Bug#35486)
* lisp/macros.el (macros--insert-vector-macro): New function,
extracted from insert-kbd-macro.
(insert-kbd-macro): Use it and kmacro-extract-lambda to produce nicer
expressions for macros produced by kmacro-lambda-form.
Noam Postavsky [Sun, 5 May 2019 13:13:19 +0000 (09:13 -0400)]
Use remapping in ffap-bindings (Bug#35577)
* lisp/ffap.el (ffap-bindings): Bind to the [remap COMMAND] instead of
hardcoding the default keybindings. This better adapts better if
non-default are used. And lets the original keybindings be
remembered, so that, e.g., \[find-file] in docstrings will still be
substituted with C-x C-f (even though that binding has been remapped
to find-file-at-point.
* lisp/gnus/gnus-sum.el (gnus-summary-widget-forward)
(gnus-summary-widget-backward): Signal more informative error if
article window is not found. Consider other frames displaying
article buffer, and raise its frame before navigating its
widgets. (bug#35565)
* lisp/gnus/gnus-win.el (gnus-get-buffer-window): Simplify and add
docstring.
Make application/x-patch inlinable in mm-decode.el
* lisp/gnus/mm-decode.el (mm-inline-media-tests, mm-inlined-types):
Include application/x-patch as a synonym of text/x-patch and
text/x-diff. (bug#35236)
* lisp/gnus/gnus-msg.el (gnus-gcc-externalize-attachments):
Fix custom :type.
(gnus-debug-files, gnus-debug-exclude-variables): Mark variables
that have been unused since Emacs 24.1 as obsolete.
(gnus-check-before-posting): Remove unused variable.
If you do `C-h k ... mouse-1 in other frame` (at least if you have a focus
that follows the mouse), then additionally to the down-mouse-1 and mouse-1
events, a `switch-frame` event (and `select-window` event as well sometimes)
is generated. When `read-key-sequence` is called with nil for
`can-return-switch-frame`, this event is not returned but kept for later,
which causes a subsequent `sit-for` to return nil immediately.
This interfered without our "wait for double-click" which in turn prevented
us from stopping after the mouse-1 click, getting stuck waiting for something
else instead.
(help--read-key-sequence): Pass a non-nil `can-return-switch-frame`, so the
subsequent `sit-for` returns more trustworthy information.
Noam Postavsky [Tue, 7 May 2019 12:18:49 +0000 (08:18 -0400)]
Stop using message-default-charset (Bug#35370)
In 2016-02-14 "Remove compat code for older Emacsen",
message-default-charset was obsoleted, and a couple of uses were
removed, but others were left behind.
* lisp/gnus/message.el (message-send-mail)
(message-send-news, message-do-fcc)
(message-encode-message-body):
* lisp/gnus/mml.el (mml-to-mime): Stop using message-default-charset.
Alan Mackenzie [Fri, 10 May 2019 10:21:09 +0000 (10:21 +0000)]
Optimize CC Mode a bit for repetitive insertion and replace-regexp
This is mainly by enhancing a parse-partial-sexp cache to retain recently
calculated values. Also, there are several miscellaneous optimizations and
bug fixes.
* lisp/progmodes/cc-engine.el (c-state-semi-nonlit-near-cache): New buffer
local variable.
(c-state-semi-trim-near-cache, c-state-semi-get-near-cache-entry)
(c-state-semi-put-near-cache-entry, c-state-semi-trim-cache): New functions.
(c-state-semi-pp-to-literal, c-state-full-pp-to-literal): Use the new "near"
cache.
(c-parse-ps-state-below): Use the new function c-state-semi-trim-cache.
(c-before-change-check-<>-operators): Check simply for < or > in the
neighbourhood before doing more expensive processing.
(c-maybe-re-mark-raw-string): Give a backward search limit to an operation
which was needlessly lacking one.
* lisp/progmodes/cc-mode.el (c-doc-fl-decl-start, c-doc-fl-decl-end): Check a
certain regexp is valid before performing the (somewhat expensive) actions of
these functions.
(c-fl-decl-start): In the search for a C++ lambda capture list, replace (slow)
calculation of c-parse-state by a (less slow) c-go-up-list-backward.
Stefan Monnier [Wed, 8 May 2019 19:18:32 +0000 (15:18 -0400)]
* lisp/emacs-lisp/syntax.el (syntax-propertize): `ignore` is like nil
(syntax-ppss-after-change-function): Mark it as obsolete.
* lisp/font-lock.el (font-lock-apply-syntactic-highlight):
Use syntax-ppss-flush-cache instead.
Paul Eggert [Wed, 8 May 2019 15:37:40 +0000 (08:37 -0700)]
Port LIBRSVG_CHECK_VERSION fix to picky cpp
* src/image.c (LIBRSVG_CHECK_VERSION): Define to yield false
if it isn’t already defined.
(svg_load_image): Port to C preprocessors that check the
syntax of the entire preprocessing expression before
evaluating any of it.
Vitalie Spinu [Wed, 8 May 2019 09:12:29 +0000 (11:12 +0200)]
Fix incorrect cloning of eieio-instance-inheritor objects (Bug#34840)
* lisp/emacs-lisp/eieio-base.el (clone): Unbound slots of
eieio-instance-inheritor objects as documented in the docs string
and implemented in the original eieio implementation.
Eli Zaretskii [Wed, 8 May 2019 06:29:20 +0000 (09:29 +0300)]
Add an assertion to xdisp.c
* src/xdisp.c (display_mode_element): Add an assertion where
we assume that 'string' returned by decode_mode_spec is always
either a Lisp string or nil.
(flymake-start-syntax-check-on-newline): Mark it obsolete.
(flymake-after-change-function): Remove obsolete variable
flymake-start-syntax-check-on-newline (temporarily renamed to
flymake-start-on-newline). (Bug#34294)
Paul Eggert [Tue, 7 May 2019 19:26:40 +0000 (12:26 -0700)]
Pacify GCC 9.1
* src/intervals.c (set_intervals_multibyte_1): Omit unused temps.
* src/xdisp.c (display_mode_element): Use !NILP instead of
STRINGP. This convinces GCC we’re not dereferencing a
possibly-null pointer, and should be a bit faster anyway.
John Shahid [Mon, 29 Apr 2019 17:53:38 +0000 (13:53 -0400)]
Fix setting and resetting of scroll-with-delete
The start and end lines of the scroll region must to be in the range
[0,term-height). There are few placees that incorrectly set the end
line of the scroll region to term-height which is outside the valid
range. Combined with another off-by-one error in
term-set-scroll-region's clamping logic, this would cause
term-scroll-with-delete to be unnecessarily turned on.
* lisp/term.el (term-scroll-start,term-scroll-end): Use defvar-local
to define the variables and document the valid range of values that
the variables can take.
(term--last-line): New function to calculate the 0-based index of the
last line.
(term--reset-scroll-region): New function to reset the scroll region
to the full height of the terminal.
(term-mode,term-reset-size,term-reset-terminal): Call
term--reset-scroll-region to reset the scroll region.
(term-set-scroll-region): Fix the off-by-one error in the clamping
logic which allowed term-scroll-end to have values outside the valid
range [0,term-height).
Stefan Monnier [Tue, 7 May 2019 17:41:54 +0000 (13:41 -0400)]
* src/marker.c (buf_bytepos_to_charpos): Re-add the CHAR_HEAD_P assertion
This assertion was removed in 1c349c62305d432abf0fa2b6e3f5d754fe4cab79
because the assumption was invalid during set_intervals_multibyte_1.
So we change set_intervals_multibyte_1 to solve the problem in the same
way as in the rest of Fset_buffer_multibyte, which actually simplifies
the code.
* src/buffer.c (advance_to_char_boundary): Not static any more.
* src/buffer.h (advance_to_char_boundary): Add prototype.
* src/intervals.c (set_intervals_multibyte_1): Use it.
* doc/lispref/commands.texi (Input Events): Specify that events are
non-nil and remove vestiges of bug#10190.
* doc/lispref/os.texi (Recording Input): Document optional argument
of recent-keys.
* lisp/subr.el (eventp): Check that the car of conses is non-nil.
* etc/NEWS: Announce it as an incompatible change.
* src/keyboard.c (Frecent_keys): Clarify that returned "events" are
not real events.
John Shahid [Sun, 28 Apr 2019 19:59:50 +0000 (15:59 -0400)]
Prevent accidental edits in the ansi-term buffer from breaking resizing
* lisp/term.el (term-unwrap-line, term-emulate-terminal): Prevent the
`term-line-wrap` property of newlines from spreading accidentally
when inserting text next to it.
* lisp/progmodes/cc-engine.el (c-beginning-of-statement-1): The variable
before-sws-pos should record the position of a closing paren/brace/bracket
before moving backwards over a sexp. When there is a syntactic WS macro
between the starting point and the closing p/b/b, setq before-sws-pos again
after moving backward over the macro.
Stefan Monnier [Mon, 6 May 2019 16:37:00 +0000 (12:37 -0400)]
* lisp/custom.el: Avoid adding vars to load-history multiple times
Avoid the abuse of (eval `(defvar ...)) which tends to end up
adding redundant entries in `load-history`, as discussed in
https://lists.gnu.org/r/help-gnu-emacs/2019-03/msg00237.html
(custom-initialize-default): Don't add to load-history.
(custom-declare-variable): Use internal--define-uninitialized-variable
and only add the var to load-history once. Do it before calling
`initialize` so the special-variable-p flag is set.
* src/eval.c (Finternal__define_uninitialized_variable): New function.
(Fdefvar, Fdefconst): Use it.
(syms_of_eval): Defsubr' it.
Paul Eggert [Mon, 6 May 2019 00:35:05 +0000 (17:35 -0700)]
Use simpler way to print function pointers
The module code can’t possibly work on weird platforms where
function pointers are wider than data pointers, so there’s no need
to bother with the stackoverflow-like approach that is intended
only for portability to such platforms. Besides, the
stackoverflow-like approach does not work well on weird platforms
where CHAR_BIT is not a multiple of 4.
* src/lisp.h (pMx): New macro.
* src/print.c (data_from_funcptr) [HAVE_MODULES]: New function.
(print_vectorlike) [HAVE_MODULES]: Use it.
(print_object): Make sure buf is big enough for this.
Strip possible source/destination prefixes such as a/ and b/
from directory names. (Bug#35420)
(ediff-fixup-patch-map, ediff-dispatch-file-patching-job)
(ediff-patch-file-internal): Replace string-match with string-match-p.
Juri Linkov [Sun, 5 May 2019 19:43:27 +0000 (22:43 +0300)]
Use ngettext instead of dired-plural-s in Dired (bug#35287)
* lisp/dired-aux.el (dired-map-over-marks-check): Use ngettext
instead of dired-plural-s.
(dired-create-files): Also add colon after operation name.
(dired-compare-directories): Use ngettext and format-message.
(dired-do-compress-to): Use ngettext.
* lisp/dired.el (dired-internal-do-deletions)
(dired-clean-up-after-deletion): Use ngettext instead of dired-plural-s.
Paul Eggert [Sun, 5 May 2019 16:07:44 +0000 (09:07 -0700)]
Port mod-test to --enable-gcc-warnings
* test/data/emacs-module/mod-test.c (NDEBUG): Undef, to prevent
GCC from complaining “error: unused variable ‘dummy’” and failing
to build the test, if --enable-gcc-warnings.
Eli Zaretskii [Sun, 5 May 2019 15:07:26 +0000 (18:07 +0300)]
Fix compilation of mod-test.c on MinGW
* test/data/emacs-module/mod-test.c (Fmod_test_nanoseconds)
[__MINGW32__]: Use _Static_assert, not static_assert, as the
latter is not available in mingw.org's MinGW's assert.h.
*lisp/display-fill-column-indicator.el: Fixed character selection for
the indicator based in the current faces. Extended condition to set
display-fill-column-indicator-character in graphical displays.
*src/xdisp.c: Fixed docstring for display-fill-column-indicator-column
*etc/NEWS: Concordance fix in the display-fill-column-indicator part.
*doc/emacs/display.texi: Name mismatch fix.
*etc/NEWS: reduced the comments about fill-column-indicator
*doc/emacs/display.texi: Added documentation for fill-column-indicator
in this section in the manual
Put all information about auto-revert into a section of its own, and
organise the text in a more logical way. Previously it was mainly
described in the section about reverting (bug#35418).
* doc/emacs/files.texi (Files): Adjust menu.
(Reverting, Auto Revert, Autorevert): Add node `Auto Revert' and move
text on that topic from `Reverting', rearranged. Turn the old
`Autorevert' node into a subsection under `Auto Revert'.
* doc/emacs/arevert-xtra.texi (Autorevert): Rename and turn into
subsubsection.
* doc/emacs/buffers.texi (Several Buffers): Adjust references.
* doc/emacs/emacs.texi (Top): Adjust menu.
* doc/emacs/emacs-xtra.texi (Top): Adjust menu.
(Non-File Buffers): Add node and section lines.
GCC special-cases the type ‘void (*)(void)’ to not emit warnings when
cast, see
https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wcast-function-type.
Make use of this to remove a warning suppression.
* src/dynlib.h: Use void (*)(void) as generic function pointer type.