Paul Eggert [Mon, 5 Jan 2015 17:07:45 +0000 (09:07 -0800)]
Use 0 for Qnil
Fixes Bug#15880.
If USE_LSB_TAG, arrange for the representation of Qnil to be zero so
that NILP (x) is equivalent to testing whether x is 0 at the
machine level. The overall effects of this and the previous patch
shrink the size of the text segment by 2.3% and speeds up
compilation of all the .elc files by about 0.5% on my platform,
which is Fedora 20 x86-64.
* lib-src/make-docfile.c (compare_globals):
* src/lisp.h (lisp_h_XPNTR, lisp_h_XSYMBOL, lisp_h_XUNTAG)
(make_lisp_symbol) [USE_LSB_TAG]:
Symbols now tag the difference from lispsym, not the pointer.
(lisp_h_XUNTAGBASE, TAG_SYMPTR): New macros.
(Lisp_Int0, Lisp_Int1, Lisp_Symbol, Lisp_Misc, Lisp_String, Lisp_Cons):
Renumber so that Lisp_Symbol is 0, so that Qnil is zero.
(XSYMBOL): New forward decl.
(XUNTAGBASE): New function.
(XUNTAG): Use it.
Paul Eggert [Mon, 5 Jan 2015 17:07:45 +0000 (09:07 -0800)]
Compute C decls for DEFSYMs automatically
Fixes Bug#15880.
This patch also makes Q constants (e.g., Qnil) constant addresses
from the C point of view.
* make-docfile.c: Revamp to generate table of symbols, too.
Include <stdbool.h>.
(xstrdup): New function.
(main): Don't process the same file twice.
(SYMBOL): New constant in enum global_type.
(struct symbol): Turn 'value' member into a union, either v.value
for int or v.svalue for string. All uses changed.
(add_global): New arg svalue, which overrides value, so that globals
can have a string value.
(close_emacs_global): New arg num_symbols; all uses changed.
Output lispsym decl.
(write_globals): Output symbol globals too. Output more
ATTRIBUTE_CONST, now that Qnil etc. are C constants.
Output defsym_name table.
(scan_c_file): Move most of guts into ...
(scan_c_stream): ... new function. Scan for DEFSYMs and
record symbols found. Don't read past EOF if file doesn't
end in newline.
* alloc.c, bidi.c, buffer.c, bytecode.c, callint.c, casefiddle:
* casetab.c, category.c, ccl.c, charset.c, chartab.c, cmds.c, coding.c:
* composite.c, data.c, dbusbind.c, decompress.c, dired.c, dispnew.c:
* doc.c, editfns.c, emacs.c, eval.c, fileio.c, fns.c, font.c, fontset.c:
* frame.c, fringe.c, ftfont.c, ftxfont.c, gfilenotify.c, gnutls.c:
* image.c, inotify.c, insdel.c, keyboard.c, keymap.c, lread.c:
* macfont.m, macros.c, minibuf.c, nsfns.m, nsfont.m, nsimage.m:
* nsmenu.m, nsselect.m, nsterm.m, print.c, process.c, profiler.c:
* search.c, sound.c, syntax.c, term.c, terminal.c, textprop.c, undo.c:
* window.c, xdisp.c, xfaces.c, xfns.c, xftfont.c, xmenu.c, xml.c:
* xselect.c, xsettings.c, xterm.c:
Remove Q vars that represent symbols (e.g., Qnil, Qt, Qemacs).
These names are now defined automatically by make-docfile.
* alloc.c (init_symbol): New function.
(Fmake_symbol): Use it.
(c_symbol_p): New function.
(valid_lisp_object_p, purecopy): Use it.
* alloc.c (marked_pinned_symbols):
Use make_lisp_symbol instead of make_lisp_ptr.
(garbage_collect_1): Mark lispsym symbols.
(CHECK_ALLOCATED_AND_LIVE_SYMBOL): New macro.
(mark_object): Use it.
(sweep_symbols): Sweep lispsym symbols.
(symbol_uses_obj): New function.
(which_symbols): Use it. Work for lispsym symbols, too.
(init_alloc_once): Initialize Vpurify_flag here; no need to wait,
since Qt's address is already known now.
(syms_of_alloc): Add lispsym count to symbols_consed.
* buffer.c (init_buffer_once): Compare to Qnil, not to make_number (0),
when testing whether storage is all bits zero.
* dispextern (struct image_type):
* font.c (font_property_table):
* frame.c (struct frame_parm_table, frame_parms):
* keyboard.c (scroll_bar_parts, struct event_head):
* xdisp.c (struct props):
Use XSYMBOL_INIT (Qfoo) and struct Lisp_Symbol * rather than &Qfoo and
Lisp_Object *, since Qfoo is no longer an object whose address can be
taken. All uses changed.
* eval.c (run_hook): New function. Most uses of Frun_hooks changed to
use it, so that they no longer need to take the address of a Lisp sym.
(syms_of_eval): Don't use DEFSYM on Vrun_hooks, as it's a variable.
* frame.c (syms_of_frame): Add defsyms for the frame_parms table.
* keyboard.c (syms_of_keyboard): Don't DEFSYM Qmenu_bar here.
DEFSYM Qdeactivate_mark before the corresponding var.
* keymap.c (syms_of_keymap): Use DEFSYM for Qmenu_bar and Qmode_line
instead of interning their symbols; this avoids duplicates.
(LISP_INITIALLY, TAG_PTR)
(DEFINE_LISP_SYMBOL_BEGIN, DEFINE_LISP_SYMBOL_END, XSYMBOL_INIT):
New macros.
(LISP_INITIALLY_ZERO): Use it.
(enum symbol_interned, enum symbol_redirect, struct Lisp_Symbol)
(EXFUN, DEFUN_ARGS_MANY, DEFUN_ARGS_UNEVALLED, DEFUN_ARGS_*):
Move decls up, to avoid forward uses. Include globals.h earlier, too.
(make_lisp_symbol): New function.
(XSETSYMBOL): Use it.
(DEFSYM): Now just a placeholder for make-docfile.
* lread.c (DEFINE_SYMBOLS): Define, for globals.h.
(intern_sym): New function, with body taken from old intern_driver.
(intern_driver): Use it. Last arg is now Lisp integer, not ptrdiff_t.
All uses changed.
(define_symbol): New function.
(init_obarray): Define the C symbols taken from lispsym.
Use plain DEFSYM for Qt and Qnil.
* syntax.c (init_syntax_once): No need to worry about
Qchar_table_extra_slots.
Dmitry Gutov [Sun, 4 Jan 2015 23:45:30 +0000 (02:45 +0300)]
Add mouse interaction to xref
* lisp/progmodes/xref.el (xref--button-map): New variable.
(xref--mouse-2): New command.
(xref--insert-xrefs): Add `mouse-face' and `keymap' properties to
the inserted references.
Paul Eggert [Sun, 4 Jan 2015 21:20:36 +0000 (13:20 -0800)]
'temacs -nw' should not call missing functions
Without this patch, "temacs -nw" fails with the diagnostic
"emacs: Symbol's function definition is void: frame-windows-min-size"
and messes up the tty's state.
* lib-src/make-docfile.c (write_globals):
Declare Fframe_windows_min_size with ATTRIBUTE_CONST, too. Sort.
* src/frame.c (Fframe_windows_min_size): New placeholder function.
(syms_of_frame): Define it.
* src/window.c (Fwindow__sanitize_window_sizes): New placeholder.
(syms_of_window): Define it.
Paul Eggert [Sun, 4 Jan 2015 02:50:41 +0000 (18:50 -0800)]
Less 'make' chatter for lisp dir
* lisp/Makefile.in (THEFILE): Define to be 'no-such-file' by default,
to make it clearer that the caller must specify it.
(compile-onefile): Remove, replacing by ...
($(THEFILE)c): ... new rule. This lets us use AM_V_GEN here.
($(THEFILE)c, .el.elc, $(MH_E_DIR)/mh-loaddefs.el)
($(TRAMP_DIR)/tramp-loaddefs.el, $(CAL_DIR)/cal-loaddefs.el)
($(CAL_DIR)/diary-loaddefs.el, $(CAL_DIR)/hol-loaddefs.el):
Use AM_V_GEN to lessen 'make' chatter.
(.el.elc): Omit duplicate comment.
* src/Makefile.in (%.elc): Adjust to compile-onefile change in
../lisp/Makefile.in.
Paul Eggert [Sun, 4 Jan 2015 01:48:23 +0000 (17:48 -0800)]
batch write-region no longer says "Wrote FOO"
This cuts down on 'make' chatter a bit.
* doc/lispref/files.texi (Writing to Files):
* etc/NEWS: Document this.
* src/fileio.c (Fwrite_region):
Don't output "Wrote /whatever/foo.elc" if noninteractive.
Dmitry Gutov [Sat, 3 Jan 2015 13:53:18 +0000 (15:53 +0200)]
Don't remap `next-line' and `previous-line' in xref keymap
* lisp/progmodes/xref.el (xref--window-configuration): New variable.
(xref-show-location-at-point): New command.
(xref--restore-window-configuration): New function.
(xref-next-line, xref-prev-line): Delegate to
`xref-show-location-at-point'.
(xref--location-at-point): Don't signal the error.
(xref-goto-xref): Do that here instead.
(xref--xref-buffer-mode): Add `xref--restore-window-configuration'
to `pre-command-hook'.
(xref--xref-buffer-mode-map): Don't remap `next-line' and
`previous-line'. Additionally bind `xref-next-line' and
`xref-prev-line' to `n' and `p' respectively. Bind
`xref-show-location-at-point' to `C-o'.
Martin Rudalics [Sat, 3 Jan 2015 16:40:40 +0000 (17:40 +0100)]
Two fixes for setting up sizes of a new frame (Bug#19428).
* frame.c (x_set_frame_parameters): Call Fset_frame_size only if
f->can_x_set_window_size is true.
* xterm.c (x_set_window_size_1): Call change_frame_size with
text sizes instead of pixel sizes (Bug#19428).
Paul Eggert [Fri, 2 Jan 2015 00:44:53 +0000 (16:44 -0800)]
Less 'make' chatter for unidata
* unidata/Makefile.in (AM_DEFAULT_VERBOSITY, AM_V_GEN, am__v_GEN_)
(am__v_GEN_0, am__v_GEN_1, AM_V_at, am__v_at_, am__v_at_0, am__v_at_1):
New macros, from ../src/Makefile.in.
(${top_srcdir}/src/macuvs.h, %.elc, unidata.txt)
(${unidir}/charprop.el, unifiles): Use them.
(PHONY_EXTRAS): New macro.
(.PHONY, ${unidir}/charprop.el): Use it.
(FORCE): Remove; all uses replaced by PHONY_EXTRAS manipulation.
(${unidir}/charprop.el, extraclean):
Use 'make' conditionals rather than shell.
Paul Eggert [Thu, 1 Jan 2015 22:27:34 +0000 (14:27 -0800)]
Fix copyright years by hand
These are dates that admin/update-copyright did not update, or
updated incorrectly. Also, back out the copyright-date change to
doc/misc/texinfo.tex, as upstream hasn't updated that date yet.
Paul Eggert [Thu, 1 Jan 2015 18:47:17 +0000 (10:47 -0800)]
Merge from origin/emacs-24
a5f90a3 * .gitattributes: New file. 5a9710f Make sure tool-bar changes are reflected on display. 93796ba * autogen.sh: Port better to non-GNU 'cp'. 9758516 Fix a typo in a comment in the previous commit. aa472a3 Fix the pixel coordinates returned by pos-visible-in-window-p. (Bug#19473) d261229 * automated/tramp-tests.el (tramp--test-smb-or-windows-nt-p): New defun. (tramp-test30-special-characters): Use it. (tramp--test-check-files): Filter nil file names out. 9278f05 Omit trailing white space 1c93fd3 Sync with Tramp 2.2.11. 96ebe18 Sync with Tramp 2.2.11. e792450 Sync with Tramp 2.2.11. 2d17e12 Fix ChangeLog entry. 6444482 Fix auto-revert-tail-mode for remote files b5c9c13 Spelling fixes c5504d1 src/w32proc.c (Fw32_get_codepage_charset): Doc fix. (Bug#19458)
Paul Eggert [Wed, 31 Dec 2014 19:59:02 +0000 (11:59 -0800)]
Less 'make' chatter for doc and lisp
[doc/emacs/ChangeLog]
Less 'make' chatter for Emacs doc
* Makefile.in (AM_DEFAULT_VERBOSITY, AM_V_GEN, am__v_GEN_)
(am__v_GEN_0, am__v_GEN_1): New macros, from ../../src/Makefile.in.
(ENVADD, $(buildinfodir)/emacs.info, emacs.html):
Use them.
[doc/lispintro/ChangeLog]
Less 'make' chatter for Emacs doc
* Makefile.in (AM_DEFAULT_VERBOSITY, AM_V_GEN, am__v_GEN_)
(am__v_GEN_0, am__v_GEN_1): New macros, from ../../src/Makefile.in.
(ENVADD, $(buildinfodir)/eintr.info, emacs-lisp-intro.html):
Use them.
[doc/lispref/ChangeLog]
Less 'make' chatter for Emacs doc
* Makefile.in (AM_DEFAULT_VERBOSITY, AM_V_GEN, am__v_GEN_)
(am__v_GEN_0, am__v_GEN_1): New macros, from ../../src/Makefile.in.
(ENVADD, $(buildinfodir)/elisp.info, elisp.html):
Use them.
[doc/misc/ChangeLog]
Less 'make' chatter for Emacs doc
* Makefile.in (AM_DEFAULT_VERBOSITY, AM_V_GEN, am__v_GEN_)
(am__v_GEN_0, am__v_GEN_1): New macros, from ../../src/Makefile.in.
(ENVADD, $(buildinfodir)/%.info, %.html, ${buildinfodir}/ccmode.info)
(${buildinfodir}/efaq%.info, efaq%.html):
Use them.
[lisp/ChangeLog]
Less 'make' chatter in lisp directory
* Makefile.in (AM_DEFAULT_VERBOSITY, AM_V_GEN, am__v_GEN_)
(am__v_GEN_0, am__v_GEN_1): New macros, from ../src/Makefile.in.
(custom-deps, finder-data, autoloads, update-subdirs): Use them.
Paul Eggert [Wed, 31 Dec 2014 15:47:41 +0000 (07:47 -0800)]
Less 'make' chatter at top level
* Makefile.in (AM_DEFAULT_VERBOSITY, AM_V_GEN, am__v_GEN_)
(am__v_GEN_0, am__v_GEN_1, AM_V_at, am__v_at_, am__v_at_0)
(am__v_at_1): New macros, copied from src/Makefile.in.
($(srcdir)/src/config.in, ${srcdir}/info/dir):
Be less chatty when not verbose.
($(srcdir)/src/stamp-h.in): Simplify with '$@'.
Paul Eggert [Wed, 31 Dec 2014 07:29:33 +0000 (23:29 -0800)]
Simplify setfattr use by assuming GNU make
* Makefile.in (PAXCTL_if_present, SETFATTR_if_present): New macros.
(emacs$(EXEEXT), temacs$(EXEEXT), bootstrap-emacs$(EXEEXT)): Use them.
Simplify by using GNU make rather than shell conditionals,
by using ln -f rather than rm -f followed by ln,
and by preferring $@ to spelling out the destination.
Juri Linkov [Tue, 30 Dec 2014 23:50:06 +0000 (01:50 +0200)]
Multi-page isearch support in eww
* lisp/net/eww.el (eww-isearch-next-buffer): New function.
(eww-mode): Set multi-isearch-next-buffer-function to it.
http://lists.gnu.org/archive/html/emacs-devel/2014-12/msg02300.html
Michael Albinus [Tue, 30 Dec 2014 11:45:48 +0000 (12:45 +0100)]
* automated/tramp-tests.el (tramp--test-smb-or-windows-nt-p):
New defun.
(tramp-test30-special-characters): Use it.
(tramp--test-check-files): Filter nil file names out.
Martin Rudalics [Tue, 30 Dec 2014 09:56:43 +0000 (10:56 +0100)]
Update documentation of Temporary Displays.
* display.texi (Temporary Displays): Amend description of
`with-temp-buffer-window'. Add descriptions for
`with-current-buffer-window', `with-displayed-buffer-window' and
`temp-buffer-resize-mode', `temp-buffer-max-height' and
`temp-buffer-max-width'.
* frame.c (frame_inhibit_implied_resize): Escape left paren in
doc-string.
Dmitry Gutov [Tue, 30 Dec 2014 03:18:48 +0000 (05:18 +0200)]
Hide "Set Tags File Name" and the separator when tags are not used
* lisp/menu-bar.el (menu-bar-goto-uses-etags-p): New function.
(menu-bar-goto-menu): Use it to show or hide the `set-tags-name'
and `separator-tag-file' items.
Paul Eggert [Mon, 29 Dec 2014 20:37:53 +0000 (12:37 -0800)]
system-name's returned value can vary
Also, the system-name variable is now obsolete.
Fixes Bug#19438.
* doc/lispref/os.texi (System Environment):
* etc/NEWS: Document this.
* doc/misc/efaq.texi:
(Displaying the current file name in the titlebar):
* lisp/desktop.el (desktop-save-frameset):
* lisp/dnd.el (dnd-get-local-file-uri):
* lisp/gnus/message.el (message-make-fqdn):
* lisp/gnus/nnvirtual.el (nnvirtual-retrieve-headers)
(nnvirtual-update-xref-header):
* lisp/nxml/rng-uri.el (rng-uri-file-name-1):
* lisp/org/org-clock.el (org-clock-save):
* src/filelock.c (current_lock_owner):
* src/xrdb.c (get_environ_db):
* src/xterm.c (same_x_server):
* src/xterm.c (x_term_init):
Prefer (system-name) to system-name, and avoid naming
locals 'system-name'.
* doc/misc/smtpmail.texi (Server workarounds): Fix grammar.
* lisp/startup.el (system-name): Now an obsolete variable.
* src/editfns.c (cached_system_name): New static var.
(init_and_cache_system_name): New function.
(init_editfns, Fsystem_name): Use it.
(syms_of_editfns): Initialize it and Vsystem_name to the same value.
* src/sysdep.c [HAVE_SOCKETS]: Don't include <sys/socket.h>, <netdb.h>.
(h_errno) [TRY_AGAIN && !HAVE_H_ERRNO]: Remove decl.
(init_system_name) [HAVE_SOCKETS]: Don't canonicalize the name.
Don't create a new string if the current value is already correct.
Dmitry Gutov [Mon, 29 Dec 2014 02:21:51 +0000 (04:21 +0200)]
Unbreak jumping to an alias's definition
* lisp/emacs-lisp/find-func.el (find-function-library): Return a pair
(ORIG-FUNCTION . LIBRARY) instead of just its second element.
(find-function-noselect): Use it.
* lisp/progmodes/elisp-mode.el (elisp--xref-identifier-file): Rename to
`elisp--xref-identifier-location', incorporate logic from
`elisp--xref-find-definitions', use the changed
`find-function-library' return value.
Juri Linkov [Mon, 29 Dec 2014 00:52:38 +0000 (02:52 +0200)]
More fixes to support multi-line search in comint
* lisp/comint.el (comint-history-isearch-message): Use field-beginning
instead of comint-line-beginning-position - that's more fixes for
http://lists.gnu.org/archive/html/emacs-devel/2014-12/msg00305.html
(comint-history-isearch-message): Fix args of isearch-message-prefix.
Paul Eggert [Fri, 26 Dec 2014 17:32:06 +0000 (09:32 -0800)]
Wrap dll functions more simply
* decompress.c, gnutls.c, image.c, xml.c:
If WINDOWSNT, use '#define FOO fn_FOO' to wrap dll functions,
rather than the inverse when not WINDOWSNT. This isolates the
fn_* business into the WINDOWSNT-specific section of the code,
which makes it easier to maintain the generic code.
* decompress.c (DEF_ZLIB_FN, LOAD_ZLIB_FN):
* gnutls.c (DEF_GNUTLS_FN, LOAD_GNUTLS_FN):
* image.c (DEF_IMGLIB_FN, LOAD_IMGLIB_FN):
* xml.c (DEF_XML2_FN, LOAD_XML2_FN):
Remove. All uses replaced by DEF_DLL_FN.
* w32.h (DEF_DLL_FN, LOAD_DLL_FN): New macros.
Paul Eggert [Sun, 28 Dec 2014 07:44:25 +0000 (23:44 -0800)]
Port memory-full checking to GnuTLS 3.3
Instead of using gnutls_global_set_mem_functions, check every call
to a GnuTLS function that might return an indication of memory
exhaustion. Suggested by Dmitry Antipov in:
http://lists.gnu.org/archive/html/emacs-devel/2014-12/msg02056.html
* src/gnutls.c (gnutls_global_set_mem_functions) [WINDOWSNT]: Remove.
(init_gnutls_functions): Do not load gnutls_global_set_mem_functions.
(fn_gnutls_global_set_mem_functions) [!WINDOWSNT]: Remove.
All uses removed.
(check_memory_full): New function.
(emacs_gnutls_handshake, emacs_gnutls_handle_error)
(gnutls_make_error, Fgnutls_boot): Use it.
(emacs_gnutls_global_init): Avoid gnutls_global_set_mem_functions.
Juri Linkov [Sun, 28 Dec 2014 00:48:05 +0000 (02:48 +0200)]
Use diff faces for compare-windows
* lisp/vc/compare-w.el: Require diff-mode for diff faces.
(compare-windows-removed, compare-windows-added): New faces
inheriting from diff faces.
(compare-windows): Define obsolete face alias.
(compare-windows-highlight): Replace face `compare-windows' with
new faces `compare-windows-added' and `compare-windows-removed'.
(compare-windows-get-recent-window): Signal an error when
no other window is found.