1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-04-27 08:43:40 -07:00
Commit graph

155348 commits

Author SHA1 Message Date
Po Lu
728a1c2fe0 * src/xterm.c: Explain meaning of drag-and-drop state variables. 2022-04-04 19:10:30 +08:00
Lars Ingebrigtsen
773d4104a5 Further fixes for cl--generic-describe and (function ...)
* lisp/emacs-lisp/cl-generic.el (cl--generic-describe): Fix the #'
problem for defmethods, too (bug#54628).
2022-04-04 12:48:47 +02:00
Mattias Engdegård
f365607bc0 Inline call0..8
Inlining these trivial functions gives a healthy speed boost to many
common functions such as `sort`, `mapcar` etc.

* src/eval.c (call0, ..., call8): Move functions...
* src/lisp.h (call0, ..., call8): ...here and declare them inline.
2022-04-04 09:49:31 +02:00
Mattias Engdegård
530f163a7f Speed up comparisons between 2 fixnums
Since <, <=, > and >= have their own byte-ops, the corresponding
functions are mostly used as arguments to higher-order functions.
This optimisation is particularly beneficial for sorting, where the
comparison function is time-critical.

* src/data.c (Flss, Fgtr, Fleq, Fgeq):
* src/fileio.c (Fcar_less_than_car):
Fast path for calls with 2 fixnum arguments.
2022-04-04 09:49:31 +02:00
Mattias Engdegård
f4833c88bb Rewrite string-greaterp and string> using string-lessp
Since string-lessp has its own byte-op, using it is much faster than
calling string-greaterp even with the need to bind a temporary
variable.

* lisp/emacs-lisp/byte-opt.el (byte-optimize-string-greaterp): New.
(string-greaterp, string>): Set byte-optimizer.
2022-04-04 09:49:31 +02:00
Mattias Engdegård
16ee9fa138 Faster string-lessp for unibyte arguments
Since this function is commonly used as a sorting predicate
where it is time-critical, this is a useful optimisation.

* src/fns.c (Fstring_lessp): Add fast path for the common case
when both arguments are unibyte.
* test/src/fns-tests.el (fns-tests--string-lessp-cases)
(fns-tests-string-lessp): New test.
2022-04-04 09:49:31 +02:00
Po Lu
85fb2341f8 Respect frame extents during drag and drop
* xterm.c (struct x_client_list_window): New fields for frame
extents.
(x_dnd_compute_toplevels): Set window frame extents.
(x_dnd_get_target_window_1): Return None if the mouse is in a
frame extent.
(x_dnd_get_target_window): Likewise.
2022-04-04 13:42:36 +08:00
Po Lu
4431cf6047 Don't baselessly ignore frames after passing through the root window
* src/xterm.c (x_dnd_begin_drag_and_drop):
(handle_one_xevent): Don't rely on target not being None to set
x_dnd_return_frame to 2.
2022-04-04 13:17:18 +08:00
Po Lu
aea799838b Improve behavior of dragging text to windows on top of frames
* doc/lispref/frames.texi (Drag and Drop): Document new meaning
of `return-frame' in `x-begin-drag'.
* lisp/mouse.el (mouse-drag-and-drop-region): Use `now' when
calling `x-begin-drag'.
* src/xfns.c (Fx_begin_drag): Update doc string.
* src/xterm.c (x_dnd_begin_drag_and_drop): Accept return_frame
as a Lisp_Object and handle Qnow correctly.
(XTmouse_position): Ignore tooltip frames when processing
`drag-source'.
(syms_of_xterm): New defsym `now'.
* src/xterm.h: Update prototypes.
2022-04-04 13:10:01 +08:00
Andrew G Cohen
9ff2f0be32 Replace list and vector sorting with TIMSORT algorithm
* src/Makefile.in (base_obj): Add sort.o.
* src/deps.mk (fns.o): Add sort.c.
* src/lisp.h: Add prototypes for inorder, tim_sort.
* src/sort.c: New file providing tim_sort.
* src/fns.c:  Remove prototypes for removed routines.
(merge_vectors, sort_vector_inplace, sort_vector_copy): Remove.
(sort_list, sort_vector): Use tim_sort.
* test/src/fns-tests.el (fns-tests-sort): New sorting unit tests.
2022-04-04 07:43:11 +08:00
Mattias Engdegård
e091bee8db Add optional GC marking function to specpdl unwind_ptr record
Add a new `record_unwind_protect_ptr_mark` function for use with C data
structures that use the specpdl for clean-up but also contain possibly
unique references to Lisp objects.

* src/eval.c (record_unwind_protect_ptr_mark): New.
(record_unwind_protect_module, set_unwind_protect_ptr):
Set the mark function to NULL.
(mark_specpdl): Call the mark function if present.
* src/lisp.h (unwind_ptr): Add a mark function pointer to the
SPECPDL_UNWIND_PTR case.
2022-04-04 07:42:12 +08:00
Po Lu
9fab134ee8 * src/xterm.c (x_dnd_get_target_window): Look at root window proxies too. 2022-04-04 07:25:27 +08:00
Juri Linkov
c0cf923b0a * lisp/tab-bar.el (tab-bar-undo-close-tab): Update tab-bar-lines (bug#54684) 2022-04-03 19:51:46 +03:00
Philipp Stephani
3c6524140b ; * lisp/emacs-lisp/cl-macs.el (cl-struct-slot-value): Fix typo. 2022-04-03 17:51:04 +02:00
Po Lu
45011b77f4 Fix various bugs with mouse dragging on Haiku
* src/haikuterm.c (haiku_mouse_position): Rewrite so that
different track-mouse types can be handled more consistently.
2022-04-03 13:37:26 +00:00
Jim Porter
c12a48c335 Fix handling of '\\' inside double-quotes in Eshell
Previously, Eshell would get confused and think the following command
was unterminated due to the second double-quote looking like it was
escaped:

  echo "\\"

* lisp/eshell/esh-util.el (eshell-find-delimiter): Correct docstring
and treat '\' as an escapeable character when using backslash escapes.

* test/lisp/eshell/eshell-tests.el
(eshell-test/escape-special-quoted): Adapt test.
2022-04-03 14:16:44 +02:00
James Thomas
9f521db6fe Ensure re-encoding after change in gnus-inews-do-gcc
* lisp/gnus/gnus-msg.el (gnus-inews-do-gcc): Re-encode the message
body if it has been modified by gnus-gcc-pre-body-encode-hook
(bug#54687).
2022-04-03 14:14:24 +02:00
Lars Ingebrigtsen
5e429e21d9 Have global minor modes say so in the doc string
* lisp/emacs-lisp/easy-mmode.el (easy-mmode--arg-docstring): Allow
saying whether it's a global minor mode or not.
(easy-mmode--mode-docstring): Use it.
(define-minor-mode): Pass in the data.
2022-04-03 14:08:04 +02:00
Po Lu
1fb20a4dde Implement drag-source' values of track-mouse' on PGTK.
* src/frame.c (Fmouse_position, mouse_position)
(Fmouse_pixel_position): Fix crashes when mouse_position_hook
stores nil.

* src/pgtkterm.c (pgtk_mouse_position): Behave appropriately.
2022-04-03 19:34:06 +08:00
Po Lu
9ccaf35e0b Implement `drag-source' values of track-mouse on NS
* src/nsterm.m (ns_mouse_position): Don't return frame when
appropriate.
2022-04-03 19:20:56 +08:00
Po Lu
c3f12cd5da Implement (sort of) `drag-source' on Haiku
* src/haikuterm.c (haiku_mouse_or_wdesc_frame)
(haiku_mouse_position): Behave reasonably when track_mouse is
Qdrag_source.
2022-04-03 11:08:42 +00:00
Po Lu
28f720e7c4 Make dragging stuff to a window above a frame work
* doc/lispref/frames.texi (Mouse Tracking):
* etc/NEWS: Announce new `drag-source' value of `track-mouse'.
* lisp/mouse.el (mouse-drag-and-drop-region): Use new value of
`track-mouse' during interprogram drag and drop.

* src/keyboard.c (make_lispy_position): Handle nil values of f
correctly.
* src/xdisp.c (define_frame_cursor1): Ignore if `drag-source' as
well.
(syms_of_xdisp): New defsym `drag-source'.
* src/xterm.c (XTmouse_position): Implement `drag-source'.
(mouse_or_wdesc_frame): Likewise.
2022-04-03 18:59:12 +08:00
Po Lu
441ce4672d Don't touch WAYLAND_DISPLAY in browse-url
* lisp/net/browse-url.el (browse-url): Don't touch
WAYLAND_DISPLAY.  (bug#53969)
2022-04-03 15:23:27 +08:00
Po Lu
35928918d1 Look for DND proxies on the root window as well
* src/xterm.c (x_dnd_get_target_window): If nothing was found on
the COW, look at the root window.
2022-04-03 13:32:25 +08:00
Po Lu
f229710d41 Implement new DND features on GNUstep
* lisp/term/ns-win.el (ns-drag-n-drop): Handle special `lambda'
drag-n-drop events.
* src/nsterm.m: ([EmacsView wantsPeriodicDraggingUpdates]):
([EmacsView draggingUpdated:]): New functions.
2022-04-03 09:59:14 +08:00
Po Lu
e9d4f119da Implement new DND options on Haiku
* lisp/term/haiku-win.el (haiku-drag-and-drop): Handle special
drag and drop motion events.
* src/haiku_support.cc (MouseMoved): Set `dnd_message' flag.
* src/haiku_support.h (struct haiku_mouse_motion_event): New
member `dnd_message'.
* src/haikuterm.c (haiku_read_socket): Create special DND events
when the mouse moves with a drop message.
2022-04-03 01:26:32 +00:00
Po Lu
1694f82e5f Add user options to move point and scroll window during DND
* doc/emacs/frames.texi (Drag and Drop):
* etc/NEWS: Document new options 'dnd-scroll-margin' and
'dnd-indicate-insertion-point'.
* lisp/dnd.el (dnd-protocol-alist):
(dnd-open-remote-file-function):
(dnd-open-file-other-window): Add right group to defcustoms.
(dnd-scroll-margin, dnd-indicate-insertion-point): New user
options.
(dnd-handle-movement): New function.
* lisp/x-dnd.el (x-dnd-handle-xdnd):
(x-dnd-handle-motif): Call `dnd-handle-movement' when
appropriate.
2022-04-03 09:14:24 +08:00
Po Lu
4afd34edd3 Fix Motif drag-and-drop on servers without XI2
* src/xterm.c (handle_one_xevent): Pass right flags to the
receiver when handling drops for core button events.
2022-04-03 08:52:26 +08:00
Po Lu
6904fcb11d Fix incorrect usage of XM_DRAG_SIDE_EFFECT
* src/xterm.c (xm_send_top_level_leave_message)
(handle_one_xevent): Pass corret alt side effects and flags to
XM_DRAG_SIDE_EFFECT.
2022-04-03 08:42:52 +08:00
Basil L. Contovounesios
98775e6cf6 ; Pacify obsoletion warnings in image-tests.el. 2022-04-02 19:41:12 +03:00
Lars Ingebrigtsen
781c43de3d Fix bootstrap errors after previous easy-mmode change
* lisp/subr.el (ensure-empty-lines, string-lines): Moved from
subr-x so that they can be used in early bootstrap files.

* lisp/emacs-lisp/easy-mmode.el (easy-mmode--mode-docstring):
Don't use string-empty-p because of bootstrap issues.
2022-04-02 16:53:24 +02:00
Lars Ingebrigtsen
56fb536e78 Fix regression in tex alignment
* lisp/align.el (align-rules-list): Make alignment in tex mode
work better again (bug#54663).
2022-04-02 16:36:39 +02:00
Sean Whitton
02ef00d89c em-extpipe: Catch eshell-incomplete thrown while parsing
* lisp/eshell/em-extpipe.el (em-extpipe--or-with-catch): New macro.
(eshell-parse-external-pipeline): Use new macro to treat
`eshell-incomplete' as a failure of the parse function to move us
forward (Bug#54603).  Thanks to Jim Porter <jporterbugs@gmail.com> for
the report and for help isolating the problem.

* test/lisp/eshell/eshell-tests.el
(eshell-test/lisp-command-with-quote): New test for Bug#54603, thanks
to Jim Porter <jporterbugs@gmail.com> (bug#54603).
2022-04-02 16:08:41 +02:00
August Feng
6dc4e3b95c Add S-SPC key sequence to bookmark-bmenu-mode-map
* lisp/bookmark.el (bookmark-bmenu-mode-map): Add an S-SPC binding
for symmetry (bug#54672).

Copyright-paperwork-exempt: yes
2022-04-02 16:01:43 +02:00
Lars Ingebrigtsen
ec464789df Put the define-minor-mode boilerplate at the end of the doc strings
* lisp/emacs-lisp/easy-mmode.el (easy-mmode--mode-docstring): Put
the boilerplate at the end of the doc string.
2022-04-02 15:55:38 +02:00
Eli Zaretskii
9c30276c42 ; Improve documentation of 'font-lock-ignore'
* etc/NEWS:
* lisp/font-lock.el (font-lock-ignore):
* doc/lispref/modes.texi (Customizing Keywords): Clarify the
documentation of 'font-lock-ignore'.
* doc/emacs/display.texi (Font Lock): Mention 'font-lock-ignore'.
2022-04-02 16:45:26 +03:00
Lars Ingebrigtsen
338f5667f4 Further tweaks to cl--generic-describe
* lisp/emacs-lisp/cl-generic.el (cl--generic-describe): Further
tweak the look of the implementation output.
2022-04-02 15:19:15 +02:00
Po Lu
d86e47c860 * lisp/dired.el (dired-mouse-drag): Offer HOST_NAME as well. 2022-04-02 20:48:09 +08:00
Po Lu
ca5f259cff Fix crash when retrieving window property with invalid atom data
This happens when dropping files from dtfile, which somehow puts
non-atom stuff in window properties of type ATOM_PAIR.

* src/xselect.c (x_atom_to_symbol): Catch errors around
XGetAtomName.
2022-04-02 20:12:12 +08:00
Po Lu
f66a47b5bc Compute size of structs with flexible arrays correctly in Motif DND code
* src/xterm.c (xm_read_targets_table_rec, xm_setup_dnd_targets):
Use FLEXSIZEOF instead of sizeof on struct xm_targets_table_rec.
2022-04-02 16:38:19 +08:00
Po Lu
b312959ebd ; * src/sqlite.c: Fix up header comment. 2022-04-02 16:31:13 +08:00
Po Lu
7899e8daff Fix error on mouse move over something not a window while dragging text
* lisp/mouse.el (mouse-drag-and-drop-region): Handle non-window
values of `posn-window' correctly.
2022-04-02 15:59:15 +08:00
Po Lu
c8a49b69ab ; * lisp/mouse.el (mouse-drag-and-drop-region-scroll-margin): Fix type. 2022-04-02 15:48:57 +08:00
Po Lu
e351e9037c Add new option `mouse-drag-and-drop-region-scroll-margin'
* etc/NEWS: Announce new user option.
* lisp/mouse.el (mouse-drag-and-drop-region-scroll-margin): New
user option.
(mouse-drag-and-drop-region): Implement "scroll margin" like
behavior during mouse movement.
2022-04-02 15:45:00 +08:00
Po Lu
0a32037c92 Implement DELETE selection target for cross program drags
* lisp/mouse.el (mouse-drag-and-drop-region): Make sure mark
stays deactivated if a "cut" operation was performed.
* lisp/select.el (xselect-convert-to-delete): Don't clear
selection contents if it's the XdndSelection.
2022-04-02 14:59:08 +08:00
Po Lu
35ad6bc2ac Work around dynamic drag bugs in modern Motif
* src/xterm.c (xm_send_top_level_leave_message): Send a motion
event with impossible coordinates by default.
(handle_one_xevent): Slightly update drop motion message
parameters.
(syms_of_xterm): New variable `x-dnd-fix-motif-leave'.
2022-04-02 11:44:15 +08:00
Po Lu
59fb6783e6 Make Motif drag work on window managers that don't support client lists
* xterm.c (x_dnd_send_xm_leave_for_drop): New function.
(x_dnd_get_wm_state_and_proto): New field `motif_out'.
(x_dnd_get_target_window): Return Motif protocol style if
looking for windows via XTranslateCoordinates.
(x_dnd_cleanup_drag_and_drop, x_dnd_begin_drag_and_drop)
(x_dnd_update_state, handle_one_xevent): Send toplevel leave
along with drops.
2022-04-02 09:53:30 +08:00
Dmitry Gutov
d62b43f760 * lisp/progmodes/xref.el (xref-search-program): Fix typo. 2022-04-02 04:34:52 +03:00
Manuel Uberti
9468ab2570 Support ugrep in xref-search-program-alist
* lisp/progmodes/xref.el
(xref-search-program-alist)
(xref-search-program): Add entries for ugrep (bug#54608).
2022-04-02 04:31:33 +03:00
Stefan Monnier
c75f65442d kmacro: Represent it as an OClosure
Merge the old lambda+list into a single OClosure object which plays
both roles at the same time.  Take advantage of it to provide a
`cl-print-object` method so kmacro objects print nicely using the
`key-parse` syntax.
Also replace the old `kmacro-lambda-form` with a new `kmacro` constructor
which takes a `key-parse` syntax, so that the code inserted with
`insert-kbd-macro` is now more readable.

* lisp/kmacro.el (kmacro): New OClosure type.
(kmacro-ring-head): Use `kmacro` constructor.
(kmacro-push-ring): Convert `elt` from old representation if needed.
(kmacro-split-ring-element, kmacro-view-ring-2nd, kmacro-view-macro):
Adapt to new representation.
(kmacro-exec-ring-item): Turn into obsolete alias.
(kmacro-call-ring-2nd, kmacro-end-or-call-macro): Adjust accordingly.
(kmacro-start-macro): Simplify call to `kmacro-push-ring`.
(kmacro): New constructor function.  Replaces `kmacro-lambda-form`.
(kmacro-lambda-form): Use it and declare obsolete.
(kmacro-extract-lambda): Rewrite and declare obsolete.
(kmacro-p): Rewrite.
(cl-print-object): New method.
(kmacro-bind-to-key, kmacro-name-last-macro): Simplify.

* lisp/macros.el (macro--string-to-vector): New function.
(insert-kbd-macro): Use it.  Generate code using the `kmacro` constructor.

* test/lisp/kmacro-tests.el (kmacro-tests-kmacro-bind-to-single-key):
Silence warning.
(kmacro-tests-name-last-macro-bind-and-rebind): Strengthen the test a bit.
(kmacro-tests--cl-print): New test.
2022-04-01 20:07:33 -04:00