(occur-edit-mode-map): Bind C-c C-c to occur-cease-edit and C-o to
occur-mode-display-occurrence.
(occur-edit-mode): Add usage message.
(occur-cease-edit): New command.
(occur-after-change-function): Use text properties to find the
position of the prefix text.
(occur-engine): Set stickiness of prefix text properties.
Fixes: debbugs:8463
etc/NEWS: Document the new command and the alias for mail-insert-file.
lisp/mail/sendmail.el (mml-to-mime, mml-attach-file)
(mm-default-file-encoding): Remove autoload forms, they are
replaced with autoload cookies in mml.el and mm-encode.el.
(mail-add-attachment): New command.
(mail-mode-map): Add a menu-bar item for mail-add-attachment.
(mail-mode): Mention mail-insert-file and mail-add-attachment in
the doc string.
(mml-to-mime, mml-attach-file, mm-default-file-encoding): Declare.
lisp/gnus/mm-encode.el (mm-default-file-encoding): Add autoload cookie.
lisp/gnus/mml.el (mml-to-mime, mml-attach-file): Add autoload cookies.
doc/emacs/sending.texi (Mail Misc): Document mail-add-attachment.
* etc/grep.txt: Add `eval' to the Local Variables section that
emulates `grep-filter'.
* lisp/progmodes/grep.el (grep-filter): Avoid incomplete processing by
keeping point where processing of grep matches begins, and
continue to delete remaining escape sequences from the same point.
(grep-filter): Make leading zero optional in "0?1;31m" because
git-grep emits "\033[1;31m" escape sequences unlike expected
"\033[01;31m" as GNU Grep does.
(grep-process-setup): Replace obsolete "ml=" with newer "sl=".
Fixes: debbugs:9408
* doc/lispref/display.texi (Basic Faces): New node. Document new faces.
* doc/lispref/modes.texi (Major Mode Conventions): Move some text there.
(Mode Help): Remove major-mode var, duplicated in Major Modes.
* doc/emacs/modes.texi (Choosing Modes): auto-mode-case-fold is now t.
* doc/lispref/modes.texi (Basic Major Modes): New node. Callers updated.
(Major Modes): Document fundamental-mode and major-mode.
(Major Mode Basics): Node deleted; text moved to Major Modes.
(Derived Modes): Document derived-mode-p.
* doc/emacs/misc.texi (emacsclient Options): Document server-port.
* doc/lispref/display.texi (Progress): Document spinner functionality.
* doc/lispref/frames.texi (Layout Parameters): The defaults for the
menu-bar-lines and tool-bar-lines parameters depend on the mode.
* doc/lispref/objects.texi (Symbol Type): Document ## print representation.
* doc/lispref/os.texi (Killing Emacs): Note that kill-emacs can be called by
operating system signals. Refer to save-buffers-kill-terminal
instead of save-buffers-kill-emacs.
* doc/emacs/package.texi: New file, documenting the package manager.
* doc/emacs/emacs.texi: Include it.
* doc/emacs/help.texi (Help Summary): Add describe-package.
* lisp/tutorial.el (tutorial--default-keys): Update some default bindings.
* etc/NEWS: delete-forward-char is not bound to C-d.
* lisp/bindings.el, lisp/windows.el: Comments.
* lisp/international/characters.el: Add L and R categories.
* lisp/subr.el (bidi-string-mark-left-to-right): Rename from
string-mark-left-to-right. Use category search.
* lisp/buff-menu.el (Buffer-menu-buffer+size): Callers changed.
copied from old default values of `font-lock-warning-face',
`compilation-warning', `compilation-info'.
* lisp/font-lock.el (font-lock-warning-face): Inherit from `error'.
* lisp/progmodes/compile.el (compilation-error): Inherit from `error'.
(compilation-warning): Inherit from `warning'.
(compilation-info): Inherit from `success'.
* lisp/dired.el (dired-marked): Inherit from `warning'.
(dired-flagged): Inherit from `error'.
Fixes: debbugs:6117
doc/lispref/nonascii.texi (Character Properties): Document use of
`bidi-class' and `mirroring' properties as part of reordering.
Provide cross-references to "Bidirectional Display".
doc/lispref/display.texi (Bidirectional Display): Document the pitfalls of
concatenating strings with bidirectional content, with possible
solutions. Document string-mark-left-to-right. Mention paragraph
direction in modes that inherit from prog-mode. Document use of
`bidi-class' and `mirroring' properties as part of reordering.
etc/NEWS: Mark string-mark-left-to-right as documented.
Since these grammars were transcribed from the ECMAScript spec (BSD
licensed) and Python sources (PSL) respectively, the copyright and
license notices must be included in these files.
src/buffer.c (init_buffer_once, syms_of_buffer): Set
bidi-display-reordering to t by default.
doc/emacs/mule.texi (Bidirectional Editing): Document the fact that
bidi-display-reordering is t by default.
lispref/display.texi (Bidirectional Display): Document the fact that
bidi-display-reordering is t by default.
Fix bugs #7616, #8133, #8867.
src/xdisp.c (compute_display_string_pos)
(compute_display_string_end): Accept additional argument STRING.
(init_iterator, reseat_1): Initialize bidi_it->string.s to NULL.
(reseat_to_string): Initialize bidi_it->string.s and
bidi_it->string.schars.
(Fcurrent_bidi_paragraph_direction): Initialize itb.string.s to
NULL (avoids a crash in bidi_paragraph_init). Initialize
itb.string.lstring.
(init_iterator): Call bidi_init_it only of a valid
buffer position was specified. Initialize paragraph_embedding to
L2R.
(reseat_to_string): Initialize the bidi iterator.
(display_string): If we need to ignore text properties of
LISP_STRING, set IT->stop_charpos to IT->end_charpos. (The
original value of -1 will not work with bidi.)
(compute_display_string_pos): First arg is now struct
`text_pos *'; all callers changed. Support display properties on
Lisp strings.
(compute_display_string_end): Support display properties on Lisp
strings.
(init_iterator, reseat_1, reseat_to_string): Initialize the
string.bufpos member to 0 (zero, for compatibility with IT_CHARPOS
when iterating on a string not from display properties).
(compute_display_string_pos, compute_display_string_end): Fix
calculation of the object to scan. Fixes an error when using
arrow keys.
(next_element_from_buffer): Don't abort when IT_CHARPOS is before
base_level_stop; instead, set base_level_stop to BEGV. Fixes
crashes in vertical-motion.
(next_element_from_buffer): Improve commentary for when
the iterator is before prev_stop.
(init_iterator): Initialize bidi_p from the default value of
bidi-display-reordering, not from buffer-local value. Use the
buffer-local value only if initializing for buffer iteration.
(handle_invisible_prop): Support invisible properties on strings
that are being bidi-reordered.
(set_iterator_to_next): Support bidi reordering of C strings and
Lisp strings.
(next_element_from_string): Support bidi reordering of Lisp
strings.
(handle_stop_backwards): Support Lisp strings as well.
(display_string): Support display of R2L glyph rows. Use
IT_STRING_CHARPOS when displaying from a Lisp string.
(init_iterator): Don't initialize it->bidi_p for strings
here.
(reseat_to_string): Initialize it->bidi_p for strings here.
(next_element_from_string, next_element_from_c_string)
(next_element_from_buffer): Add xassert's for correspondence
between IT's object being iterated and it->bidi_it.string
structure.
(face_before_or_after_it_pos): Support bidi iteration.
(next_element_from_c_string): Handle the case of the first string
character that is not the first one in the visual order.
(get_visually_first_element): New function, refactored from common
parts of next_element_from_buffer, next_element_from_string, and
next_element_from_c_string.
(tool_bar_lines_needed, redisplay_tool_bar)
(display_menu_bar): Force left-to-right direction. Add a FIXME
comment for making that be controlled by a user option.
(push_it, pop_it): Save and restore the state of the
bidi iterator. Save and restore the bidi_p flag.
(pop_it): Iterate out of display property for string iteration as
well.
(iterate_out_of_display_property): Support iteration over strings.
(handle_single_display_spec): Set up it->bidi_it for iteration
over a display string, and call bidi_init_it.
(handle_single_display_spec, next_overlay_string)
(get_overlay_strings_1, push_display_prop): Set up the bidi
iterator for displaying display or overlay strings.
(forward_to_next_line_start): Don't use the shortcut if
bidi-iterating.
(back_to_previous_visible_line_start): If handle_display_prop
pushed the iterator stack, restore the internal state of the bidi
iterator by calling bidi_pop_it same number of times.
(reseat_at_next_visible_line_start): If ON_NEWLINE_P is non-zero,
and we are bidi-iterating, don't decrement the iterator position;
instead, set the first_elt flag in the bidi iterator, to produce
the same effect.
(reseat_1): Remove redundant setting of string_from_display_prop_p.
(push_display_prop): xassert that we are iterating a buffer.
(push_it, pop_it): Save and restore paragraph_embedding member.
(handle_single_display_spec, next_overlay_string)
(get_overlay_strings_1, reseat_1, reseat_to_string)
(push_display_prop): Set up the `unibyte' member of bidi_it.string
correctly. Don't assume unibyte strings are not bidi-reordered.
(compute_display_string_pos)
(compute_display_string_end): Fix handling the case of C string.
(push_it, pop_it): Save and restore from_disp_prop_p.
(handle_single_display_spec, push_display_prop): Set the
from_disp_prop_p flag.
(get_overlay_strings_1): Reset the from_disp_prop_p flag.
(pop_it): Call iterate_out_of_display_property only if we are
popping after iteration over a string that came from a display
property. Fix a typo in popping stretch info. Add an assertion
for verifying that the iterator position is in sync with the bidi
iterator.
(handle_single_display_spec, get_overlay_strings_1)
(push_display_prop): Fix initialization of paragraph direction for
string when that of the parent object is not yet determined.
(reseat_1): Call bidi_init_it to resync the bidi
iterator with IT's position. (Bug#7616)
(find_row_edges): If ROW->start.pos gives position
smaller than min_pos, use it as ROW->minpos. (Bug#7616)
(handle_stop, back_to_previous_visible_line_start, reseat_1):
Reset the from_disp_prop_p flag.
(SAVE_IT, RESTORE_IT): New macros.
(pos_visible_p, face_before_or_after_it_pos)
(back_to_previous_visible_line_start)
(move_it_in_display_line_to, move_it_in_display_line)
(move_it_to, move_it_vertically_backward, move_it_by_lines)
(try_scrolling, redisplay_window, display_line): Use them when
saving a temporary copy of the iterator and restoring it back.
(back_to_previous_visible_line_start, reseat_1)
(init_iterator): Empty the bidi cache "stack".
(move_it_in_display_line_to): If iterator ended up at
EOL, but we never saw any buffer positions smaller than
to_charpos, return MOVE_POS_MATCH_OR_ZV. Fixes vertical cursor
motion in bidi-reordered lines.
(move_it_in_display_line_to): Record prev_method and prev_pos
immediately before the call to set_iterator_to_next. Fixes cursor
motion in bidi-reordered lines with stretch glyphs and strings
displayed in margins. (Bug#8133) (Bug#8867)
Return MOVE_POS_MATCH_OR_ZV only if iterator position is past
TO_CHARPOS.
(pos_visible_p): Support positions in bidi-reordered lines. Save
and restore bidi cache.
src/bidi.c (bidi_level_of_next_char): clen should be EMACS_NT, not int.
(bidi_paragraph_info): Delete unused struct.
(bidi_cache_idx, bidi_cache_last_idx): Declare EMACS_INT.
(bidi_cache_start): New variable.
(bidi_cache_reset): Reset bidi_cache_idx to bidi_cache_start, not
to zero.
(bidi_cache_fetch_state, bidi_cache_search)
(bidi_cache_find_level_change, bidi_cache_iterator_state)
(bidi_cache_find, bidi_peek_at_next_level)
(bidi_level_of_next_char, bidi_find_other_level_edge)
(bidi_move_to_visually_next): Compare cache index with
bidi_cache_start rather than with zero.
(bidi_fetch_char): Accept new argument STRING; all callers
changed. Support iteration over a string. Support strings with
display properties. Support unibyte strings. Fix the type of
`len' according to what STRING_CHAR_AND_LENGTH expects.
(bidi_paragraph_init, bidi_resolve_explicit_1)
(bidi_resolve_explicit, bidi_resolve_weak)
(bidi_level_of_next_char, bidi_move_to_visually_next): Support
iteration over a string.
(bidi_set_sor_type, bidi_resolve_explicit_1)
(bidi_resolve_explicit, bidi_type_of_next_char): ignore_bn_limit
can now be zero (for strings); special values 0 and -1 were
changed to -1 and -2, respectively.
(bidi_char_at_pos): New function.
(bidi_paragraph_init, bidi_resolve_explicit, bidi_resolve_weak):
Call it instead of FETCH_MULTIBYTE_CHAR.
(bidi_move_to_visually_next): Abort if charpos or bytepos were not
initialized to valid values.
(bidi_init_it): Don't initialize charpos and bytepos with invalid
values.
(bidi_level_of_next_char): Allow the sentinel "position" to pass
the test for valid cached positions. Fix the logic for looking up
the sentinel state in the cache. GCPRO the Lisp string we are
iterating.
(bidi_push_it, bidi_pop_it): New functions.
(bidi_initialize): Initialize the bidi cache start stack pointer.
(bidi_cache_ensure_space): New function, refactored from part of
bidi_cache_iterator_state. Don't assume the required size is just
one BIDI_CACHE_CHUNK away.
(bidi_cache_start_stack, bidi_push_it): Use IT_STACK_SIZE.
(bidi_count_bytes, bidi_char_at_pos): New functions.
(bidi_cache_search): Don't assume bidi_cache_last_idx is
always valid if bidi_cache_idx is valid.
(bidi_cache_find_level_change): xassert that bidi_cache_last_idx
is valid if it's going to be used.
(bidi_shelve_cache, bidi_unshelve_cache): New functions.
(bidi_cache_fetch_state, bidi_cache_search)
(bidi_cache_find_level_change, bidi_cache_ensure_space)
(bidi_cache_iterator_state, bidi_cache_find)
(bidi_find_other_level_edge, bidi_cache_start_stack): All
variables related to cache indices are now EMACS_INT.
src/dispextern.h (struct bidi_string_data): New structure.
(struct bidi_it): New member `string'. Make flag members be 1-bit
fields, and put them last in the struct.
(compute_display_string_pos, compute_display_string_end): Update
prototypes.
(bidi_push_it, bidi_pop_it): Add prototypes.
(struct iterator_stack_entry): New members bidi_p,
paragraph_embedding, and from_disp_prop_p.
(struct it): Member bidi_p is now a bit field 1 bit wide.
(bidi_shelve_cache, bidi_unshelve_cache): Declare
prototypes.
src/.gdbinit (xvectype, xvector, xcompiled, xchartable, xboolvector)
(xpr, xfont, xbacktrace): Use "header.size" when accessing vectors
and vector-like objects.
src/dispnew.c (buffer_posn_from_coords): Save and restore the bidi
cache around display iteration.
src/window.c (Fwindow_end, window_scroll_pixel_based)
(displayed_window_lines, Frecenter): Save and restore the bidi
cache around display iteration.
lisp/buff-menu.el (Buffer-menu-buffer+size): Accept an additional
argument LRM; if non-nil, append an invisible LRM character to the
buffer name.
(list-buffers-noselect): Call Buffer-menu-buffer+size with the
last argument non-nil, when formatting buffer names.
(Buffer-menu-mode, list-buffers-noselect): Force left-to-right
paragraph direction.
doc/lispref/display.texi (Other Display Specs): Document that `left-fringe'
and `right-fringe' display specifications are of the "replacing"
kind.
* lisp/window.el (switch-to-buffer): New arg FORCE-SAME-WINDOW. Use
pop-to-buffer buffer-or-name if it is nil.
* lisp/emacs-lisp/bytecomp.el (byte-compile-interactive-only-functions):
Remove switch-to-buffer.
* themes/tsdh-light-theme.el:
* themes/tsdh-dark-theme.el: Make `gnus-button' face inherit from
`button', `gnus-header-name' boxed, and define `rcirc-my-nick'
face.
* etc/themes/dichromacy-theme.el:
* etc/themes/tango-theme.el:
* etc/themes/tango-dark-theme.el:
* etc/themes/wheatgrass-theme.el: Don't define button face separately;
it inherits from link now.
* lisp/arc-mode.el (archive-7z-expunge, archive-7z-update):
New defcustoms.
(archive-7z-write-file-member): New function.
(archive-7z-summarize): Fix the number of dashes in the
listing output.
Fixes: debbugs:8968
* src/keymap.c (Fmake_composed_keymap): New function.
(Fset_keymap_parent): Simplify.
(fix_submap_inheritance): Remove.
(access_keymap_1): New function extracted from access_keymap to handle
embedded parents and handle lists of maps.
(access_keymap): Use it.
(Fkeymap_prompt, map_keymap_internal, map_keymap, store_in_keymap)
(Fcopy_keymap): Handle embedded parents.
(Fcommand_remapping, define_as_prefix): Simplify.
(Fkey_binding): Simplify.
(syms_of_keymap): Move minibuffer-local-completion-map,
minibuffer-local-filename-completion-map,
minibuffer-local-must-match-map, and
minibuffer-local-filename-must-match-map to Elisp.
(syms_of_keymap): Defsubr make-composed-keymap.
* src/keyboard.c (menu_bar_items): Use map_keymap_canonical.
(parse_menu_item): Trivial simplification.
* lisp/subr.el (remq): Don't allocate if it's not needed.
(keymap--menu-item-binding, keymap--menu-item-with-binding)
(keymap--merge-bindings): New functions.
(keymap-canonicalize): Use them to refine the canonicalization.
* lisp/minibuffer.el (minibuffer-local-completion-map)
(minibuffer-local-must-match-map): Move initialization from C.
(minibuffer-local-filename-completion-map): Move initialization from C;
don't inherit from anything here.
(minibuffer-local-filename-must-match-map): Make obsolete.
(completing-read-default): Use make-composed-keymap to combine
minibuffer-local-filename-completion-map with either
minibuffer-local-must-match-map or
minibuffer-local-filename-completion-map.
* vc/vc.el (vc-revert-show-diff): New defcustom.
(vc-diff-internal): New arg specifying diff buffer.
(vc-revert): Obey vc-revert-show-diff. If we show a diff, don't
reuse an existing *vc-diff* buffer.
upgrades opportunistically, and to only use auth-source for all
credentials. Mostly backwards compatible, but
`smtpmail-auth-credentials' and `smtpmail-starttls-credentials' are
removed, and users who relied on those will have to put the
credentials in ~/.authinfo instead.
Added those features to etc/TODO wishlist.
Fixed src/.gdbinit for changes in Lisp vector structures.
src/.gdbinit (xvectype, xvector, xcompiled, xchartable, xboolvector)
(xpr, xfont, xbacktrace): Use "header.size" when accessing vectors
and vector-like objects.
* lisp/image.el (image-animate-max-time): Moved to image-mode.el.
(create-animated-image): Remove unnecessary function.
(image-animate): Rename from image-animate-start. New arg.
(image-animate-stop): Removed; just use image-animate-timer.
(image-animate-timer): Use car-safe.
(image-animate-timeout): Rename argument.
* lisp/image-mode.el (image-toggle-animation): New command.
(image-mode-map): Bind it to RET.
(image-mode): Update message.
(image-toggle-display-image): Avoid a spurious cache flush.
(image-transform-rotation): Doc fix.
(image-transform-properties): Return quickly in the normal case.
(image-animate-loop): Rename from image-animate-max-time.
(minibuffer-inactive-mode): New major mode.
* src/minibuf.c (get_minibuffer, read_minibuf_unwind): Call it.
* lisp/mouse.el (mouse-drag-region): Remove the "mouse-1 pops up
the *Messages* buffer" hack.
(mouse-popup-menubar): Don't burp if the event is a normal key.
(completion-category-overrides): New defcustom.
(completion-metadata, completion--field-metadata)
(completion-metadata-get, completion--styles)
(completion--cycle-threshold): New functions.
(completion-try-completion, completion-all-completions):
Add `metadata' argument to choose completion-styles.
(completion--do-completion): Use metadata to choose cycling.
(completion-all-sorted-completions): Use metadata for sorting.
Remove :completion-cycle-penalty which is not needed any more.
(completion--try-word-completion): Add `metadata' argument.
(minibuffer-completion-help): Check metadata for annotation function
and sorting.
(completion-file-name-table): Return `category' metadata.
(minibuffer-completing-file-name): Make obsolete.
* lisp/simple.el (minibuffer-completing-symbol): Make obsolete.
* lisp/icomplete.el (icomplete-completions): Pass new `metadata' param to
completion-try-completion.
* src/minibuf.c (Finternal_complete_buffer): Return `category' metadata.
(read_minibuf): Use get_minibuffer.
(syms_of_minibuf): Use DEFSYM.
(Qmetadata): New var.
* src/data.c (Qbuffer): Don't make it static.
(syms_of_data): Use DEFSYM.
* lisp/replace.el (occur-menu-map, occur-edit-mode-map): New vars.
(occur-mode-map): Bind occur-edit-mode. Use occur-menu-map.
(occur-edit-mode): New major mode (Bug#8463).
(occur-after-change-function): New function.
(occur-engine): Give Occur tags a read-only property.
* lisp/files.el (set-auto-mode):
Also respect mode: entries at the end of the file.
* doc/lispref/modes.texi (Auto Major Mode):
Update for set-auto-mode changes.
* doc/emacs/custom.texi (Specifying File Variables):
Major modes no longer need come first.
* etc/NEWS: Mention this.
* lisp/minibuffer.el (completion--done): New fun.
(completion--do-completion): Use it. New arg `expect-exact'.
(minibuffer-complete, minibuffer-complete-word): Don't output message,
since completion--do-completion does it for us now.
(minibuffer-force-complete): Use completion--done and
completion--replace. Handle sole-completion case with more care.
(minibuffer-complete-and-exit): Use new `expect-exact' arg.
(completion-extra-properties): New var.
(completion-annotate-function): Make obsolete.
(minibuffer-completion-help): Adjust accordingly.
Use completion-list-insert-choice-function.
(completion-at-point, completion-help-at-point):
Bind completion-extra-properties.
(completion-pcm-word-delimiters): Add | (for uniquify, for example).
* lisp/simple.el (completion-list-insert-choice-function): New var.
(completion-setup-function): Preserve it.
(choose-completion): Pay attention to it, shuffle the code a bit.
(choose-completion-string): New arg `insert-function'.
* lisp/textmodes/bibtex.el: Convert to lexical binding.
(bibtex-mode-map): Use completion-at-point.
(bibtex-mode): Use define-derived-mode&completion-at-point-functions.
(bibtex-completion-at-point-function): New fun, from bibtex-complete.
(bibtex-complete): Define as obsolete alias.
(bibtex-complete-internal): Remove.
(bibtex-format-entry): Remove unused sub-group in regexp.
* lisp/shell.el (shell--command-completion-data)
(shell-environment-variable-completion):
* lisp/pcomplete.el (pcomplete-completions-at-point):
* lisp/comint.el (comint--complete-file-name-data): Use :exit-function
instead of completion-table-with-terminator so it also works for
choose-completion.
* lisp/calendar/calendar.el (calendar-customized-p): New function.
(calendar-abbrev-construct, calendar-make-alist): Change what it does.
(calendar-day-name-array, calendar-month-name-array): Doc fix.
Add :set function.
(calendar-abbrev-length, calendar-day-abbrev-array)
(calendar-month-abbrev-array): Make defcustoms, with appropriate :set.
(calendar-day-abbrev-array, calendar-month-abbrev-array):
Elements may no longer be nil.
(calendar-day-name, calendar-month-name):
Update for changed nature of abbrev arrays.
* calendar/diary-lib.el (diary-name-pattern):
Update for changed nature of abbrev arrays.
(diary-mark-entries-1): Update calendar-make-alist calls.
(diary-font-lock-date-forms): Doc fix for changed abbrev arrays.
* calendar/cal-html.el (cal-html-day-abbrev-array):
Simply inherit from calendar-day-abbrev-array.
* etc/NEWS: Mention this.
* lisp/files.el (hack-one-local-variable-eval-safep):
Consider "eval: (foo-mode)" to be safe.
* doc/emacs/custom.texi (Specifying File Variables):
Deprecate using mode: for minor modes.
* etc/NEWS: Mention this.
* lisp/doc-view.el, lisp/net/soap-client.el:
Change "mode:" minor-mode file local variables to use "eval:".
* progmodes/grep.el (grep-mode-font-lock-keywords): Remove
buffer-changing entries.
(grep-filter): New function.
(grep-mode): Add it to compilation-filter-hook.
* progmodes/compile.el (compilation-filter-hook)
(compilation-filter-start): New defvars.
(compilation-filter): Call compilation-filter-hook prior to
updating the process mark.
src/w32heap.c (allocate_heap) [USE_LISP_UNION_TYPE || USE_LSB_TAG]:
New version that can reserve upto 2GB of heap space.
etc/NEWS: Mention the new feature.
* etc/NEWS: Document `delayed-warnings-list' and `delayed-warnings-hook'.
* lisp/subr.el (display-delayed-warnings): New function.
(delayed-warnings-hook): New variable.
* src/keyboard.c (Qdelayed_warnings_hook): Define.
(command_loop_1): Run `delayed-warnings-hook' if Vdelayed_warnings_list
is non-nil.
(syms_of_keyboard) <delayed-warnings-hook>: DEFSYM it.
(syms_of_keyboard) <delayed-warnings-list>: DEFVAR_LISP it.
(shell-filter-ctrl-a-ctrl-b): Work as a preoutput filter.
(shell-mode): Put shell-filter-ctrl-a-ctrl-b on
comint-preoutput-filter-functions rather than on
comint-output-filter-functions.
(shell-command-completion, shell--command-completion-data)
(shell-filename-completion, shell-environment-variable-completion)
(shell-c-a-p-replace-by-expanded-directory): New functions.
(shell-dynamic-complete-functions, shell-dynamic-complete-command)
(shell-dynamic-complete-filename, shell-replace-by-expanded-directory)
(shell-dynamic-complete-environment-variable): Use them.
(shell-dynamic-complete-as-environment-variable)
(shell-dynamic-complete-as-command): Remove.
(shell-match-partial-variable): Match past point.
* lisp/comint.el: Clean up use of completion-at-point-functions.
(comint-completion-at-point): New function.
(comint-mode): Use it completion-at-point-functions.
(comint-dynamic-complete): Make it obsolete.
(comint-replace-by-expanded-history-before-point): Add dry-run arg.
(comint-c-a-p-replace-by-expanded-history): New function.
(comint-dynamic-complete-functions)
(comint-replace-by-expanded-history): Use it.
* lisp/minibuffer.el (completion-table-with-terminator): Allow dynamic
termination strings. Try harder to avoid second try-completion.
(completion-in-region-mode-map): Disable bindings that don't work yet.
(vc-version-ediff, vc-ediff): New functions.
(vc-version-diff): Use vc-diff-build-argument-list-internal.
* doc/emacs/maintaining.texi (Old Revisions): Add paragraph on new function
vc-ediff.
* etc/NEWS: Document new function `vc-ediff'.
Use this for Tabulated List mode.
* lisp/emacs-lisp/tabulated-list.el (tabulated-list-mode): Use a custom
glyphless-char-display table.
(tabulated-list-glyphless-char-display): New var.
* src/term.c (produce_glyphless_glyph): Handle cons cell entry in
glyphless-char-display.
* src/xdisp.c (lookup_glyphless_char_display)
(produce_glyphless_glyph): Handle cons cell entry in
glyphless-char-display.
(Vglyphless_char_display): Document it.
* lisp/files.el (after-find-file-from-revert-buffer): Remove variable.
(after-find-file): Dont' bind it.
(revert-buffer-in-progress-p): New variable.
(revert-buffer): Bind it.
Pass nil for `after-find-file-from-revert-buffer'.
* lisp/saveplace.el (save-place-find-file-hook): Use new variable
`rever-buffer-in-progress-p', not `after-find-file-from-revert-buffer'.
* etc/NEWS: New variable `revert-buffer-in-progress-p'.
* doc/lispref/eval.texi (Eval): Discourage the use of `eval'.
Document its new `lexical' argument.
* doc/lispref/variables.texi (Defining Variables): Mention the new meaning of `defvar'.
(Lexical Binding): New sub-section.
* lisp/Makefile.in (BIG_STACK_DEPTH, BIG_STACK_OPTS, BYTE_COMPILE_FLAGS):
New variables.
(compile-onefile, .el.elc, compile-calc, recompile): Use them.
(COMPILE_FIRST): Add macroexp and cconv.
* lisp/makefile.w32-in: Mirror changes in Makefile.in.
* lisp/vc/cvs-status.el:
* lisp/vc/diff-mode.el:
* lisp/vc/log-edit.el:
* lisp/vc/log-view.el:
* lisp/vc/smerge-mode.el:
* lisp/textmodes/bibtex-style.el:
* textmodes/css.el:
* lisp/startup.el:
* lisp/uniquify.el:
* lisp/minibuffer.el:
* lisp/newcomment.el:
* lisp/reveal.el:
* lisp/server.el:
* lisp/mpc.el:
* lisp/emacs-lisp/smie.el:
* lisp/doc-view.el:
* lisp/dired.el:
* lisp/abbrev.el: Use lexical binding.
* lisp/custom.el (custom-initialize-default, custom-declare-variable):
Use `defvar'.
* lisp/files.el (lexical-binding): Declare safe.
* lisp/help-fns.el (help-split-fundoc): Return nil if there's nothing else
than the arglist.
(help-add-fundoc-usage): Don't add `Not documented'.
(help-function-arglist): Handle closures, subroutines, and new
byte-code-functions.
(help-make-usage): Remove leading underscores.
(describe-function-1): Handle closures.
(describe-variable): Use special-variable-p for completion.
* lisp/simple.el (with-wrapper-hook, apply-partially): Move to subr.el.
* lisp/subr.el (apply-partially): Use new closures rather than CL.
(--dolist-tail--, --dotimes-limit--): Don't declare dynamic.
(dolist, dotimes): Use slightly different expansion for lexical code.
(functionp): Move to C.
(letrec): New macro.
(with-wrapper-hook): Use it and apply-partially instead of CL.
(eval-after-load): Preserve lexical-binding.
(save-window-excursion, with-output-to-temp-buffer): Turn them
into macros.
* lisp/emacs-lisp/advice.el (ad-arglist): Use help-function-arglist.
* lisp/emacs-lisp/autoload.el (make-autoload): Don't burp on trivial macros.
* lisp/emacs-lisp/byte-opt.el: Use lexical binding.
(byte-inline-lapcode): Remove (to bytecomp).
(byte-compile-inline-expand): Pay attention to inlining to/from
lexically bound code.
(byte-compile-unfold-lambda): Don't handle byte-code-functions
any more.
(byte-optimize-form-code-walker): Don't handle save-window-excursion
any more and don't call compiler-macros.
(byte-compile-splice-in-already-compiled-code): Remove.
(byte-code): Don't inline any more.
(disassemble-offset): Receive `bytes' as argument rather than via
dynamic scoping.
(byte-compile-tag-number): Declare before first use.
(byte-decompile-bytecode-1): Handle new byte-codes, don't change
`return' even if make-spliceable.
(byte-compile-side-effect-and-error-free-ops): Add stack-ref, remove
obsolete interactive-p.
(byte-optimize-lapcode): Optimize new lap-codes.
Don't trip up on new form of `byte-constant' lap code.
* lisp/emacs-lisp/byte-run.el (make-obsolete): Don't set the `byte-compile'
handler any more.
* lisp/emacs-lisp/bytecomp.el: Use lexical binding instead of
a "bytecomp-" prefix. Macroexpand everything as a separate phase.
(byte-compile-initial-macro-environment):
Handle declare-function here.
(byte-compile--lexical-environment): New var.
(byte-stack-ref, byte-stack-set, byte-discardN)
(byte-discardN-preserve-tos): New lap codes.
(byte-interactive-p): Don't use any more.
(byte-compile-push-bytecodes, byte-compile-push-bytecode-const2):
New macros.
(byte-compile-lapcode): Use them and handle new lap codes.
(byte-compile-obsolete): Remove.
(byte-compile-arglist-signature): Handle new byte-code arg"lists".
(byte-compile-arglist-warn): Check late def of inlinable funs.
(byte-compile-cl-warn): Don't silence warnings for compiler-macros
since they should have been expanded by now.
(byte-compile--outbuffer): Rename from bytecomp-outbuffer.
(byte-compile-from-buffer): Remove unused second arg.
(byte-compile-preprocess): New function.
(byte-compile-toplevel-file-form): New function to distinguish
file-form calls from outside from file-form calls from hunk-handlers.
(byte-compile-file-form): Simplify.
(byte-compile-file-form-defsubst): Remove.
(byte-compile-file-form-defmumble): Simplify now that
byte-compile-lambda always returns a byte-code-function.
(byte-compile): Preprocess.
(byte-compile-byte-code-maker, byte-compile-byte-code-unmake):
Remove, not used any more.
(byte-compile-arglist-vars, byte-compile-make-lambda-lexenv)
(byte-compile-make-args-desc): New funs.
(byte-compile-lambda): Handle lexical functions. Always return
a byte-code-function.
(byte-compile-reserved-constants): New var, to make up room for
closed-over variables.
(byte-compile-constants-vector): Obey it.
(byte-compile-top-level): New args `lexenv' and `reserved-csts'.
(byte-compile-macroexpand-declare-function): New function.
(byte-compile-form): Call byte-compile-unfold-bcf to inline immediate
byte-code-functions.
(byte-compile-form): Check obsolescence here.
(byte-compile-inline-lapcode, byte-compile-unfold-bcf): New functions.
(byte-compile-variable-ref): Remove.
(byte-compile-dynamic-variable-op): New fun.
(byte-compile-dynamic-variable-bind, byte-compile-variable-ref)
(byte-compile-variable-set): New funs.
(byte-compile-discard): Add 2 args.
(byte-compile-stack-ref, byte-compile-stack-set)
(byte-compile-make-closure, byte-compile-get-closed-var): New funs.
(byte-compile-funarg, byte-compile-funarg-2): Remove, handled in
macroexpand-all instead.
(byte-compile-quote-form): Remove.
(byte-compile-push-binding-init, byte-compile-not-lexical-var-p)
(byte-compile-bind, byte-compile-unbind): New funs.
(byte-compile-let): Handle let* and lexical binding.
(byte-compile-let*): Remove.
(byte-compile-catch, byte-compile-unwind-protect)
(byte-compile-track-mouse, byte-compile-condition-case):
Handle a new :fun-body form, used for lexical scoping.
(byte-compile-save-window-excursion)
(byte-compile-with-output-to-temp-buffer): Remove.
(byte-compile-defun): Simplify.
(byte-compile-stack-adjustment): New fun.
(byte-compile-out): Use it.
(byte-compile-refresh-preloaded): Don't reload byte-compiler files.
* lisp/emacs-lisp/cconv.el: New file.
* lisp/emacs-lisp/cl-extra.el (cl-macroexpand-all): Properly quote CL
closures.
* lisp/emacs-lisp/cl-macs.el (cl-byte-compile-block)
(cl-byte-compile-throw): Remove.
(cl-block-wrapper, cl-block-throw): Use compiler-macros instead.
* lisp/emacs-lisp/cl.el (pushnew): Silence warning.
* lisp/emacs-lisp/disass.el (disassemble-internal): Handle new
`closure' objects.
(disassemble-1): Handle new byte codes.
* lisp/emacs-lisp/edebug.el (edebug-eval-defun)
(edebug-eval-top-level-form): Use eval-sexp-add-defvars.
(edebug-toggle): Avoid `eval'.
* lisp/emacs-lisp/eieio-comp.el: Remove.
* lisp/emacs-lisp/eieio.el (byte-compile-file-form-defmethod):
Don't autoload.
(eieio-defgeneric-form-primary-only-one): Use `byte-compile' rather
than the internal `byte-compile-lambda'.
(defmethod): Don't hide code under quotes.
(eieio-defmethod): New `code' argument.
* lisp/emacs-lisp/float-sup.el (pi): Don't declare as dynamically bound.
* lisp/emacs-lisp/lisp-mode.el (eval-last-sexp-1):
Use eval-sexp-add-defvars.
(eval-sexp-add-defvars): New fun.
* lisp/emacs-lisp/macroexp.el: Use lexical binding.
(macroexpand-all-1): Check obsolete macros. Expand compiler-macros.
Don't convert ' to #' without checking that it's indeed quoting
a lambda.
* lisp/emacs-lisp/pcase.el: Don't use destructuring-bind.
(pcase--memoize): Rename from pcase-memoize. Change weakness.
(pcase): Add `let' pattern.
Change memoization so it actually works.
(pcase-mutually-exclusive-predicates): Add byte-code-function-p.
(pcase--u1) <guard, pred>: Fix possible shadowing problem.
<let>: New case.
* src/alloc.c (Fmake_symbol): Init new `declared_special' field.
* src/buffer.c (defvar_per_buffer): Set new `declared_special' field.
* src/bytecode.c (Bstack_ref, Bstack_set, Bstack_set2, BdiscardN):
New byte-codes.
(exec_byte_code): New function extracted from Fbyte_code to handle new
calling convention for byte-code-functions. Add new byte-codes.
* src/callint.c (Fcall_interactively): Preserve lexical-binding mode for
interactive spec.
* src/doc.c (Fdocumentation, store_function_docstring):
* src/data.c (Finteractive_form): Handle closures.
* src/eval.c (Fsetq): Handle lexical vars.
(Fdefun, Fdefmacro, Ffunction): Make closures when needed.
(Fdefconst, Fdefvaralias, Fdefvar): Mark as dynamic.
(FletX, Flet): Obey lexical binding.
(Fcommandp): Handle closures.
(Feval): New `lexical' arg.
(eval_sub): New function extracted from Feval. Use it almost
everywhere where Feval was used. Look up vars in lexical env.
Handle closures.
(Ffunctionp): Move from subr.el.
(Ffuncall): Handle closures.
(apply_lambda): Remove `eval_flags'.
(funcall_lambda): Handle closures and new byte-code-functions.
(Fspecial_variable_p): New function.
(syms_of_eval): Initialize the Vinternal_interpreter_environment var,
but without exporting it to Lisp.
* src/fns.c (concat, mapcar1): Accept byte-code-functions.
* src/image.c (parse_image_spec): Use Ffunctionp.
* src/keyboard.c (eval_dyn): New fun.
(menu_item_eval_property): Use it.
* src/lisp.h (struct Lisp_Symbol): New field `declared_special'.
* src/lread.c (lisp_file_lexically_bound_p): New function.
(Fload): Bind Qlexical_binding.
(readevalloop): Remove `evalfun' arg.
Bind Qinternal_interpreter_environment.
(Feval_buffer): Bind Qlexical_binding.
(defvar_int, defvar_bool, defvar_lisp_nopro, defvar_kboard):
Mark as dynamic.
(syms_of_lread): Declare `lexical-binding'.
* src/window.c (Ftemp_output_buffer_show): New fun.
(Fsave_window_excursion):
* src/print.c (Fwith_output_to_temp_buffer): Move to subr.el.
* lisp/minibuffer.el (completion-table-dynamic): Optimize `boundaries'.
(completion-in-region-mode): New minor mode.
(completion-in-region): Use it.
(completion-in-region--data, completion-in-region-mode-map): New vars.
(completion-in-region--postch): New function.
(completion--capf-misbehave-funs, completion--capf-safe-funs): New vars.
(completion--capf-wrapper): New function.
(completion-at-point): Use it to track well-behavedness of hook functions.
(completion-help-at-point): New command.
* src/eval.c (enum run_hooks_condition): Remove.
(funcall_nil, funcall_not): New functions.
(run_hook_with_args): Call each function through a `funcall' argument.
Remove `cond' argument, now redundant.
(Frun_hooks, Frun_hook_with_args, Frun_hook_with_args_until_success)
(Frun_hook_with_args_until_failure): Adjust accordingly.
(run_hook_wrapped_funcall, Frun_hook_wrapped): New functions.
* src/keyboard.c (safe_run_hook_funcall): New function.
(safe_run_hooks_1, safe_run_hooks_error, safe_run_hooks): On error,
don't set the hook to nil, but remove the offending function instead.
(Qcommand_hook_internal): Remove, unused.
(syms_of_keyboard): Don't initialize Qcommand_hook_internal nor define
Vcommand_hook_internal.
* doc/lispref/commands.texi (Command Overview): post-command-hook is not reset
to nil any more.