Eli Zaretskii [Sat, 10 Dec 2016 09:06:23 +0000 (11:06 +0200)]
Fix building with check-lisp-object-type
* src/thread.c (mark_one_thread): Use NILP to compare with
m_saved_last_thing_searched, which is a Lisp object. Reported by
Andreas Politz <politza@hochschule-trier.de>.
Eli Zaretskii [Fri, 9 Dec 2016 16:23:04 +0000 (18:23 +0200)]
Fix compilation warnings due to prototype of thread_select
* src/thread.h <int select_func>: Make the 5th and 6th arguments
be 'const'.
* src/process.c [WINDOWSNT]:
* src/w32proc.c: Make the 5th and 6th argument to sys_select be
'const'.
Eli Zaretskii [Fri, 9 Dec 2016 14:03:08 +0000 (16:03 +0200)]
Fix subtle errors with let-binding of localized variables
* src/eval.c (do_specbind): Don't require a "symbol" that is
actually a cons cell, in order to call set-default, as there are
no longer such bindings. This makes do_specbind work like the
pre-concurrency implementation in specbind for bindings of
forwarded symbols. Use specpdl_kind to access the type of the
binding.
(specpdl_kind): New function.
Mark Oteiza [Fri, 2 Dec 2016 21:53:02 +0000 (16:53 -0500)]
Display window before calculating width
* lisp/image-dired.el (image-dired-display-thumbs): Display the buffer
before calling image-dired-line-up and friends, which in turn calculate
the window width. Otherwise, the thumbnail layout will be wrong in
a side-by-side split.
Noam Postavsky [Sat, 21 Nov 2015 22:02:42 +0000 (17:02 -0500)]
Ensure redisplay using variable watcher
This replaces looking up the variable name in redisplay--variables when
setting it.
* lisp/frame.el: Replace redisplay--variables with add-variable-watcher
calls.
* src/xdisp.c (Fset_buffer_redisplay): Rename from maybe_set_redisplay,
set the redisplay flag unconditionally.
(Vredisplay__variables): Remove it.
* src/data.c (set_internal): Remove maybe_set_redisplay call.
Noam Postavsky [Fri, 20 Nov 2015 00:50:06 +0000 (19:50 -0500)]
Add lisp watchpoints
This allows calling a function whenever a symbol-value is changed.
* src/lisp.h (lisp_h_SYMBOL_TRAPPED_WRITE_P):
(SYMBOL_TRAPPED_WRITE_P): New function/macro.
(lisp_h_SYMBOL_CONSTANT_P): Check for SYMBOL_NOWRITE specifically.
(enum symbol_trapped_write): New enumeration.
(struct Lisp_Symbol): Rename field constant to trapped_write.
(make_symbol_constant): New function.
* src/data.c (Fadd_variable_watcher, Fremove_variable_watcher):
(set_symbol_trapped_write, restore_symbol_trapped_write):
(harmonize_variable_watchers, notify_variable_watchers): New functions.
* src/data.c (Fset_default): Call `notify_variable_watchers' for trapped
symbols.
(set_internal): Change bool argument BIND to 3-value enum and call
`notify_variable_watchers' for trapped symbols.
Reuben Thomas [Tue, 8 Nov 2016 22:04:52 +0000 (22:04 +0000)]
Remove obsolete comments and commented code from dired-x.el
* lisp/dired-x.el (dired-mark-sexp): Remove a query from 1993 and its
1997 answer about whether dired-mark-sexp is used.
* lisp/dired-x.el (dired-buffers-for-dir-exact): Remove this function
commented out since before dired-x.el was added to RCS in 1994.
Reuben Thomas [Tue, 8 Nov 2016 22:01:59 +0000 (22:01 +0000)]
Remove pre-customize dired-x.el documentation
* lisp/dired-x.el (Commentary): Remove USAGE section explaining how to
use dired-x from .emacs. It is now fully customizable.
* lisp/dired-x.el (dired-guess-shell-alist-user): Remove explanation of
how to set this custom variable in .emacs. It should be customized.
Reuben Thomas [Tue, 8 Nov 2016 17:42:24 +0000 (17:42 +0000)]
Allow files to be matched case-sensitively in dired-x
* lisp/dired-x.el (dired-mark-unmarked-files): Add an argument which
controls case folding for matching the regex (Bug#18716).
(dired-omit-case-fold): New variable. Defaults to `t' on case-sensitive
systems, `nil' otherwise.
(dired-mark-omitted, dired-omit-expunge): Use dired-omit-case-fold.
* doc/misc/dired-x.texi, etc/NEWS: Document dired-omit-case-fold.
Reuben Thomas [Tue, 8 Nov 2016 11:53:20 +0000 (11:53 +0000)]
Add support for curly quotation marks to electric-pair-mode
* lisp/elec-pair.el (electric-pair-pairs, electric-pair-text-pairs): Add
entries for left/right single/double quotation marks, from
electric-quote-chars. Note that this is safe for single quotation marks,
unlike with the ASCII apostrophe, since, although the right quotation
mark can be used as an apostrophe, it is the left quotation mark that is
typed to get a pair (Bug#24901).
Michael Albinus [Fri, 2 Dec 2016 10:38:19 +0000 (11:38 +0100)]
Handle quoted file names in Tramp
* lisp/net/tramp.el (tramp-file-name-handler): Handle also the
case the file name is quoted. This is not trapped by the
reassigned `tramp-file-name-regexp' anymore.
Paul Eggert [Fri, 2 Dec 2016 05:47:12 +0000 (21:47 -0800)]
Make struct font_drivers read-only
This simplifies the code a bit, and makes the structs more
shareable and less likely to become corrupt.
* src/alloc.c (cleanup_vector):
* src/font.c (valid_font_driver, font_prepare_cache)
(font_finish_cache, font_get_cache, font_clear_cache)
(register_font_driver, font_update_drivers):
* src/font.h (struct font, struct font_driver_list)
(valid_font_driver):
struct font_drivers are now const.
* src/font.c, src/ftcrfont.c, src/ftfont.c, src/nsfont.m, src/xfont.c:
Omit no-longer-necessary decls.
* src/ftcrfont.c (syms_of_ftcrfont):
* src/ftxfont.c (syms_of_ftxfont):
* src/xftfont.c (syms_of_xftfont):
Omit no-longer-necessary initialization code.
* src/ftcrfont.c (ftcrfont_driver):
* src/ftfont.c (ftfont_driver):
* src/ftxfont.c (ftxfont_driver):
* src/macfont.m (macfont_driver):
* src/nsfont.m (nsfont_driver):
* src/xfont.c (xfont_driver):
* src/xftfont.c (xftfont_driver):
Use C99-style initializer for ease of maintenance, and make it const.
* src/ftcrfont.c, src/ftxfont.c, src/xftfont.c:
Refer to functions like ftfont_text_extents directly.
* src/ftfont.c (ftfont_get_cache, ftfont_list, ftfont_list_family)
(ftfont_has_char, ftfont_encode_char, ftfont_text_extents)
(ftfont_get_bitmap, ftfont_anchor_point, ftfont_otf_capability)
(ftfont_variation_glyphs, ftfont_filter_properties)
(ftfont_combining_capability):
* src/xfont.c (xfont_get_cache):
Now extern, so that other modules’ struct font_drivers can use
them directly.
* src/macfont.m (macfont_descriptor_entity):
* src/nsfont.m (nsfont_open):
Use constant directly; this is clearer.
Helmut Eller [Thu, 1 Dec 2016 16:58:08 +0000 (18:58 +0200)]
Forth related improvements for etags
Generate correct tags names for things like "(foo)".
Previously "(foo" created.
Fix a bug where a tag for "-bar" was created when encountering things
like "create-bar".
Recognize more words from the Forth-2012 Standard.
* lib-src/etags.c (Forth_words): Check for whitespace after defining
words. Create tag with make_tag instead of get_tag to avoid notiname
which isn't appropriate for Forth.
* test/manual/etags/forth-src/test-forth.fth: Add some test cases.
* test/manual/etags/ETAGS.good_1:
* test/manual/etags/ETAGS.good_2:
* test/manual/etags/ETAGS.good_3:
* test/manual/etags/ETAGS.good_4:
* test/manual/etags/ETAGS.good_5:
* test/manual/etags/ETAGS.good_6:
* test/manual/etags/CTAGS.good: Adapt to the changes in etags.c and
new test cases.
Eli Zaretskii [Thu, 1 Dec 2016 16:49:51 +0000 (18:49 +0200)]
Fix bugs with buffer-local tags tables
* lisp/progmodes/etags.el (visit-tags-table): After
'visit-tags-table-buffer' returns, retrieve the value of
'tags-file-name' from the buffer we started in. Force
recomputation of 'tags-completion-table' next time it is used,
since the list of tags table has changed.
(visit-tags-table-buffer): Accept an additional optional argument
CBUF, the buffer in which to start processing, and switch to that
buffer if CBUF is non-nil. All callers changed to supply a
non-nil CBUF when they call 'visit-tags-table-buffer' in a loop.
Doc fix.
(tags-completion-table): Accept an optional argument, the buffer
for which to build 'tags-completion-table', and build that
buffer's completion table.
(tags-lazy-completion-table): Pass the current buffer to
'tags-completion-table'.
(tags-file-name): Don't say in the doc string that setting this
variable directly is enough; say that 'visit-tags-table' should be
used for that. (Bug#158) (Bug#17326) (Bug#23164)
* doc/emacs/maintaining.texi (Select Tags Table): Delete the
advice to set 'tags-file-name' directly.
Paul Eggert [Tue, 29 Nov 2016 21:12:24 +0000 (13:12 -0800)]
Pacify Sun C 5.14
* src/lisp.h (enum Lisp_Save_Type): Put SAVE_UNUSED,
SAVED_INTEGER, SAVE_FUNCPOINTER, SAVE_POINTER, and SAVE_OBJECT
into this enum rather than into an anonymous enum. This avoids
diagnostics from Sun C 5.14 and is a bit clearer anyway.
Katsumi Yamaoka [Tue, 29 Nov 2016 10:20:51 +0000 (10:20 +0000)]
shr.el: Don't render a normal table twice
* lisp/net/shr.el (shr-collect-extra-strings-in-table):
Don't render a table if it is called for the first time,
IOW, recognize it to never be invalid (bug#25051).
Navigation and use of diff buffers had several annoying corner cases
that this patch fixes. These corner cases were largely due to
inconsistent treatment of file headers. Say you have a diff such as
this:
The file headers here are the '---' and '+++' lines. With the point on
such a line, hunk operations would sometimes refer to the next hunk and
sometimes to the previous hunk. Most of the time it would be the
previous hunk, which is not what the user would expect. This patch
consistently treats such headers as the next hunk. So with this patch,
if the point is on the '--- ccc' line, the point is seen as referring to
hunk3.
Specific behaviors this fixes are:
1. It should be possible to place the point in the middle of a diff
buffer, and press M-k repeatedly to kill hunks in the order they appear
in the buffer. With the point on hunk1, M-k M-k would kill hunk1 then
hunk2. With the point on hunk3, it would kill hunk3 then hunk4; this is
fine. However, with the point on hunk2, it'd kill hunk2 then hunk1.
This is fixed by this patch.
2. Similarly, it should be possible to apply hunks in order. Previously
with the point at the start, C-c C-a would apply the hunk1, then move
the point to the first @@ header, and thus C-c C-a would try to apply
the same hunk again.
* lisp/vc/diff-mode.el (diff--wrap-navigation): New function to add better
navigation logic to diff-{hunk,file}-{next,prev}.
(diff-hunk-next, diff-hunk-prev):
(diff-file-next, diff-file-prev): Better navigation logic if
skip-hunk-start is true, which happens when called interactively.
(diff-bounds-of-hunk, diff-find-source-location):
(diff-apply-hunk, diff-current-defun, diff-refine-hunk): Small tweaks to
improve hunk navigation.
Noam Postavsky [Fri, 18 Nov 2016 21:26:53 +0000 (16:26 -0500)]
Upcase Path and ComSpec in process-environment
Since 2016-07-18 "Keep w32 environment settings internal only", the
upcasing of environment variables "Path" and "ComSpec" occured after
initializing process-environment. This meant that Lisp code trying to
override "PATH" environment had no effect (Bug #24956).
* src/w32.c (init_environment): Upcase the "Path" and "ComSpec" entries
in Vprocess_environment.
Philipp Stephani [Tue, 22 Nov 2016 20:32:11 +0000 (21:32 +0100)]
Guard terminal parameter in XTerm mouse mode
It has been observed (in the HTerm terminal emulator) that the
event stored in the 'xterm-mouse-last-down' terminal parameter gets
overwritten during a mouse drag operation, causing Emacs to attempt to
synthesize the non-existing <drag-mouse-0> event. Copy the event into
the terminal parameter to protect against such modifications.
* lisp/xt-mouse.el (xterm-mouse-translate-1): Guard against modification
of input event list.
Reuse already existing lisp symbols for ignore_event (bug#19547).
* lisp/subr.el (while-no-input-ignore-events): Use them instead.
* src/keyboard.c (kbd_buffer_store_buffered_event):
Use help-echo for HELP_EVENT, iconify-frame for ICONIFY_EVENT,
and make-frame-visible for DEICONIFY_EVENT.
(syms_of_keyboard): Remove unneeded symbols.
Allow configuring which event throw-on-input should ignore (bug#19547).
* src/keyboard.c (kbd_buffer_store_buffered_event):
Translate event to corresponding symbol from `while-no-input-ignore-events`
and check them with Fmemq.
(syms_of_keyboard): Declare new lisp variable `while-no-input-ignore-events`
and its symbols.
Paul Eggert [Sat, 26 Nov 2016 08:19:08 +0000 (00:19 -0800)]
Don't access pointers to freed storage in regex.c
Remove __BOUNDED_POINTERS__ code, which does not work with
-fcheck-pointer-bound and which has undefined behavior anyway.
Problem found when trying to port to gcc -fcheck-pointer-bounds.
(This code was removed from glibc and gnulib regex.c many years ago.)
* src/regex.c (ELSE_EXTEND_BUFFER_HIGH_BOUND): Remove.
(EXTEND_BUFFER): Use a more-portable approach that avoids
undefined behavior due to inspecting pointers to freed storage.
Paul Eggert [Sat, 26 Nov 2016 05:24:28 +0000 (21:24 -0800)]
Port build to gcc -fcheck-pointer-bounds
This does not let Emacs run, just build.
* lib-src/etags.c (main):
* lib-src/profile.c (main):
Use return, not exit.
* src/bytecode.c (BYTE_CODE_THREADED) [__CHKP__]:
Do not define, as -fcheck-pointer-bounds is incompatible with taking
addresses of labels.
* src/menu.c (Fx_popup_dialog): Use eassume, not eassert,
to pacify gcc -fcheck-pointer-bounds -Wnull-dereference.
Hong Xu [Fri, 25 Nov 2016 10:51:22 +0000 (12:51 +0200)]
Allow user control of progress messages in cpp.el
* progmodes/cpp.el (cpp-message-min-time-interval): New defcustom.
(cpp-progress-time): Use 'cpp-message-min-time-interval'. Improve
the doc string.
(cpp-highlight-buffer): Use 'cpp-progress-message' instead of
'message' to print messages. (Bug#24861)
Alan Mackenzie [Thu, 24 Nov 2016 20:34:42 +0000 (20:34 +0000)]
Handle correctly an (undocumented) bare mode in hack-local-variables.
lisp/files.el (hack-local-variables-prop-line): When a file's first line
contains only a mode specification without the string "mode:", return the mode
symbol only when `handle-mode' is t.
Dima Kogan [Thu, 24 Nov 2016 02:04:21 +0000 (18:04 -0800)]
Clarify ediff-directories prompt
* lisp/vc/ediff-mult.el (ediff-filegroup-action):
* lisp/vc/ediff.el (ediff-directories,ediff-directory-revisions,
ediff-directories3, ediff-merge-directories,
ediff-merge-directories-with-ancestor, ediff-merge-directory-revisions,
ediff-merge-directory-revisions-with-ancestor): Clarify prompt message for
filename filter in interactive ediff. The new message makes it clear what is
being filtered
Mark Oteiza [Tue, 22 Nov 2016 07:42:47 +0000 (02:42 -0500)]
Make sure elided long buffer names have ellipses added (Bug#24972)
* lisp/ibuffer.el (ibuffer-compile-make-eliding-form): Restore the
string concat, and chop "strvar" less the width of the ellipsis.
(ibuffer-compile-make-substring-form): Add space as padding, to fix
off-by-one in alignment.
Tino Calancha [Tue, 22 Nov 2016 06:23:50 +0000 (15:23 +0900)]
buff-menu: Add command to unmark all buffers
Bind 'U' in buff-menu, bs and electric-buff-menu to commands
to unmark all buffers (Bug#24880).
* lisp/emacs-lisp/tabulated-list.el (tabulated-list-header-overlay-p):
New predicate; return non-nil if tabulated-list has a fake header.
* lisp/buff-menu.el (Buffer-menu-unmark-all-buffers):
New command; remove all flags that use a particular mark from all the lines.
Bind it to 'M-DEL'.
(Buffer-menu-unmark-all):
New command; remove all flags from all the lines. Bind it to 'U'.
(Buffer-menu-marker-char, Buffer-menu-del-char): New variables.
(Buffer-menu-delete, Buffer-menu-mark): Use them.
(Buffer-menu-mode-map): Update menus.
(Buffer-menu-mode): Update mode doc.
* lisp/bs.el (bs-unmark-all, bs-unmark-previous): New commands.
(bs-mode-map): Bind them to 'U' and '<backspace>' respectively.
(bs-mode): Update mode doc.
* lisp/ebuff-menu.el (electric-buffer-menu-mode-map):
Bind Buffer-menu-unmark-all to 'U' and Buffer-menu-unmark-all-buffers
to 'M-DEL'.
(bs--down, bs-down, bs--up, bs-up, bs-unmark-current, bs-mark-current):
Use point instead of cursor in doc string.
(electric-buffer-list): Update mode doc.
* doc/emacs/buffers.texi (Several Buffers): Mention Buffer-menu-unmark-all
and Buffer-menu-unmark-all-buffers.
; * etc/NEWS: Add an entry per each new feature.
Paul Eggert [Mon, 21 Nov 2016 16:42:12 +0000 (08:42 -0800)]
Fix another CANNOT_DUMP problem
Reported by Robert Pluim in:
http://lists.gnu.org/archive/html/emacs-devel/2016-11/msg00468.html
* src/emacs.c (might_dump) [CANNOT_DUMP]: Move enum decl from here ...
* src/lisp.h: ... to here.
Katsumi Yamaoka [Mon, 21 Nov 2016 08:21:27 +0000 (08:21 +0000)]
Don't collect strings existing out of <tr>...</tr>
* lisp/net/shr.el (shr-collect-extra-strings-in-table):
Don't collect strings existing out of <tr>...</tr> to avoid
duplication with what `shr-tag-table' renders.
Mike Kupfer [Mon, 21 Nov 2016 06:10:13 +0000 (06:10 +0000)]
Add a variable to pass additional options to rcvstore
* lisp/gnus/gnus-mh.el (gnus-rcvstore-options): New variable.
(gnus-summary-save-in-folder): Include gnus-rcvstore-options in
the arguments that are passed to rcvstore.
cf. <nntp://news.gmane.org/gmane.emacs.gnus.general/87263>
and followups, i.e., ding mailing list.