]> git.eshelyaron.com Git - emacs.git/log
emacs.git
2 years agoitree: Use a single iterator object
Stefan Monnier [Sun, 2 Oct 2022 16:27:37 +0000 (12:27 -0400)]
itree: Use a single iterator object

Instead of having one iterator object per buffer, use just a single
global one.  There is virtually no benefit to having per-buffer
iterators anyway: if two iterations can be active at the same time,
then there can be cases where those two iterations happen
to operate on the same buffer :-(

* src/itree.h (struct interval_tree): Remove `iter` field.
* src/itree.c (interval_generator_destroy)
(interval_tree_iter_ensure_space): Delete functions.
(iter): New global variable.
(init_itree_null): Rename to `itree_init` and adjust all callers.
Initialize `iter` as well.
(interval_tree_create, interval_tree_init):
Don't initialize `iter` field any more.
(interval_tree_destroy): Don't destroy `iter` field any more.
(interval_tree_insert): Don't bother growing the iterator (it's grown
in `interval_stack_push_flagged` if needed anyway, and in any case
there's no `iter` here to grow any more).
(interval_tree_remove): Tweak assertion to be more precise and
self-evident.
(interval_tree_iter_start): Use the global `iter`.
(interval_generator_create): Make it work with a NULL argument.

2 years agomark_overlays: Use the normal ITREE_FOREACH
Stefan Monnier [Sun, 2 Oct 2022 16:21:13 +0000 (12:21 -0400)]
mark_overlays: Use the normal ITREE_FOREACH

This commit basically reverts commit 5b954f8f9.  The problem of nested
iterations hasn't been fixed in the mean time, but since the GC can
run arbitrary ELisp code (via `post-gc-hook`), running the GC from
within an itree iteration is already unsafe anyway :-(

* src/alloc.c (mark_overlays): Delete function.
(mark_buffer): Use ITREE_FOREACH.

2 years agoitree.c: Remove `tree` field from iterator
Stefan Monnier [Sun, 2 Oct 2022 15:11:57 +0000 (11:11 -0400)]
itree.c: Remove `tree` field from iterator

* src/itree.c (interval_generator_ensure_space, interval_generator_reset):
Inline and then delete functions.
(interval_tree_inherit_offset): Only take the tree's `otick` as arg.
Update all callers.
(struct interval_generator): Remove `tree` field, replace with a copy
of the tree's `otick`.
(interval_stack_push_flagged): The arg should be a real node.
(interval_tree_insert_gap): Prefer checking root==NULL rather than size==0.
Skip loop when tree is empty to avoid pushing&processing the NULL node.
(interval_tree_inherit_offset): Prefer parent==NULL rather than
node==root to avoid accessing the tree object.

2 years agoMerge remote-tracking branch 'origin/feature/noverlay' into noverlay
Stefan Monnier [Sun, 2 Oct 2022 05:31:59 +0000 (01:31 -0400)]
Merge remote-tracking branch 'origin/feature/noverlay' into noverlay

2 years agoNew ITREE_FOREACH macro
Stefan Monnier [Sun, 2 Oct 2022 05:30:44 +0000 (01:30 -0400)]
New ITREE_FOREACH macro

* src/itree.h (interval_tree_iter_start): Adjust type.
(interval_tree_nodes): Delete declaration.
(ITREE_FOREACH, ITREE_FOREACH_ABORT, ITREE_FOREACH_NARROW): New macros.

* src/itree.c (interval_tree_contains, interval_tree_insert_gap):
Use the new ITREE_FOREACH macro.
(interval_tree_nodes): Delete function.
(interval_tree_iter_start): Return the iterator.
(interval_generator_next, interval_tree_destroy):
Don't accept a NULL arg any more.

* src/xdisp.c (load_overlay_strings, strings_with_newlines):
* src/textprop.c (get_char_property_and_overlay):
* src/buffer.c (copy_overlays, delete_all_overlays)
(set_overlays_multibyte, swap_buffer_overlays, overlays_in)
(next_overlay_change, previous_overlay_change, overlay_touches_p)
(overlay_strings, Foverlay_lists, report_overlay_modification)
(evaporate_overlays): Use the new ITREE_FOREACH macro.

* src/buffer.h (buffer_overlay_iter_start1)
(buffer_overlay_iter_start, buffer_overlay_iter_next)
(buffer_overlay_iter_finish, buffer_overlay_iter_narrow):
Delete declarations.

2 years agoMake it compile with ITREE_DEBUG defined
Gerd Möllmann [Sat, 1 Oct 2022 06:28:14 +0000 (08:28 +0200)]
Make it compile with ITREE_DEBUG defined

* src/buffer.c (make_lispy_interval_node): Use make_fixnum.
(overlay_tree): Use ITREE_NULL.

2 years agoitree.c: Improve division between tree and iterator
Stefan Monnier [Sat, 1 Oct 2022 00:37:15 +0000 (20:37 -0400)]
itree.c: Improve division between tree and iterator

* src/buffer.c (delete_all_overlays): Add comment.

* src/itree.c (struct interval_generator): New fields `running`,
`file`, and `line` moved from `interval_tree`.
(interval_stack_push_flagged): Adjust comment to resolve a FIXME.
(interval_tree_clear): Replace assignment with an a
(interval_tree_iter_next): Delete function.
(interval_tree_clear): Don't set `iter_running` here any more.
(interval_generator_create): Set it here instead.
(interval_tree_iter_start): Fetch `iter` once and for all.
(interval_generator_narrow): Mark it as non-static.
(interval_tree_iter_next, interval_tree_iter_narrow):
Delete functions.  Inline their old bodies in the callers.
(interval_tree_iter_finish): Take the iter rather than
the whole tree.  Adjust all callers.
(interval_generator_next): Move `running `assertion here from
`interval_tree_iter_next`.

* src/buffer.h: Adjust accordingly.

* src/itree.h (struct interval_tree): Remove fields `iter_running`,
`file`, and `line`, moved to `interval_generator`.
(interval_generator_narrow): Replace `interval_tree_iter_narrow`.

2 years agoRemove the per-tree null node
Gerd Möllmann [Fri, 30 Sep 2022 11:25:15 +0000 (13:25 +0200)]
Remove the per-tree null node

"make check" shows 0 unexpcted.

* src/itree.h (itree_null): Declare extern.
(ITREE_NULL): New macro
(struct interval_tree): Remove null member.
* src/alloc.c (mark_overlays): Use ITREE_NULL.
* src/itree.c: Use ITREE_NULL insteads of a tree's null.
* src/pdumper.c (dump_buffer): Use ITREE_NULL.

2 years agoitree: Remove the `visited` flag from the tree nodes
Stefan Monnier [Thu, 29 Sep 2022 21:12:21 +0000 (17:12 -0400)]
itree: Remove the `visited` flag from the tree nodes

These bits really belong in the "workstack" used within
`interval_generator_next`, so move them there.

* src/itree.c (nodeptr_and_flag): New type;
(struct interval_stack): Use it.
(make_nav, nav_nodeptr, nav_flag): New functions.
(interval_tree_insert_gap, interval_tree_delete_gap): Adjust accordingly.
(interval_generator_next): Stash the `visited` bit in the work stack
rather than inside the tree nodes.
(interval_stack_create, interval_stack_destroy, interval_stack_clear)
(interval_stack_ensure_space, interval_stack_push_flagged)
(interval_stack_push, interval_stack_pop): Move before first use.

* src/itree.h (struct interval_node): Remove `visited` field.
* src/pdumper.c (dump_interval_node): Adjust accordingly.

2 years agofree_buffer_overlays: Move nearer to its sole caller
Stefan Monnier [Thu, 29 Sep 2022 20:15:01 +0000 (16:15 -0400)]
free_buffer_overlays: Move nearer to its sole caller

* src/buffer.c (free_buffer_overlays): Move from `buffer.h`.
* src/buffer.h (free_buffer_overlays): Move to `buffer.c`.

* src/itree.c (interval_tree_iter_narrow, interval_tree_iter_finish)
(interval_tree_iter_next): Prefer `eassert`.

2 years ago* src/itree.c (interval_tree_iter_start): Improve error message
Stefan Monnier [Thu, 29 Sep 2022 18:10:04 +0000 (14:10 -0400)]
* src/itree.c (interval_tree_iter_start): Improve error message

2 years agoalloc.c: Avoid nested overlay iterations (bug#58158)
Stefan Monnier [Thu, 29 Sep 2022 13:08:37 +0000 (09:08 -0400)]
alloc.c: Avoid nested overlay iterations (bug#58158)

* src/alloc.c (mark_overlays): New function.
(mark_buffer): Use it instead of using the overlay iterator.

2 years agoitree.[ch]: Add sanity checks, comments, and minor tweaks
Stefan Monnier [Wed, 28 Sep 2022 23:05:16 +0000 (19:05 -0400)]
itree.[ch]: Add sanity checks, comments, and minor tweaks

* src/alloc.c (mark_overlay): Add sanity check.

* src/buffer.c (next_overlay_change, previous_overlay_change):
Tweak code to keep the same vars for the bounds.

* src/itree.c (interval_tree_clear, interval_tree_insert)
(interval_tree_remove, interval_tree_insert_fix, interval_tree_remove_fix):
Adjust to the `color` -> `red` change.
(interval_tree_clear): Prefer `true/false` for booleans.
(interval_generator_create): Use an actual `interval_tree_order` value
rather than 0.
(interval_generator_next): Simplify a tiny bit.  Add comment.
(interval_generator_narrow): Add sanity check.

* src/itree.h (struct interval_node): Replace `color` field with
boolean `red` field.
(enum interval_tree_order): Remove unused `ITREE_DEFLT_ORDER` value.

* src/pdumper.c (dump_interval_node): Adjust to the
`color` -> `red` change.

2 years agoMerge remote-tracking branch 'origin/scratch/noverlay-wip' into noverlay
Stefan Monnier [Wed, 28 Sep 2022 15:57:16 +0000 (11:57 -0400)]
Merge remote-tracking branch 'origin/scratch/noverlay-wip' into noverlay

2 years agoAvoid nested iteration over intervals (bug#58144)
Gerd Möllmann [Wed, 28 Sep 2022 14:38:04 +0000 (16:38 +0200)]
Avoid nested iteration over intervals (bug#58144)

* src/xdisp.c (strings_with_newlines): Call
buffer_overlay_iter_finish.

2 years agoAdd debugging help for nested iterators (nug#58144)
Gerd Möllmann [Wed, 28 Sep 2022 14:30:34 +0000 (16:30 +0200)]
Add debugging help for nested iterators (nug#58144)

When starting an iteration, store __FILE__ and __LINE__ where this
happens in the interval_tree structure.

* src/buffer.h (buffer_overlay_iter_start): New macro adding __FILE
and __LINE__.
(buffer_overlay_iter_start1): Renamed from ..._start.
* src/itree.h (struct interval_tree): Add file and line info.
* src/itree.c: (interval_tree_contains, interval_tree_nodes,
interval_tree_insert_gap): Pass __FILE__ and __LINE__ to iter_start.
(interval_tree_iter_start): Record file and line info in tree.

2 years agoFix last change
Gerd Möllmann [Wed, 28 Sep 2022 10:10:30 +0000 (12:10 +0200)]
Fix last change

2 years agoFix macOS build (bug#58108)
Gerd Möllmann [Tue, 27 Sep 2022 10:45:16 +0000 (12:45 +0200)]
Fix macOS build (bug#58108)

* src/itree.h (struct interval_tree): Rename member nil to null.
* src/itree.c: Use null instead of nil
* src/pdumper.c (dump_buffer): Use null instead of nil.
* src/itree.c: Fix copyright.
* src/itree.h: Fix copyright.

2 years ago* src/buffer.c (overlays_in): Fix confusion Z-vs-ZV
Stefan Monnier [Mon, 26 Sep 2022 02:24:35 +0000 (22:24 -0400)]
* src/buffer.c (overlays_in): Fix confusion Z-vs-ZV

This fixes test failures in `test-overlays-in-2` and `test-remove-overlays`.

2 years agoMerge 'master' into noverlay
Stefan Monnier [Sun, 25 Sep 2022 20:15:16 +0000 (16:15 -0400)]
Merge 'master' into noverlay

2 years agoMerge remote-tracking branch 'refs/remotes/origin/master'
Stefan Monnier [Sat, 24 Sep 2022 15:09:25 +0000 (11:09 -0400)]
Merge remote-tracking branch 'refs/remotes/origin/master'

2 years agohideshow.el: Improve hs-toggle-hiding behavior
kobarity [Mon, 19 Sep 2022 04:43:33 +0000 (13:43 +0900)]
hideshow.el: Improve hs-toggle-hiding behavior

* lisp/progmodes/hideshow.el
(hs-find-block-beginning-match): New function to be used in
`hs-already-hidden-p'.
(hs-already-hidden-p): Add check if beginning of line is inside a
block.
(hs-toggle-hiding): Don't change to selected-window's buffer when
event arg is absent.

* test/lisp/progmodes/hideshow-tests.el
(hideshow-tests-with-temp-buffer-selected): New helper macro.
(hideshow-tests-make-event-at): New helper function.
(hideshow-already-hidden-p-1): New test.
(hideshow-toggle-hiding-1): New test.
(hideshow-mouse-toggle-hiding-1): New test (bug#52092).

2 years agoRegenerated ldefs-boot.el
Lars Ingebrigtsen [Sat, 24 Sep 2022 14:51:37 +0000 (16:51 +0200)]
Regenerated ldefs-boot.el

2 years agoRemove "manual" package--builtin-versions updates
Lars Ingebrigtsen [Sat, 24 Sep 2022 14:46:22 +0000 (16:46 +0200)]
Remove "manual" package--builtin-versions updates

* lisp/emacs-lisp/nadvice.el:
* lisp/emacs-lisp/cl-generic.el: Don't push to
package--builtin-versions "manually", because loaddefs-gen does
this correctly now.

2 years ago* lisp/net/tramp-docker.el: New file.
Brian Cully [Sat, 24 Sep 2022 14:48:01 +0000 (16:48 +0200)]
* lisp/net/tramp-docker.el: New file.

2 years ago(event-start/end): Fix part of bug#52092
Stefan Monnier [Sat, 24 Sep 2022 14:38:09 +0000 (10:38 -0400)]
(event-start/end): Fix part of bug#52092

When synthesizing a posn for keyboard events, make sure the `posn-point`
i the same as `point`.

* lisp/subr.el (event--posn-at-point): New function.
(event-start, event-end): Use it.

2 years agoMerge branch 'emacs-28'
Stefan Monnier [Sat, 24 Sep 2022 14:32:39 +0000 (10:32 -0400)]
Merge branch 'emacs-28'

2 years ago* lisp/progmodes/hideshow.el (hs-toggle-hiding): Fix `interactive` form
Stefan Monnier [Sat, 24 Sep 2022 14:24:54 +0000 (10:24 -0400)]
* lisp/progmodes/hideshow.el (hs-toggle-hiding): Fix `interactive` form

This fixes the first part of bug#52092, which is a regression
introduced by commit d0e9113de97.

2 years agoMake dired-do-rename refuse to rename . and ..
Lars Ingebrigtsen [Sat, 24 Sep 2022 13:27:50 +0000 (15:27 +0200)]
Make dired-do-rename refuse to rename . and ..

* lisp/dired-aux.el (dired-do-rename): Refuse to rename . and ..
(bug#52004).  This used to error out after renaming.

2 years agoAdd a new command vc-pull-and-push
Lars Ingebrigtsen [Sat, 24 Sep 2022 13:17:23 +0000 (15:17 +0200)]
Add a new command vc-pull-and-push

* lisp/vc/vc-svn.el (vc-exec-after):
* lisp/vc/vc-hg.el (vc-exec-after):
* lisp/vc/vc-git.el (vc-exec-after):
* lisp/vc/vc-cvs.el (vc-exec-after):
* lisp/vc/vc-bzr.el (vc-exec-after):
* lisp/org/org-macro.el (vc-exec-after):
* lisp/obsolete/vc-mtn.el (vc-exec-after):
* lisp/obsolete/vc-arch.el (vc-exec-after): Update declaration.
* lisp/vc/vc-dispatcher.el (vc--process-sentinel): Allow running
code only on success.
(vc-exec-after): Ditto.
(vc--inhibit-change-window-start): New variable.
(vc-do-async-command): Use it to allow chaining commands without
moving window point.  Return the process instead of the buffer,
since the process may have exited already, and then we can't get
at the process.

* lisp/vc/vc-git.el (vc-git--pushpull): Return the process object.
(vc-git-pull-and-push): New function.

* lisp/vc/vc.el (vc-pull-and-push): New command (bug#51964).

2 years agoTweak binding of `+' in vc-dir
Lars Ingebrigtsen [Sat, 24 Sep 2022 13:07:17 +0000 (15:07 +0200)]
Tweak binding of `+' in vc-dir

* lisp/vc/vc-dir.el (vc-dir-mode-map): Point to the actual
function instead of the alias.  This makes *Help* more helpful.

2 years agoCC Mode. Make AWK Mode work with electric-pair-mode
Alan Mackenzie [Sat, 24 Sep 2022 12:23:32 +0000 (12:23 +0000)]
CC Mode.  Make AWK Mode work with electric-pair-mode

Also fix some minor anomalies with other CC Mode modes in electric-pair-mode.
This fixes bug #53446.

* lisp/progmodes/cc-mode.el (c-open-string-opener): New buffer local
variable.
(c-after-change-mark-abnormal-strings): Set c-open-string-opener when an
unbalanced string is detected.
(c-before-change): Initilize c-open-string-opener to nil, each buffer change.
(c-electric-pair-inhibit-predicate): Use the value of c-open-string-opener to
flag an unbalaced string rather than trying to calculate it again.

* lisp/progmodes/cc-awk.el (c-awk-syntax-tablify-string): Set
c-open-string-opener when an unbalanced string is detected.

2 years agodocview: Use svg images when using mupdf for conversion
Visuwesh [Sat, 24 Sep 2022 12:09:53 +0000 (14:09 +0200)]
docview: Use svg images when using mupdf for conversion

* lisp/doc-view.el (doc-view-mupdf-use-svg, doc-view-svg-background)
(doc-view-svg-foreground): New user options.
(doc-view-insert-image): Add :background and :foreground image
attributes when display svg images.
(doc-view-set-up-single-converter): Produce svg images when using
mupdf (bug#58041).

2 years agoimage-dired: Prefer command remapping
Stefan Kangas [Sat, 24 Sep 2022 12:07:55 +0000 (14:07 +0200)]
image-dired: Prefer command remapping

* lisp/image/image-dired.el (image-dired-thumbnail-mode-map):
Prefer command remapping to binding keys directly.

2 years agoimage-dired: Fix C-a/C-e in thumbnail buffer
Stefan Kangas [Sat, 24 Sep 2022 11:36:39 +0000 (13:36 +0200)]
image-dired: Fix C-a/C-e in thumbnail buffer

* lisp/image/image-dired.el
(image-dired--movement-ensure-point-pos): New function, and...
(image-dired--movement-command): ...new macros broken out from...
(image-dired-next-line, image-dired-previous-line)
(image-dired-beginning-of-buffer, image-dired-end-of-buffer):
...here.
(image-dired-move-beginning-of-line)
(image-dired-move-end-of-line): New commands.
(image-dired-thumbnail-mode-map): Remap 'move-beginning-of-line'
and 'move-beginning-of-line' to above new commands.

2 years agoMake thumbs.el obsolete
Stefan Kangas [Sat, 24 Sep 2022 11:22:59 +0000 (13:22 +0200)]
Make thumbs.el obsolete

* lisp/obsolete/thumbs.el: Add Obsolete-since.
* etc/NEWS: Announce obsoletion of thumbs.el.  (Bug#57779)

2 years agoMove thumbs.el to lisp/obsolete
Stefan Kangas [Sat, 24 Sep 2022 11:18:38 +0000 (13:18 +0200)]
Move thumbs.el to lisp/obsolete

* lisp/thumbs.el:
* test/lisp/thumbs-tests.el: Move from here...
* lisp/obsolete/thumbs.el:
* test/lisp/obsolete/thumbs-tests.el: ...to here.  (Bug#57779)

2 years agoimage-dired: Regenerate old thumbnails when needed
Stefan Kangas [Sat, 24 Sep 2022 11:08:11 +0000 (13:08 +0200)]
image-dired: Regenerate old thumbnails when needed

* lisp/image/image-dired.el
(image-dired--get-create-thumbnail-file): Rename from
'image-dired-get-thumbnail-image'.  Update callers and make old
name into an obsolete alias.
(image-dired-display-thumbs): Use above function to simplify and
regenerate the thumbnail if it's outdated.

2 years agoimage-dired: Improve performance of marking commands
Stefan Kangas [Sat, 24 Sep 2022 10:44:11 +0000 (12:44 +0200)]
image-dired: Improve performance of marking commands

* lisp/image/image-dired.el (image-dired-thumbnail-storage): Mark
(image-dired--thumb-update-mark-at-point): New function.
(image-dired--thumb-update-marks):
(image-dired--do-mark-command):  Use it.
(image-dired--thumb-update-marks): Rename from
'image-dired-thumb-update-marks'.  Update all callers and make the
old name into an obsolete alias.

2 years agoimage-dired: Mark 'per-directory' as :safe
Stefan Kangas [Sat, 24 Sep 2022 10:38:41 +0000 (12:38 +0200)]
image-dired: Mark 'per-directory' as :safe

* lisp/image/image-dired.el (image-dired-thumbnail-storage): Mark
'per-directory' value as :safe.

2 years agoAdd new macro image-dired--with-dired-buffer
Stefan Kangas [Sat, 24 Sep 2022 09:49:46 +0000 (11:49 +0200)]
Add new macro image-dired--with-dired-buffer

* lisp/image/image-dired-util.el
(image-dired--with-dired-buffer): New macro.
* lisp/image/image-dired.el (image-dired-track-original-file)
(image-dired--on-file-in-dired-buffer)
(image-dired--do-mark-command)
(image-dired--on-file-in-dired-buffer)
(image-dired-jump-original-dired-buffer)
(image-dired-thumb-file-marked-p, image-dired-delete-marked):
Use above new macro to simplify and improve error handling.
(image-dired-show-all-from-dir): Simplify removing Dired marks.
(image-dired-thumb-update-marks): Avoid triggering above new error
handling.

2 years agoTweak how :override advice is formatted in *Help*
Lars Ingebrigtsen [Sat, 24 Sep 2022 12:06:26 +0000 (14:06 +0200)]
Tweak how :override advice is formatted in *Help*

* lisp/emacs-lisp/nadvice.el (advice--make-single-doc): Format
:overrides specially (bug#57974).
(advice--make-docstring): Put overrides at the front.

2 years agoRename file-name-directory
Lars Ingebrigtsen [Sat, 24 Sep 2022 10:44:44 +0000 (12:44 +0200)]
Rename file-name-directory

* lisp/emacs-lisp/shortdoc.el (file-name):
* doc/lispref/files.texi (Directory Names): Adjust.
* lisp/files.el (file-name-parent-directory): Rename from
`file-name-directory' (bug#58039).

2 years agoEnsure that cus-load doesn't add things twice
Lars Ingebrigtsen [Sat, 24 Sep 2022 10:15:58 +0000 (12:15 +0200)]
Ensure that cus-load doesn't add things twice

* lisp/cus-dep.el (custom-make-dependencies): Use it.

* lisp/custom.el (custom--add-custom-loads): New function.

2 years ago`append' doc string clarification
Lars Ingebrigtsen [Sat, 24 Sep 2022 09:43:04 +0000 (11:43 +0200)]
`append' doc string clarification

* src/fns.c (Fappend): Clarify whether arguments are copied.

2 years agoClarify message-newline-and-reformat doc string
Lars Ingebrigtsen [Sat, 24 Sep 2022 09:36:28 +0000 (11:36 +0200)]
Clarify message-newline-and-reformat doc string

* lisp/gnus/message.el (message-newline-and-reformat): Clarify the
DWIM-ness in the doc string (bug#57986).

2 years ago; * lisp/image/image-dired.el: Improve sectioning.
Stefan Kangas [Sat, 24 Sep 2022 09:10:29 +0000 (11:10 +0200)]
; * lisp/image/image-dired.el: Improve sectioning.

2 years ago; Make 'M-x image-dired' prompt even clearer
Stefan Kangas [Sat, 24 Sep 2022 09:07:45 +0000 (11:07 +0200)]
; Make 'M-x image-dired' prompt even clearer

* lisp/image/image-dired.el (image-dired-show-all-from-dir):
Make prompt even clearer.
Suggested by Eli Zaretskii <eliz@gnu.org>.

2 years agoImprove image-dired-thumbnail-display-external
Stefan Kangas [Sat, 24 Sep 2022 09:06:51 +0000 (11:06 +0200)]
Improve image-dired-thumbnail-display-external

* lisp/image/image-dired.el: (image-dired-external-viewer): Add more
image viewers and slightly re-arrange.
(image-dired-thumbnail-display-external): Correctly handle
external viewers with spaces or flags.

2 years ago* lisp/emacs-lisp/shortdoc.el (file-name): Improve examples.
Stefan Kangas [Sat, 24 Sep 2022 00:15:53 +0000 (02:15 +0200)]
* lisp/emacs-lisp/shortdoc.el (file-name): Improve examples.

2 years agoimage-dired: Use command substitution for tags bindings
Stefan Kangas [Fri, 23 Sep 2022 23:45:54 +0000 (01:45 +0200)]
image-dired: Use command substitution for tags bindings

* lisp/image/image-dired-tags.el
(image-dired-dired-edit-comment-and-tags): Use substitute-command-keys

2 years agoimage-dired: Various code clean ups
Stefan Kangas [Fri, 23 Sep 2022 21:47:23 +0000 (23:47 +0200)]
image-dired: Various code clean ups

* lisp/image/image-dired.el
(image-dired--display-thumb-properties-fun): Delete function.
(image-dired-forward-image): Immediately update header line.  Improve
docstring.
(image-dired-backward-image, image-dired-next-line)
(image-dired-previous-line, image-dired-beginning-of-buffer)
(image-dired-end-of-buffer, image-dired-display-image): Improve
docstring.
(image-dired-comment-thumbnail): Fix interactive declaration.

2 years agoReduce complexity of scroll bar window protection code
Po Lu [Sat, 24 Sep 2022 08:27:42 +0000 (16:27 +0800)]
Reduce complexity of scroll bar window protection code

It turns out my previous theories of why ClientMessages were
generated were wrong, and they are just generated so we can set
finish to X_EVENT_GOTO_OUT to have them delivered immediately.

This allows for the code to be simplified greatly, by not
unpacking pointers to the raw window into the client messages.

* src/xterm.c (x_unprotect_window_for_callback): Return the
window removed from the queue, or nil if none.
(x_scroll_bar_to_input_event)
(x_horizontal_scroll_bar_to_input_event): Use window provided by
x_unprotect_window_for_callback.
(handle_one_xevent): Pass dpyinfo to functions that need it.
(x_free_frame_resources): Remove "first scroll bar request"
code.

* src/xterm.h (struct x_display_info): Likewise.

2 years agoNew Flymake backend using the shellcheck program
Augusto Stoffel [Sat, 17 Sep 2022 16:30:04 +0000 (18:30 +0200)]
New Flymake backend using the shellcheck program

See bug#57884.

* lisp/progmodes/sh-script.el: Require let-alist and subr-x when
compiling.
(sh--json-read): Helper function to deal with possible absence of
json-parse-buffer.
(sh-shellcheck-program, sh--shellcheck-process,
sh-shellcheck-flymake): Variables and function defining a Flymake
backend.
(sh-mode): Add it to 'flymake-diagnostic-functions'.

2 years ago; * src/keyboard.c (Fposn_at_point): Doc fix. (Bug#52092)
Eli Zaretskii [Sat, 24 Sep 2022 06:22:45 +0000 (09:22 +0300)]
; * src/keyboard.c (Fposn_at_point): Doc fix.  (Bug#52092)

2 years agovc-git--pushpull: Restore handling of vc-git-program
Sean Whitton [Fri, 23 Sep 2022 17:43:31 +0000 (10:43 -0700)]
vc-git--pushpull: Restore handling of vc-git-program

* lisp/vc/vc-git.el (vc-git--pushpull): Restore handling of
vc-git-program before recent change: respect a buffer-local value of
vc-git-program, and don't ignore user edits to the git program name
when PROMPT.

2 years ago* lisp/emacs-lisp/eieio.el (defclass): Fix bug#51068
Stefan Monnier [Fri, 23 Sep 2022 21:42:55 +0000 (17:42 -0400)]
* lisp/emacs-lisp/eieio.el (defclass): Fix bug#51068

Accept (defclass <class> <superclasses> (.. <slotname> ..)) without
having to wrap the slot name within parentheses.

2 years agoimage-dired: Rewrite and extend slideshow feature
Stefan Kangas [Fri, 23 Sep 2022 21:12:10 +0000 (23:12 +0200)]
image-dired: Rewrite and extend slideshow feature

* lisp/image/image-dired.el
(image-dired--slideshow-start-timer)
(image-dired--slideshow-stop-timer)
(image-dired--slideshow-show-message): New functions.
(image-dired--slideshow-current-delay): New variable.
(image-dired--slideshow-initial): Delete variable.
(image-dired-slideshow-start): Simplify and ensure we display the
image at start.
* lisp/image/image-dired.el (image-dired--slideshow-stop): Add support
for pausing, and going backwards and forwards during slideshow.

2 years agoimage-dired: Mark two slideshow defuns as internal
Stefan Kangas [Fri, 23 Sep 2022 18:18:17 +0000 (20:18 +0200)]
image-dired: Mark two slideshow defuns as internal

* lisp/image/image-dired.el (image-dired--slideshow-step)
(image-dired--slideshow-stop): Rename from
'image-dired--slideshow-step' and 'image-dired--slideshow-stop'.
Update callers and make old names into obsolete aliases.

2 years agocconv.el: Fix interactive closure bug#51695
Stefan Monnier [Fri, 23 Sep 2022 20:36:16 +0000 (16:36 -0400)]
cconv.el: Fix interactive closure bug#51695

Make cconv.el detect when a closure's interactive form needs to
capture variables from the context and tweak the code accordingly
if so.

* lisp/emacs-lisp/cconv.el (cconv--interactive-form-funs): New var.
(cconv-convert): Handle the case where the interactive form captures
vars from the surrounding context.  Remove left over handling of
`declare` which was already removed from the cconv-analyze` phase.
(cconv-analyze-form): Adjust analysis of interactive forms accordingly.

* lisp/emacs-lisp/oclosure.el (cconv--interactive-helper): New type and
function.
* lisp/simple.el (function-documentation, oclosure-interactive-form):
Add methods for it.

* test/lisp/emacs-lisp/cconv-tests.el
(cconv-tests-interactive-closure-bug51695): New test.

2 years agoMake Gnus respect mode-line-buffer-identification-keymap
Visuwesh [Fri, 23 Sep 2022 16:21:55 +0000 (18:21 +0200)]
Make Gnus respect mode-line-buffer-identification-keymap

* lisp/gnus/gnus-group.el (gnus-group-set-mode-line): Use
'propertized-buffer-identification' to buttonise and fontify the
buffer name.
* lisp/gnus/gnus-sum.el (gnus-set-mode-line):
* lisp/gnus/gnus.el (gnus-mode-line-buffer-identification): Adjust
calls to above.
* lisp/gnus/gnus-srvr.el (gnus-browse-foreign-server): Add missing
'gnus-modeline-buffer-identification' call (bug#57977).

2 years agoMake bounding box of 'image-crop' more noticeable
Visuwesh [Fri, 23 Sep 2022 16:11:25 +0000 (18:11 +0200)]
Make bounding box of 'image-crop' more noticeable

* lisp/image/image-crop.el (image-crop--crop-image-1): Darken the
selected region to make the bounding-box more noticable in images
which are mostly white (bug#58004).

2 years agoDon't overwrite cus-load dependencies
Lars Ingebrigtsen [Fri, 23 Sep 2022 16:06:38 +0000 (18:06 +0200)]
Don't overwrite cus-load dependencies

* lisp/cus-dep.el (custom-make-dependencies): Don't overwrite
elements added by packages (bug#58015).

2 years agoMake loaddefs-gen register parent :groups from defcustom
Lars Ingebrigtsen [Fri, 23 Sep 2022 15:58:41 +0000 (17:58 +0200)]
Make loaddefs-gen register parent :groups from defcustom

* lisp/emacs-lisp/loaddefs-gen.el
(loaddefs-generate--make-autoload): Also register parent :groups from
`defgroup' entries (bug#58015).

2 years agoFix syntax check in python-info-looking-at-beginning-of-defun
kobarity [Fri, 23 Sep 2022 15:39:53 +0000 (17:39 +0200)]
Fix syntax check in python-info-looking-at-beginning-of-defun

* lisp/progmodes/python.el
(python-info-looking-at-beginning-of-defun): Check syntax after moving
to the beginning of line.
* test/lisp/progmodes/python-tests.el (python-nav-beginning-of-defun-6)
(python-end-of-defun-1, python-info-looking-at-beginning-of-defun-3):
New tests (bug#58023).

2 years agoInhibit image-crop when there's overlays
Lars Ingebrigtsen [Fri, 23 Sep 2022 15:34:46 +0000 (17:34 +0200)]
Inhibit image-crop when there's overlays

* lisp/image/image-crop.el (image-crop): Don't mess with overlays,
because they're a pain to reconstruct (bug#58027).

2 years agoDelete the correct region after cropping an image
Lars Ingebrigtsen [Fri, 23 Sep 2022 15:31:23 +0000 (17:31 +0200)]
Delete the correct region after cropping an image

* lisp/image/image-crop.el (image-crop): Delete the correct region
after editing (bug#58027).

2 years agoimage-dired: Disable 'image-map' in thumbnail buffer
Stefan Kangas [Fri, 23 Sep 2022 15:22:47 +0000 (17:22 +0200)]
image-dired: Disable 'image-map' in thumbnail buffer

These bindings are more likely to mess up the buffer than to be
helpful here; image manipulation is better done in the display buffer.

* lisp/image/image-dired.el (image-dired-insert-thumbnail): Disable
`image-map' in thumbnail buffer.

2 years agoUpdate manual for recent image-dired changes
Stefan Kangas [Fri, 23 Sep 2022 15:10:15 +0000 (17:10 +0200)]
Update manual for recent image-dired changes

* doc/emacs/dired.texi (Image-Dired): Update to reflect recent
changes.

2 years ago* lisp/files.el (risky-local-variable): Remove max-specpdl-size.
Mattias Engdegård [Fri, 23 Sep 2022 14:12:29 +0000 (16:12 +0200)]
* lisp/files.el (risky-local-variable): Remove max-specpdl-size.

2 years agoRemove max-specpdl-size overrun test
Mattias Engdegård [Fri, 23 Sep 2022 13:26:13 +0000 (15:26 +0200)]
Remove max-specpdl-size overrun test

* test/src/eval-tests.el (eval-tests--exceed-specbind-limit)
(eval-exceed-specbind-with-signal-hook): Remove test that is
no longer useful, since there is no longer any specpdl limit
to overrun.  (The test still passed but vacuously so, by
hitting the max-lisp-eval-depth limit instead.)
This silences an obsoletion warning.

2 years ago; Fix :type of image-dired-thumbnail-storage
Stefan Kangas [Fri, 23 Sep 2022 14:08:03 +0000 (16:08 +0200)]
; Fix :type of image-dired-thumbnail-storage

* lisp/image/image-dired.el (image-dired-thumbnail-storage): Fix
:type for recent change.

2 years ago* lisp/bookmark.el (bookmark-make-record): Fix thinko.
Michael Albinus [Fri, 23 Sep 2022 14:07:07 +0000 (16:07 +0200)]
* lisp/bookmark.el (bookmark-make-record): Fix thinko.

2 years ago; Fix warnings in --without-x build
Stefan Kangas [Fri, 23 Sep 2022 13:14:17 +0000 (15:14 +0200)]
; Fix warnings in --without-x build

* lisp/image/image-crop.el (image-scaling-factor)
(image-property, image-size, imagep):
* test/src/image-tests.el (image-size, image-mask-p)
(image-metadata): Declare.

2 years agoImprove prompt of 'image-dired' command
Stefan Kangas [Fri, 23 Sep 2022 13:10:33 +0000 (15:10 +0200)]
Improve prompt of 'image-dired' command

* lisp/image/image-dired.el (image-dired-show-all-from-dir):
Improve prompt.

2 years agoRename 'image-dired-db-file' to 'image-dired-tags-db-file'
Stefan Kangas [Fri, 23 Sep 2022 13:01:36 +0000 (15:01 +0200)]
Rename 'image-dired-db-file' to 'image-dired-tags-db-file'

* lisp/image/image-dired.el (image-dired-tags-db-file): Rename
from 'image-dired-db-file'.  Update all uses and make old name
into an obsolete variable alias.

2 years agoMerge from origin/emacs-28
Stefan Kangas [Fri, 23 Sep 2022 12:56:54 +0000 (14:56 +0200)]
Merge from origin/emacs-28

60ac12d21f Fix shaping with bitmap-only fonts on HarfBuzz 5.2.0 (Bug#...
9f65e52362 ; Minor copyedits of elisp.texi

2 years agoFix more toolkit scroll bar window protection issues
Po Lu [Fri, 23 Sep 2022 12:41:24 +0000 (20:41 +0800)]
Fix more toolkit scroll bar window protection issues

* src/xterm.c (handle_one_xevent): Ignore outdated scroll bar
events.
(x_free_frame_resources): Clear protected windows and invalidate
previous scroll bar events.
* src/xterm.h (struct x_display_info): New field
`first_valid_scroll_bar_req'.

2 years agoAutoload wallpaper-set
Stefan Kangas [Fri, 23 Sep 2022 09:50:28 +0000 (11:50 +0200)]
Autoload wallpaper-set

* lisp/image/wallpaper.el (wallpaper-set): Autoload.
* lisp/image-mode.el (wallpaper):
* lisp/image/image-dired.el (wallpaper):
* lisp/thumbs.el (wallpaper): Don't require.

2 years agoSupport Noto Emoji font as fallback
Eli Zaretskii [Fri, 23 Sep 2022 06:36:24 +0000 (09:36 +0300)]
Support Noto Emoji font as fallback

The black-and-white emoji font is back under active development,
see https://github.com/googlefonts/noto-emoji.  So this adds
that font as fallback for systems that don't have the capability
of using color fonts.
* lisp/international/fontset.el (setup-default-fontset): Support
black-and-white Noto Emoji font as fallback for Emoji display.

2 years agoFix shaping with bitmap-only fonts on HarfBuzz 5.2.0 (Bug#57976)
YAMAMOTO Mitsuharu [Fri, 23 Sep 2022 05:17:12 +0000 (14:17 +0900)]
Fix shaping with bitmap-only fonts on HarfBuzz 5.2.0 (Bug#57976)

* src/ftcrfont.c (ftcrhbfont_begin_hb_font): Undo last change for
HarfBuzz 5.2.0.

2 years ago; * lisp/image/wallpaper.el: Fix last commit.
Stefan Kangas [Fri, 23 Sep 2022 03:40:42 +0000 (05:40 +0200)]
; * lisp/image/wallpaper.el: Fix last commit.

2 years agoSupport several new DEs in wallpaper.el
Stefan Kangas [Fri, 23 Sep 2022 01:24:13 +0000 (03:24 +0200)]
Support several new DEs in wallpaper.el

* lisp/image/wallpaper.el (wallpaper--default-commands)
(wallpaper--check-command, wallpaper-command): Add support for Unity,
Pantheon, Budgie, LXQt, and LXDE.  Also add support for Lubuntu,
Xubuntu, and Pop!_OS.

2 years agoimage-dired: Obsolete two unused functions
Stefan Kangas [Thu, 22 Sep 2022 19:52:15 +0000 (21:52 +0200)]
image-dired: Obsolete two unused functions

* lisp/image/image-dired-util.el (image-dired-display-window)
(image-dired-associated-dired-buffer-window): Make obsolete; they are
currently unused.

2 years ago; * Makefile.in: Make install depend on actual-all. Fixes bug#57959.
Gregory Heytings [Thu, 22 Sep 2022 21:54:57 +0000 (23:54 +0200)]
; * Makefile.in: Make install depend on actual-all. Fixes bug#57959.

2 years ago; Minor copyedits of elisp.texi
Eli Zaretskii [Thu, 22 Sep 2022 16:43:15 +0000 (19:43 +0300)]
; Minor copyedits of elisp.texi

* doc/lispref/variables.texi (Setting Generalized Variables):
Improve wording.

2 years agoDon't rewrite `set` to `setq` of lexical variables
Mattias Engdegård [Thu, 22 Sep 2022 12:15:56 +0000 (14:15 +0200)]
Don't rewrite `set` to `setq` of lexical variables

Only perform the rewrite

   (set 'VAR X) -> (setq VAR X)

for dynamic variables, as `set` isn't supposed to affect
lexical vars (and never does so when interpreted).

* lisp/emacs-lisp/byte-opt.el (byte-optimize-set):
* test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-tests--xx): New.
(bytecomp-tests--test-cases): Add test cases.
* test/lisp/emacs-lisp/bytecomp-resources/warn-variable-set-nonvariable.el:
Remove obsolete test.

2 years agoimage-dired: Improve minor mode docstring
Stefan Kangas [Thu, 22 Sep 2022 12:29:39 +0000 (14:29 +0200)]
image-dired: Improve minor mode docstring

* lisp/image/image-dired-dired.el (image-dired-minor-mode):
Improve docstring.

2 years agoimage-dired: Remove redundant keybindings
Stefan Kangas [Thu, 22 Sep 2022 12:28:35 +0000 (14:28 +0200)]
image-dired: Remove redundant keybindings

* lisp/image/image-dired-dired.el (image-dired-minor-mode-map):
Don't redundantly bind keys that are already bound in dired.

2 years agoFix failing image-dired test
Stefan Kangas [Thu, 22 Sep 2022 12:17:08 +0000 (14:17 +0200)]
Fix failing image-dired test

* test/lisp/image/image-dired-util-tests.el (ert-x, xdg): Require.
(image-dired-thumb-name/): Delete test.
(image-dired-thumb-name/standard)
(image-dired-thumb-name/image-dired)
(image-dired-thumb-name/per-directory): New tests.

2 years agoAdd X-Hashcash to the end of mail headers
Stefan Kangas [Thu, 22 Sep 2022 11:56:31 +0000 (13:56 +0200)]
Add X-Hashcash to the end of mail headers

* lisp/mail/hashcash.el (mail-add-payment): Move headers to the end of
the headers.

2 years ago; * lisp/mail/hashcash.el: Remove redundant :group args.
Stefan Kangas [Thu, 22 Sep 2022 11:46:45 +0000 (13:46 +0200)]
; * lisp/mail/hashcash.el: Remove redundant :group args.

2 years agoImprove don't save bookmark context from encrypted files
Michael Albinus [Thu, 22 Sep 2022 11:14:46 +0000 (13:14 +0200)]
Improve don't save bookmark context from encrypted files

* etc/NEWS: Mention 'bookmark-inhibit-context-functions'.
Fix typos.

* lisp/bookmark.el (bookmark-inhibit-context-functions): New defcustom.
(bookmark-make-record): Use it.

* lisp/auth-source-pass.el (auth-source-pass-file-name-p):
* lisp/auth-source.el (auth-source-file-name-p): New defuns.  Add
them to `bookmark-inhibit-context-functions'.

* lisp/epa-hook.el (epa-file-name-p):
* lisp/net/tramp-crypt.el (tramp-crypt-file-name-p): Add them to
`bookmark-inhibit-context-functions'.

2 years agoWork around rare crash when turning scroll wheel
Po Lu [Thu, 22 Sep 2022 09:06:36 +0000 (17:06 +0800)]
Work around rare crash when turning scroll wheel

* src/xterm.c (handle_one_xevent): Don't allow devices to be
added twice handling hierarcy events.

2 years agoAdd support for user edits to VC command arguments
Sean Whitton [Sun, 18 Sep 2022 21:47:23 +0000 (14:47 -0700)]
Add support for user edits to VC command arguments

* lisp/vc/vc-dispatcher.el (vc-pre-command-functions): New hook.
(vc-want-edit-command-p): New variable.
(vc-do-command): If vc-want-edit-command-p is non-nil, prompt the user
to edit the VC command & arguments before execution.  Run the new hook.
(vc-do-async-command): Use the new hook to insert into BUFFER the
command that's next to be run.
* lisp/vc/vc-git.el (vc-git--pushpull): Drop prompting code.  Bind
vc-want-edit-command-p so that vc-do-command handles the prompting.
Use the new hook to update compile-command with the edited command.
* lisp/vc/vc.el (vc-print-branch-log): A non-nil prefix argument now
means vc-want-edit-command-p is bound to a non-nil value (bug#57807).

2 years agoPrefer command remapping in image-dired-minor-mode
Stefan Kangas [Wed, 21 Sep 2022 16:02:51 +0000 (18:02 +0200)]
Prefer command remapping in image-dired-minor-mode

* lisp/image/image-dired-dired.el (image-dired-minor-mode-map):
Prefer command remapping.
(image-dired-minor-mode): Improve docstring.

2 years agoObsolete image-mode--images-in-directory
Stefan Kangas [Wed, 21 Sep 2022 15:38:30 +0000 (17:38 +0200)]
Obsolete image-mode--images-in-directory

* lisp/image-mode.el (image-mode--images-in-directory): Make
unused function obsolete.

2 years agoUpdate version tag of rmail-retry-ignored-headers
Robert Pluim [Wed, 21 Sep 2022 15:18:34 +0000 (17:18 +0200)]
Update version tag of rmail-retry-ignored-headers

* lisp/mail/rmail.el (rmail-retry-ignored-headers): Set :version to "29.1".

2 years ago; * lisp/emacs-lisp/gv.el (gv-synthetic-place): Doc fix.
Eli Zaretskii [Wed, 21 Sep 2022 14:18:40 +0000 (17:18 +0300)]
; * lisp/emacs-lisp/gv.el (gv-synthetic-place): Doc fix.

2 years ago* test/lisp/image/image-dired-util-tests.el: New file.
Stefan Kangas [Wed, 21 Sep 2022 13:13:40 +0000 (15:13 +0200)]
* test/lisp/image/image-dired-util-tests.el: New file.