Use cairo_scaled_font_t object for text drawing and metrics calculation
* src/ftfont.h (struct font_info): Replace member cr_font_face of type
cairo_font_face_t * with cr_scaled_font of type cairo_scaled_font_t *.
* src/ftcrfont.c: Include math.h for floor, ceiling, and lround.
(ftcrfont_glyph_extents): Use cairo_scaled_font_glyph_extents.
(ftcrfont_open): Create cairo_scaled_font_t object and set it to
cr_scaled_font member of struct font_info.
(ftcrfont_close): Use cairo_scaled_font_destroy.
(ftcrfont_draw): Use cairo_set_scaled_font.
Make python-shell-prompt-block-regexp match IPython prompt
* lisp/progmodes/python.el (python-shell-prompt-block-regexp): Match
also IPython's multiline prompt. It allows to correctly disable
non-native completions during multiline statement in
inferior-python-mode that runs IPython interpreter (Bug#34582).
Eli Zaretskii [Mon, 15 Apr 2019 14:17:01 +0000 (17:17 +0300)]
Fix MS-Windows build broken by make-fingerprint changes
* lib-src/make-fingerprint.c (fseeko) [WNDOWSNT]: Define to
fseeko64 for non-MinGW64 MinGW.
* lib-src/ntlib.c (stat): Fix calculation of file size.
(fstat): New function, a subset of src/w32.c:fstat. This is
needed because make-fingerprint.c now calls 'fstat', and the
MS version will fail to produce reliable results because
nt/inc/sys/stat.h redefines 'struct stat'.
Don't remove notify descriptor that is already gone
* lisp/autorevert.el (auto-revert-use-notify, auto-revert-mode,
global-auto-revert-mode, auto-revert-notify-rm-watch,
auto-revert-notify-add-watch, auto-revert-notify-handler,
auto-revert-notify-rm-watch-callback):
Don't remove a notify descriptor after receiving a `stopped' notification
event, because the descriptor is then already gone and any attempt to
remove it causes a recursive call to `auto-revert-notify-handler'.
Let debugger handle process spawn errors on w32 (Bug#33016)
Since child_setup() is called between block_input()...unblock_input(),
when an error is signaled the Lisp debugger is prevented from
starting. Therefore, let the callers signal the error instead (which
they already do for non-w32 platforms, just the error message needs an
update).
* src/callproc.c (child_setup) [WINDOWSNT]: Don't call
report_file_error here.
(call_process) [WINDOWNT]:
* src/process.c (create_process) [WINDOWSNT]: Call report_file_errno
here instead, after the unblock_input() call, same as for !WINDOWSNT.
* src/lisp.h (CHILD_SETUP_ERROR_DESC): New preprocessor define. Flip
the containing ifndef DOS_NT branches so that it's ifdef DOS_NT.
* src/eval.c (when_entered_debugger): Remove.
(syms_of_eval) <internal-when-entered-debugger>: Define it as a Lisp
integer variable instead.
(maybe_call_debugger): Update comment.
* test/src/process-tests.el (make-process-w32-debug-spawn-error):
* test/src/callproc-tests.el (call-process-w32-debug-spawn-error): New
tests.
* configure.ac: Bump required GTK 2 and GTK 3 versions and the
associated GLib versions. Remove obsolete AC_CHECK_FUNCS calls. These
check for functions available in later GTK 2 versions. These checks
and can safely be removed with the exception of
gtk_window_set_has_resize_grip, which according to a comment in
gtkutil.c causes an issue in Ubuntu's GTK 2.
* src/gtkutil.c:
* src/xfns.c:
* src/xterm.c:
* src/xterm.h: Remove now unused conditional blocks. Use HAVE_GTK3
instead of GTK_CHECK_VERSION where now applicable. Remove checks of
now always true USE_GTK_TOOLTIP.
Paul Eggert [Sun, 14 Apr 2019 23:31:24 +0000 (16:31 -0700)]
Replace executable’s fingerprint in place
* admin/merge-gnulib (GNULIB_MODULES): Add memmem-simple.
(AVOIDED_MODULES): Add memchr.
* configure.ac (HAVE_PDUMPER): AC_SUBST it, too, for use in makefiles.
* lib/Makefile.in (libgnu_a_OBJECTS): Add fingerprint.o.
* lib/fingerprint.c: New file.
* lib/memmem.c, lib/str-two-way.h, m4/memmem.m4: New files,
copied from Gnulib.
* lib/fingerprint.h: Rename from src/fingerprint.h.
* lib-src/make-fingerprint.c: Include limits.h, sys/stat.h,
fingerprint.h, intprops.h, min-max.h.
(SSIZE_MAX): New macro, if not already defined.
(main): Without -r, Replace the fingerprint in the input file
instead of generating a fingerprint.c.
* lib/Makefile.in (libgnu_a_OBJECTS): Add fingerprint.o.
* lib/gnulib.mk.in, m4/gnulib-comp.m4: Regenerate.
* src/Makefile.in (HAVE_PDUMPER, MAKE_PDUMPER_FINGERPRINT):
New macros.
(temacs$(EXEEXT)): Use them to replace the fingerprint instead
of precalculating it.
(mostlyclean, ctagsfiles1): Do not worry about fingerprint.c.
Paul Eggert [Sun, 14 Apr 2019 04:13:16 +0000 (21:13 -0700)]
Update from Gnulib
This incorporates:
2019-04-07 Add copyright notices in several files
* build-aux/config.sub, doc/misc/texinfo.tex, lib/_Noreturn.h:
Copy from Gnulib.
* lib/gnulib.mk.in: Regenerate.
This fixes oversights from
2018-04-26T16:26:27-07:00!eric@ericabrahamsen.net and
2016-02-13T18:45:11+11:00!larsi@gnus.org.
* lisp/gnus/gnus-group.el (gnus-group-describe-all-groups): Insert
group name and description instead of group name twice. Do not pass
a hash-table to intern. Call sort with correct number of arguments.
Alan Mackenzie [Sat, 13 Apr 2019 13:29:58 +0000 (13:29 +0000)]
Implement "final" before C++ class inheritance lists.
* lisp/progmodes/cc-langs.el (c-class-id-suffix-ws-ids-kwds)
(c-class-id-suffix-ws-ids-key): New lang const/var.
* lisp/progmodes/cc-engine.el (c-guess-basic-syntax CASE 5D.4): Check for and
skip over any matches for c-class-id-suffix-ws-ids-key (i.e. "final") before
":".
Eli Zaretskii [Sat, 13 Apr 2019 08:01:39 +0000 (11:01 +0300)]
Minor cleanup in 'x_set_frame_alpha'
* src/xterm.c (x_set_frame_alpha): Remove redundant parts of
testing of value of 'alpha'. Suggested by Konstantin
Kharlamov <Hi-Angel@yandex.ru>. (Bug#35062)
Eli Zaretskii [Sat, 13 Apr 2019 07:07:15 +0000 (10:07 +0300)]
Improve documentation changes of a recent commit
* doc/lispref/text.texi (Parsing JSON): Improve wording of the
documentation of 'json-parse-string' and 'json-parse-buffer'.
* src/json.c (Fjson_parse_string, Fjson_parse_buffer): Doc fix.
(Bug#34763)
* src/json.c (enum json_array_type): New type.
(struct json_configuration): New field array_type.
(json_parse_args): Rename the last argument. Handle the
:array-type keyword argument (bug#32793).
(Fjson_parse_string): Update the docstring accordingly.
(json_to_lisp): Handle the case of :array-type being `list'. Add
a call to 'rarely_quit' inside the loop.
(syms_of_json): Define new symbols.
(Fjson_serialize, Fjson_insert, Fjson_parse_string)
(Fjson_parse_buffer): Update the config struct initializers.
Alan Mackenzie [Fri, 12 Apr 2019 20:07:03 +0000 (20:07 +0000)]
Analyze C++ method with & or && ref-qualifier as defun, not brace list
Also firm up detection of beginning of brace list in
c-looking-at-or-maybe-in-bracelist.
* lisp/progmodes/cc-engine.el (c-looking-at-or-maybe-in-bracelist): On
detection of such a ref-qualifier, set braceassignp to nil. When this
variable has a nil value, return nil as the value of the function. On
encountering a } when scanning backwards, recognise this as the end of a
previous construct and stop the scan.
Stefan Monnier [Fri, 12 Apr 2019 16:37:00 +0000 (12:37 -0400)]
* lisp/help-fns.el (help-fns-describe-variable-functions): New hook
(help-fns--compiler-macro, help-fns--parent-mode, help-fns--obsolete)
(help-fns--interactive-only): Indent output by 2 spaces.
(help-fns--side-effects): New function extracted from
describe-function-1.
(help-fns-describe-function-functions): Use it.
(help-fns--first-release, help-fns--mention-first-release): New functions.
(help-fns-function-description-header): Keymaps and macros can't
be interactive.
(help-fns--ensure-empty-line): New function.
(describe-function-1): Use it.
(help-fns--var-safe-local, help-fns--var-risky)
(help-fns--var-ignored-local, help-fns--var-file-local)
(help-fns--var-watchpoints, help-fns--var-obsolete)
(help-fns--var-alias, help-fns--var-bufferlocal): New functions,
extacted from describe-variable.
(describe-variable): Run help-fns-describe-variable-functions instead.
818a68b * etc/HISTORY: Update for Emacs 26.2 release. e04aa5a ; ChangeLog.3 update 8297e97 * etc/AUTHORS: Update. 8582936 Improve documentation of 'read-command' dc81c05 ; * CONTRIBUTE: Mention where to ask for the copyright assign... b77723a Fix an outdated URL in a comment
This follows the move of proper-list-p from lisp/subr.el to
src/fns.c in 2018-07-24T15:58:46-07:00!eggert@cs.ucla.edu.
* test/lisp/subr-tests.el (subr-tests--proper-list-p): Move from
here...
* test/src/fns-tests.el (test-proper-list-p): ...to here.
For discussion, see thread starting at:
https://lists.gnu.org/archive/html/emacs-devel/2019-04/msg00316.html
* lisp/emacs-lisp/byte-opt.el: Optimize proper-list-p as a
predicate.
* lisp/subr.el: Mark proper-list-p as pure, and side-effect and
error free.
Alex Murray [Thu, 4 Apr 2019 06:19:48 +0000 (16:49 +1030)]
Pop to originating erc buffer when clicking desktop notification
* lisp/erc/erc-desktop-notifications.el: Switch to lexical-binding.
(erc-notifications-notify): Add a default action to the desktop
notification which pops to the buffer from which the notification
originated. (Bug#35141)
* lisp/gnus/gnus-group.el (gnus-group-prepare-flat-list-dead): Set
gnus-group property to a group name, not active info. (bug#33653)
Simplify surrounding logic.
(gnus-group-prepare-flat, gnus-group-goto-group): Use accessor
macros.
(gnus-group-insert-group-line, gnus-group-new-mail)
(gnus-group-mark-group): Write ?\s instead of ? .
(gnus-group-group-name, gnus-group-list-active): Simplify.
Stefan Monnier [Fri, 12 Apr 2019 01:06:59 +0000 (21:06 -0400)]
* lisp/vc/diff-mode.el: Avoid re-initializing buffer in diff-syntax
(diff--syntax-file-attributes): New var.
(diff-syntax-fontify-hunk): Detect when we're reusing the same buffer as
last time, to avoid re-initializing it. Skip the
diff-syntax-fontify-revisions hash-table, since buffer-alist plays the
same role.
(diff-syntax-fontify-revisions): Delete var.
Stephen Leake [Thu, 11 Apr 2019 20:58:36 +0000 (13:58 -0700)]
Make `next-error' output fewer messages about locus
* lisp/simple.el (next-error-verbosity): New user variable.
(next-error, next-error-internal): Use it to control only outputting
locus message if locus changed.
Fix rgrep in dired using directory for search file pattern
* lisp/progmodes/grep.el (grep-read-files): Allow major modes to
define file name to use for default search pattern.
Add non-directory file at point as default search pattern candidate.
* lisp/dired.el (dired-grep-read-files): Use non-directory file at
point for grep file name pattern. (Bug#34621)
Eli Zaretskii [Thu, 11 Apr 2019 14:00:44 +0000 (17:00 +0300)]
Improve documentation of 'read-command'
* src/minibuf.c (Fread_command): Document the return value
when DEFAULT-VALUE is nil and the user enters nothing.
* doc/lispref/minibuf.texi (High-Level Completion): Document
the printed representation of a symbol whose name is empty.
(Bug#3522)
Alex Branham [Tue, 26 Mar 2019 01:49:01 +0000 (20:49 -0500)]
Backport: Update documentation for indent-relative functions
* lisp/indent.el (indent-relative): Document what happens when there
is no previous nonblank line.
* doc/lispref/text.texi (Relative Indent): Document
indent-relative-first-indent-point instead of obsolete
indent-relative-maybe. Fix documentation of which argument from
'indent-relative' is used.
Add extra text property to fix issue with js2-mode integration
* lisp/progmodes/js.el (js-jsx--put-syntax-table): New function for
consistently ensuring smooth js2-mode integration. js2-mode sets
syntax-table temporarily while parsing buffers—seemingly to recover
from parsing interruptions—and then it later clears syntax-table
blindly. When integrating with js-mode, this means that unterminated
string quotes are re-broken in JSX (i.e., they become strings again,
often stringifying large regions of the buffer which should not be
strings). We try to treat quotes in JSXText as non-strings by setting
syntax-table to a non-“string quote” syntax class, but that stops
working if we lose the property. On the js2-mode end, by scanning for
this second js-jsx-syntax-table property, we can recover the
syntax-table property there.
(js-jsx--text-range, js-jsx--syntax-propertize-tag): Use
js-jsx--put-syntax-table for above reason.
(js-jsx--text-properties): Clear the js-jsx-syntax-table property too.
Paul Eggert [Thu, 11 Apr 2019 02:42:37 +0000 (19:42 -0700)]
Bring back dmpstruct.h
Bring back the dmpstruct.h checking, and use it when
--enable-checking=structs is specified. The checking can be helpful
to some developers, although it gets in the way of others and is
not needed for ordinary tarball builds.
* src/dmpstruct.awk: Restore this file, with mode 644 not 755.
* configure.ac: New option-arg --enable-checking=structs,
implied by --enable-checking.
(CHECK_STRUCTS): New macro and var.
* src/Makefile.in (CHECK_STRUCTS): New macro.
(dmpstruct_headers, dmpstruct.h, dmpstruct.h):
Restore these macros and rules.
(pdumper.o): Restore this dependency if $(CHECK_STRUCTS) is true.
(mostlyclean): Remove dmpstruct.h.
* src/pdumper.c [CHECK_STRUCTS]: Include dmpstruct.h,
and restore checks against hashes.
Enable message saving to work when first use of Gnus (bug#35208)
* lisp/gnus/gnus-group.el (gnus-group-goto-group);
Use gnus-active-hashtb in addition to gnus-newsrc-hashtb to check if
a group exists since some kinds of groups are registered in only one
of them (bug#35208).
Update nxml-mode.texi: completion now gives xmlns="-!-"
* doc/misc/nxml-mode.texi (Completion): As of 2016-01-16 "* lisp/nxml:
Use standard completion; it also works for company-mode", completing
an attribute when there is only one candidate inserts both quotes.
Update the example accordingly.
Juri Linkov [Wed, 10 Apr 2019 20:48:13 +0000 (23:48 +0300)]
Inhibit displaying help buffer in main window in perform-replace
* lisp/replace.el (perform-replace): Use
display-buffer-overriding-action with inhibit-same-window to prevent
the help buffer from being displayed in the main window. (Bug#34972)
Author: Michał Krzywkowski <k.michal@zoho.com>
Copyright-paperwork-exempt: yes
Paul Eggert [Wed, 10 Apr 2019 17:06:21 +0000 (10:06 -0700)]
Fix $(MAKE) -C for out-of-tree bootstraps
Problem reported by Andy Moreton in:
https://lists.gnu.org/r/emacs-devel/2019-04/msg00359.html
* src/Makefile.in (${charsets}, $(lispsource)/loaddefs.el):
Revert incorrect changes to $(MAKE) -C invocations when the
target is in the source tree not the build tree.
Eric Abrahamsen [Wed, 10 Apr 2019 03:13:47 +0000 (20:13 -0700)]
Note that choose-completion-string-functions funcs take four args
* lisp/simple.el (choose-completion-string-functions): Functions in
this list actually need to accept four arguments, though the fourth
should be ignored.
* lisp/progmodes/js.el (js-jsx-align->-with-<): New variable for users
to control one opinionated aspect of JSX indentation. It defaults to
the style seen in the React docs, which many users expected as the
“correct” indentation. Still, the old SGML-style of indentation could
be desirable too, especially since it was the old default. This
ensures users have a way of getting back the old behavior.
(js-jsx--contextual-indentation): Respect js-jsx-align->-with-<.
* test/manual/indent/jsx-align-gt-with-lt.jsx: New test for
js-jsx-align->-with-<.
* lisp/progmodes/js.el (js-jsx-indent-level): New variable for users
to set JSX indentation differently than JS, like before.
(js-jsx--contextual-indentation): Respect js-jsx-indent-level when
it’s set.
* test/manual/indent/jsx-indent-level.jsx: New test for
js-jsx-indent-level.
Gemini Lasswell [Thu, 22 Nov 2018 21:00:03 +0000 (13:00 -0800)]
Address name conflicts in EIEIO documentation (bug#31660)
* doc/misc/eieio.texi (Quick Start): Rename the class used in the
example from 'record' to 'person'.
(Building Classes): Advise user to check for name conflicts before
naming a class. Add a missing apostrophe.
(Making New Objects): Correct grammar. Rename the class used in the
example from 'record' to 'my-class'.
Paul Eggert [Tue, 9 Apr 2019 22:42:10 +0000 (15:42 -0700)]
Remove the need for temacs.in
Instead of building a file temacs.in used only to compute a
fingerprint, compute the fingerprint directly from the .o and
.a files that go into temacs.in. This speeds up the build by
avoiding the need to link temacs twice, once with a dummy
fingerprint.
* lib-src/make-fingerprint.c (main): No need to generate
a fingerprint file that includes config.h, now that fingerprint.c
depends on all the .o files.
* src/Makefile.in ($(libsrc)/make-fingerprint$(EXEEXT)):
Use the same rule as $(libsrc)/make-docfile$(EXEEXT).
* src/fingerprint-dummy.c: Remove.
* src/Makefile.in (${charsets}, $(libsrc)/make-docfile$(EXEEXT))
($(LIBEGNU_ARCHIVE), $(lwlibdir)/liblw.a, $(oldXMenudir)/libXMenu11.a)
(../config.status, ${ETAGS}, ../lisp/TAGS, $(lwlibdir)/TAGS)
($(lispsource)/loaddefs.el):
Prefer ‘$(MAKE) -C $(dir $@)’ to ‘${MAKE} -C SOMESTRING’ when
either will do, as the former is more regular and lets us
coalesce rules better.
(EMACS_DEPS_PRE, EMACS_DEPS_POST, BUILD_EMACS_PRE)
(BUILD_EMACS_POST, temacs.in$(EXEEXT)): Remove.
(FINGERPRINTED): New macro.
(fingerprint.c): Use it instead of temacs.in$(EXEEXT), to
avoid the need to build temacs.in at all.
(temacs$(EXEEXT)): No need to depend on other .o files now;
fingerprint.o is enough, since it depends on the rest.
Spell out what used to be in BUILD_EMACS_PRE and BUILD_EMACS_POST.
(mostlyclean): No need to remove temacs.in.