Stefan Kangas [Thu, 16 Jun 2022 07:48:18 +0000 (09:48 +0200)]
Make artist-version variable obsolete
* lisp/textmodes/artist.el (artist-version): Make obsolete. This has
not been updated in nearly two decades; use the Emacs version instead.
(artist-submit-bug-report): Don't use above obsolete variable.
* lisp/org/oc.el (org-cite-list-citations): Avoid quadratic complexity.
Pre-calculate list of all footnote definitions and cache the footnote
label search hits. Do not make `org-element-map' accumulate unused
result.
Ihor Radchenko [Wed, 15 Jun 2022 17:01:53 +0000 (01:01 +0800)]
org-export-data: Concatenate strings in temporary buffer for performance
* lisp/org/ox.el (org-export-data): Use temporary buffer to collect export
data instead of `mapconcat'. Using buffer puts less load on garbage
collector.
Ihor Radchenko [Wed, 15 Jun 2022 17:03:18 +0000 (01:03 +0800)]
org-export-as: Do not update buffer settings when not modified
* lisp/org/ox.el (org-export-as): Use `buffer-chars-modified-tick' and
avoid extra invocations of `org-set-regexps-and-options' and
`org-update-radio-target-regexp' when the buffer is not changed.
Also, disable folding checks. Folding is irrelevant inside export
buffer.
Ihor Radchenko [Sun, 12 Jun 2022 05:06:47 +0000 (13:06 +0800)]
org-export-resolve-fuzyy-link: Pre-cache all possible search cells
* lisp/org/ox.el (org-export-resolve-fuzzy-link): Before matching LINK,
pre-process and cache all the non-nil search cells in the parse tree.
When matching, use the pre-processed info. Fix the :test function for
the cache hash table.
Ihor Radchenko [Sun, 12 Jun 2022 05:05:16 +0000 (13:05 +0800)]
org-export-get-footnote-definition: Pre-cache references in parse tree
* lisp/org/ox.el (org-export-get-footnote-definition): Pre-process parse
tree once to filter out all non-footnote elements. This speeds up
subsequent footnote definition searches.
Richard Hansen [Fri, 10 Jun 2022 00:41:50 +0000 (20:41 -0400)]
bindat (strz): Write null terminator after variable length string
* lisp/emacs-lisp/bindat.el (bindat--pack-strz): Explicitly write a
null byte after packing a variable-length string to ensure proper
termination when packing to a pre-allocated string.
* doc/lispref/processes.texi (Bindat Types): Update documentation.
* test/lisp/emacs-lisp/bindat-tests.el (bindat-test--str-strz-prealloc):
Update tests.
Po Lu [Thu, 16 Jun 2022 06:33:30 +0000 (14:33 +0800)]
Improve handling of fallback drop protocols
* lisp/x-dnd.el (x-dnd-use-offix-drop): New value `files', which
means to only drop files using the OffiX protocol. Make it the
default.
(x-dnd-handle-old-kde): Handle other data types correctly.
(x-dnd-offix-old-kde-to-name): New variable.
(x-dnd-offix-id-to-name): Fix typo in doc string.
(x-dnd-handle-unsupported-drop): Implement new value.
Po Lu [Thu, 16 Jun 2022 05:58:39 +0000 (13:58 +0800)]
Fix Motif DND after atom ownership is lost due to frame destruction
* src/xterm.c (xm_get_drag_atom_1): Record owner.
(x_free_frame_resources): Clear drag atom if owner was freed.
* src/xterm.h (struct x_display_info): New field
`motif_drag_atom_owner'.
Po Lu [Thu, 16 Jun 2022 04:49:07 +0000 (12:49 +0800)]
Improve drag atom computation
* src/xterm.c (xm_get_drag_window): Avoid leak if error occured
creating drag window. Also use StructureNotifyMask instead of
ButtonPressMask.
(xm_get_drag_atom_1): Update. Make EMACS_DRAG_ATOM a list of
atoms and use the first one that isn't currently owned.
(xm_get_drag_atom): Stop owning selection here.
(xm_setup_drag_info): Record chosen atom.
(x_dnd_cleanup_drag_and_drop, x_dnd_begin_drag_and_drop)
(x_dnd_update_state, handle_one_xevent, x_connection_closed):
Use chosen atom.
* src/xterm.h (struct x_display_info): New field
`motif_drag_atom_time'.
Paul Eggert [Thu, 16 Jun 2022 04:08:03 +0000 (23:08 -0500)]
Streamline time decoding and conversion
* src/lisp.h (lisp_h_BASE2_EQ, BASE2_EQ): New macros and functions.
* src/timefns.c (tzlookup, Fdecode_time): Use them.
(Ftime_convert): Convert to symbol once, instead of many times.
Paul Eggert [Thu, 16 Jun 2022 04:08:03 +0000 (23:08 -0500)]
Don’t test time functions for NaNs, INF
* test/src/timefns-tests.el (decode-then-encode-time)
(time-equal-p-NaN-NaN, time-arith-tests):
Don’t test time functions with infinities and NaNs,
which are not Lisp time values.
Paul Eggert [Thu, 16 Jun 2022 04:08:03 +0000 (23:08 -0500)]
Prefer BASE_EQ in time-sensitive ops
* src/timefns.c (tzlookup, lisp_time_hz_ticks)
(decode_time_components, lisp_to_timespec, lispint_arith)
(time_arith, time_cmp, Fdecode_time, Fencode_time)
(Ftime_convert): Prefer BASE_EQ to EQ where either will do.
Paul Eggert [Thu, 16 Jun 2022 04:05:22 +0000 (23:05 -0500)]
icalendar-tests no longer assumes TZ = wall
Do not assume that the TZ environment variable is either unset or
agrees with /etc/localtime. I ran into this test bug while
running ‘TZ=America/Chicago make check’ on a platform where
/etc/localtime was America/Los_Angeles.
* test/lisp/calendar/icalendar-tests.el:
(icalendar-tests--decode-isodatetime): Don’t use
set-time-zone-rule, whose doc string says “Instead of calling this
function, you typically want something else” for a reason.
Instead, pass the zone arg to icalendar-test--format.
Po Lu [Thu, 16 Jun 2022 02:08:12 +0000 (10:08 +0800)]
Comply with the Motif requirement for unique drag atoms
* src/xselect.c (x_handle_selection_request)
(Fx_get_selection_internal, syms_of_xselect): New variable
`x-selection-alias-alist'. Respect that alist of aliases.
* src/xterm.c (x_atom_refs): Intern _EMACS_DRAG_ATOM.
(xm_get_drag_atom_1, xm_get_drag_atom): New functions.
(xm_setup_drag_info, x_dnd_cleanup_drag_and_drop)
(x_dnd_begin_drag_and_drop, x_dnd_update_state, handle_one_xevent)
(x_connection_closed, x_intern_cached_atom): Alias the drag atom
to XdndSelection. Use it instead of XdndSelection to set the
Motif index atom.
(x_get_atom_name): Handle new atoms.
(syms_of_xterm): New defsym.
* src/xterm.h (struct x_display_info): New fields for new atoms
and their names.
Manuel Giraud [Wed, 15 Jun 2022 15:52:38 +0000 (17:52 +0200)]
Do not display 'nil for 0-ary filter qualifier in ibuf
* lisp/ibuf-ext.el (ibuffer-format-qualifier-1): Do not display
nil in header for 0-ary filter qualifier.
* lisp/ibuf-macs.el (define-ibuffer-filter): Also fix the message.
Po Lu [Wed, 15 Jun 2022 13:00:55 +0000 (21:00 +0800)]
Implement using the OffiX protocol for dropping
* lisp/x-dnd.el (x-dnd-use-offix-drop): New user option.
(x-dnd-handle-unsupported-drop): Return t if the OffiX protocol
was used.
(x-treat-local-requests-remotely): New defvar.
(x-dnd-convert-to-offix, x-dnd-do-offix-drop): New functions.
* src/xterm.c: Update commentary.
(x_term_init): Extend number of DND atoms allocated by default.
Miha Rihtaršič [Wed, 15 Jun 2022 12:24:24 +0000 (14:24 +0200)]
whitespace.el: New whitespace style `lines-char'
* lisp/whitespace.el (whitespace-style):
(whitespace-style-value-list):
(whitespace-toggle-option-alist):
(global-whitespace-toggle-options):
(whitespace-help-text):
(whitespace-interactive-char):
(whitespace-style-face-p):
(whitespace-color-on):
(whitespace-lines-regexp): New whitespace style `lines-char', which
highlights only the first character over the whitespace-line-column
limit (bug#55980).
Po Lu [Wed, 15 Jun 2022 12:08:51 +0000 (20:08 +0800)]
Handle receiving new OffiX protocol during drag-and-drop
* lisp/x-dnd.el (x-dnd-types-alist, x-dnd-known-types): Add
DndTypeFile and DndTypeText.
(x-dnd-init-frame): Add _DND_PROTOCOL.
(x-dnd-handle-drag-n-drop-event): Handle _DND_PROTOCOL events.
(x-dnd-handle-old-kde): Drop event if proto is too new.
(x-dnd-offix-id-to-name): New list.
(x-dnd-handle-offix-file, x-dnd-handle-offix): New functions.
Po Lu [Wed, 15 Jun 2022 06:46:21 +0000 (14:46 +0800)]
Handle coordinates for the old KDE drop protocol
* src/xterm.c (x_atom_refs): Add DndProtocol and _DND_PROTOCOL.
(x_coords_from_dnd_message): Handle the old KDE protocol.
* src/xterm.h (struct x_display_info): New atoms.
Po Lu [Wed, 15 Jun 2022 01:26:46 +0000 (09:26 +0800)]
Handle coordinates from XM_DRAG_REASON_DRAG_MOTION replies
* src/xterm.c (struct xm_drag_motion_reply): New struct.
(xm_read_drag_motion_reply): New function.
(x_coords_from_dnd_message): Handle those messages as well.
* lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker)
(byte-optimize-let-form, byte-optimize-letX):
* lisp/emacs-lisp/bytecomp.el (byte-compile-unwind-protect):
Simplify source optimisation and codegen code that can now rely on
normalised let/let* and unwind-protect forms.
Make cconv work for dynamically bound code and always run it.
This allows later stages to benefit from transformations and
normalisations in cconv.
* lisp/emacs-lisp/bytecomp.el (byte-compile-preprocess): Always run
cconv.
* lisp/emacs-lisp/cconv.el (cconv--analyze-function)
(cconv-analyze-form): In dynbound code, treat all variable bindings
as dynamic (lambda, let, let* and condition-case).
Early normalisation of setq during macroexpand-all allows later
stages, cconv, byte-opt and codegen, to be simplified and duplicated
checks to be eliminated.
* lisp/emacs-lisp/macroexp.el (macroexp--expand-all):
Normalise all setq forms to a sequence of (setq VAR EXPR).
Emit warnings if necessary.
* lisp/emacs-lisp/cconv.el (cconv-convert, cconv-analyze-form):
* lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker):
* lisp/emacs-lisp/bytecomp.el (byte-compile-setq):
Simplify.
* test/lisp/emacs-lisp/bytecomp-tests.el: Adapt and add tests.
* test/lisp/emacs-lisp/bytecomp-resources/warn-variable-setq-nonvariable.el;
* test/lisp/emacs-lisp/bytecomp-resources/warn-variable-setq-odd.el:
New files.
Robert Pluim [Wed, 8 Jun 2022 12:51:31 +0000 (14:51 +0200)]
Add more characters with macron in C-x 8 map and latin input methods
* lisp/international/iso-transl.el (iso-transl-char-map): Add
sequences for {AE,ae,G,g} with macron.
* lisp/leim/quail/latin-post.el ("latin-postfix"): Add missing entries
for {AE,ae,G,g} with macron.
* lisp/leim/quail/latin-pre.el ("latin-prefix"): Add entries for
'letter with macron' for {A,a,E,e,AE,ae,I,I,O,o,U,u,Y,y} with macron.
* lisp/files.el (dir-locals-read-from-dir): We want the time stamp
of the actual file, not the time stamp of the symlink (if
.dir-locals.el is a symlink) (bug#46122).
Daniel Martín [Tue, 14 Jun 2022 12:23:06 +0000 (14:23 +0200)]
Bind Cmd-t to menu-set-font on macOS
* lisp/term/ns-win.el (global-map): set-frame-font asks for a font
using the minibuffer, but the former ns-popup-font-panel always showed
the graphical font panel on macOS. To preserve the same behavior,
bind it to menu-set-font, which is also called by Options, Set Default
Font (bug#55967).
Michael Albinus [Tue, 14 Jun 2022 11:04:34 +0000 (13:04 +0200)]
Fix Tramp problem with non-essential
* lisp/net/tramp.el (tramp-run-real-handler):
Handle also functions which use a `tramp-file-name' for the file
name handler. (Bug#55832)
(tramp-get-home-directory, tramp-get-remote-uid)
(tramp-get-remote-gid): VEC can also be nil.
Po Lu [Tue, 14 Jun 2022 05:52:38 +0000 (13:52 +0800)]
Handle coordinates of Motif drop start messages
* src/xterm.c (xm_read_drop_start_message): New function.
(xm_read_drag_motion_message): Check that the originator is
correct.
(x_coords_from_dnd_message): Read drop start messages as well.
* src/xfont.c (xfont_list_pattern): Initialize a local.
Although I’m not sure this is needed, it doesn’t change
behavior (except possibly to make undefined behavior defined).
Allow `query-replace' to do exact replacement of the current item
* doc/emacs/search.texi (Query Replace): Document it.
* lisp/replace.el (query-replace-help): Amend help text.
(query-replace-map): Bind `E' to the exact case replacement.
(perform-replace): Allow editing a replacement with exact case
(bug#8504).
* lisp/language/indian.el ("Meetei Mayek"): New language environment.
Add composition rules for Meetei Mayek. Add sample text and input method.
* lisp/international/fontset.el (script-representative-chars)
(setup-default-fontset): Support Meetei Mayek.
* lisp/leim/quail/indian.el ("meetei-mayek"): New input method.
* etc/HELLO: Add a Meetei Mayek greeting.
* etc/NEWS: Announce the new language environment.
* lisp/vc/ediff-wind.el (ediff-refresh-mode-lines): Don't include
"Quick Help" in the mode line in the plain version (bug#12840).
(ediff-make-wide-control-buffer-id): Make the informative part of
the mode line bold. (Code from Michael Heerdegen.)
Richard Hansen [Mon, 13 Jun 2022 12:32:01 +0000 (14:32 +0200)]
bindat (strz): Error on null byte if packing variable-length string
* lisp/emacs-lisp/bindat.el (strz): Signal an error if a null byte is
encountered while packing a string to a variable-length strz field.
* test/lisp/emacs-lisp/bindat-tests.el (strz): Add tests (bug#55938).
* lisp/emacs-lisp/package.el (package-menu-filter-by-archive):
Filter by package name instead of by regexp, so that if the user
types "gnu", they won't get "nongnu", too (bug#55919).