Stefan Monnier [Sat, 28 Oct 2023 00:18:54 +0000 (20:18 -0400)]
(provided-mode-derived-p): Fix alias case
The new handling of aliases in `provided-mode-derived-p`
introduced in Emacs-28.1 caused a regression where
(provided-mode-derived-p MODE MODE) returns nil if MODE is an alias.
Rework the loop so we consider an alias as a kind of parent.
* lisp/subr.el (provided-mode-derived-p): Step over aliases separately.
* test/lisp/subr-tests.el (subr-tests--derived-mode-1)
(subr-tests--derived-mode-2): Move out of `provided-mode-derived-p`
and give them properly namespaced names.
(provided-mode-derived-p): Add more tests for aliases.
F. Jason Park [Sat, 2 Sep 2023 20:43:22 +0000 (13:43 -0700)]
Tidy up ERC's internal text-property API
* lisp/erc/erc-fill.el (erc-fill--spaced-commands): Remove unused
internal variable originally intended for ERC 5.6.
(erc-fill): Check for `erc-msg' being `msg', which carries the same
meaning as `erc-cmd' being `PRIVMSG' or `NOTICE', except that inserted
outgoing messages now no longer normally have an `erc-cmd' property.
(erc-fill-wrap-mode, erc-fill-wrap-disable): Kill
`erc-fill--wrap-last-msg'.
(erc-fill--wrap-max-lull): Convert from buffer-local to normal
variable.
(erc-fill--wrap-continued-message-p): Rework slightly to guard against
resetting the "last speaker" marker when the `erc-ephemeral' text
property is present. This tells insert- and send-related hook members
to pretend the current message doesn't exist when performing stateful
operations. That is, modules should expect the message being inserted
to possibly disappear or be replaced. Also, look for `erc-msg' being
`msg' instead of `erc-cmd' being `PRIVMSG', and fix bug involving only
checking `erc-ctcp' in the current message.
* lisp/erc/erc-stamp.el (erc-add-timestamp): Don't insert timestamps
when the `erc-ephemeral' text property is present.
* lisp/erc/erc.el (erc--msg-props): Add doc string explaining the
purpose of this variable and the various text properties most commonly
present in its value.
(erc--msg-prop-overrides): Add doc string.
(erc-send-action): Don't set `erc-cmd' prop on outgoing CTCP ACTIONs.
(erc-display-message): Reverse overrides to prefer items toward the
front of the alist.
(erc-process-ctcp-query): Include existing overrides from environs.
(erc-send-current-line): Include existing overrides from environs.
(erc-display-msg): Fix doc string and reverse overrides.
* test/lisp/erc/erc-fill-tests.el (erc-fill-tests--insert-privmsg):
Remove stray comment.
(erc-fill-tests--save-p): Set value from environment variable.
(erc-fill-tests--compare): Limit writing snapshots to one test at a
time.
(erc-fill-wrap--merge-action): Fix expected output for non-action
messages that follow action messages. These were previously merged
but escaped detection.
* test/lisp/erc/resources/fill/snapshots/merge-wrap-01.eld: Update.
(Bug#60936)
F. Jason Park [Sat, 21 Oct 2023 20:53:46 +0000 (13:53 -0700)]
Use marker for max pos in erc--traverse-inserted
* lisp/erc/erc-stamp.el (erc-stamp--propertize-left-date-stamp): Run
`erc-stamp--insert-date-hook' separately here instead of via
`erc-insert-modify-hook'.
(erc-stamp--insert-date-stamp-as-phony-message): Don't include value
of `erc-stamp--insert-date-hook' in let-bound `erc-insert-modify-hook'
because its members can run twice if buffer-local. Remove
`erc-send-modify-hook' because it only runs via `erc-display-msg'.
Shadow "pre" and "done" hooks because they don't expect to run in a
narrowed buffer. Call getter for `erc-stamp--current-time'.
(erc-stamp--lr-date-on-pre-modify,
erc-insert-timestamp-left-and-right): Use function form of
`erc-stamp--current-time' for determining current time stamp.
* lisp/erc/erc.el (erc--get-inserted-msg-bounds): Fix off-by-one like
thinko.
(erc--traverse-inserted): Create temporary marker when END is a buffer
position so that insertions and deletions are accounted for in
the terminating condition.
(erc--delete-inserted-message): New function.
* test/lisp/erc/erc-tests.el (erc--delete-inserted-message): New test.
(erc--update-modules/unknown): Improve readability slightly.
* test/lisp/erc/resources/erc-d/erc-d-t.el (erc-d-t-make-expecter):
Indicate assertion flavor in error message. (Bug#60936)
F. Jason Park [Tue, 24 Oct 2023 04:59:25 +0000 (21:59 -0700)]
Ignore date stamps completely in erc-track
* etc/ERC-NEWS: Mention that date stamps no longer optionally affect
the mode line. Also mention but discourage new variable
'erc-stamp-prepend-date-stamps-p'.
* lisp/erc/erc-stamp.el (erc-stamp-prepend-date-stamps-p): New
variable, an escape hatch to allow date stamps to once again be
prepended to messages.
(erc-insert-timestamp-left-and-right): Don't insert stamps as
independent messages when legacy support flag
`erc-stamp-prepend-date-stamps-p' is non-nil.
* lisp/erc/erc-track.el (erc-track--skipped-msgs): New internal
variable.
(erc-track-modified-channels): In previous versions, a date stamp
attached to a message for an IRC command in `erc-track-exclude-types'
would have no effect on the mode line. That they were able to
otherwise was probably a bug. Regardless, this distinction was lost
for the worse after date stamps became independent messages with c68dc7786fc "Manage some text props for ERC insertion-hook members".
To sidestep this regression, the `track' module will ignore date
stamps completely from now on. Thanks to Corwin Brust for spotting
this.
* test/lisp/erc/erc-scenarios-stamp.el
(erc-scenarios-stamp--left/display-margin-mode): Remove redundant
binding.
(erc-scenarios-stamp--legacy-date-stamps): New test. (Bug#60936)
F. Jason Park [Wed, 25 Oct 2023 01:18:50 +0000 (18:18 -0700)]
Be slightly more aggressive with erc-scrolltobottom-all
* lisp/erc/erc-goodies.el (erc--scrolltobottom-on-post-command):
Redo obsolete doc string.
(erc--scrolltobottom-at-prompt-minibuffer-active,
erc--scrolltobottom-on-win-conf-change): Rename former to latter to
better reflect actual role. Remove conditional guard so it always
runs.
(erc--scrolltobottom-setup): Set `scroll-step' locally when a user
hasn't customized `scroll-conservatively'. Update
`window-configuration-change-hook' member name. (Bug#64855)
Stefan Kangas [Thu, 26 Oct 2023 19:09:06 +0000 (21:09 +0200)]
Remove highlighting trailing whitespace from cperl-mode
* lisp/progmodes/cperl-mode.el (cperl-invalid-face): Make
obsolete in favor of 'show-trailing-whitespace'.
(cperl-init-faces): No longer highlight trailing whitespace
separately.
(cperl-praise, cperl-tips-faces): Update documentation for above
change.
João Távora [Thu, 26 Oct 2023 13:20:41 +0000 (14:20 +0100)]
Flymake: protect against problematic invalid diagnostics
If a backend reports a diagnostic which is out of bounds, it still
lives in flymake--state and will still be cleaned up in the next run
of flymake--publish-diagnostics. But if flymake--highlight-line
doesn't give it an overlay (which it didn't until now), things will
break afterwards.
See bug#66759 and https://github.com/joaotavora/eglot/discussions/1311
* lisp/progmodes/flymake.el (flymake--highlight-line): Set
flymake--diag-overlay earlier.
(Version): Bump to 1.3.7.
Po Lu [Thu, 26 Oct 2023 11:37:58 +0000 (11:37 +0000)]
Enable DND handlers to receive more than one URI at a time
* doc/lispref/frames.texi (Drag and Drop): Illustrate the effect
of the dnd-multiple-handler property and how convergent handlers
are reconciled.
* etc/NEWS (Lisp Changes in Emacs 30.1): Announce this change.
* lisp/dnd.el (dnd-protocol-alist): Bring doc string up to date.
(dnd-handle-one-url): Obsolete this function.
(dnd-handle-multiple-urls): New function.
* lisp/x-dnd.el (x-dnd-handle-uri-list, x-dnd-handle-file-name):
Reimplement in terms of `dnd-handle-multiple-uris'.
* lisp/term/pgtk-win.el (pgtk-drag-n-drop)
(pgtk-drag-n-drop-other-frame, pgtk-drag-n-drop-as-text): Efface
detritus that remained after the removal of the old PGTK drag
and drop implementation.
Harald Jörg [Thu, 26 Oct 2023 10:06:12 +0000 (12:06 +0200)]
cperl-mode.el: Make commands and options for Perl info pages obsolete.
The Perl documentation in info format is no longer distributed with Perl,
nor is it available from CPAN. Point to cperl-perldoc instead.
* lisp/progmodes/cperl-mode.el (cperl-info-page): Make obsolete.
(cperl-tips): Remove outdated instructions to get Perl info
sources from the docstring.
(cperl-praise): Remove advertising the info interface in the
docstring.
(cperl-mode-map): Replace bindings to `cperl-info-on-command' and
`cperl-info-on-current-command' by `cperl-perldoc'.
(cperl-menu): Remove menu entries pointing to the Perl info page.
(cperl-mode): Remove explanation of the Perl info commands from
the docstring.
(cperl-info-on-command, cperl-info-on-current-command),
(cperl-imenu-info-imenu-search, cperl-imenu-on-info): Declare the
commands obsolete.
* etc/NEWS: Describe the obsoletion of Perl info commands.
john muhl [Tue, 10 Oct 2023 19:39:30 +0000 (14:39 -0500)]
Improve imenu support in lua-ts-mode
* lisp/progmodes/lua-ts-mode.el (lua-ts-mode): Include require
statements and remove anonymous entries.
(lua-ts--named-function-p, lua-ts--require-name-function)
(lua-ts--require-p): New functions.
* lisp/speedbar.el (speedbar-supported-extension-expressions):
Add Lua to the list of supported file types. (Bug#66465)
Spencer Baugh [Sat, 19 Aug 2023 20:01:54 +0000 (16:01 -0400)]
Add toggle-window-dedicated command and mode-line-window-dedicated
It's sometimes useful to interactively make certain windows dedicated.
This allows a level of interactive control over which window
display-buffer uses.
Additionally, when a window is dedicated (even without this new
command) it can affect display-buffer behavior in ways which may be
unexpected for users. Let's display the window dedicated status in
the mode-line to help indicate what's going on.
* doc/emacs/windows.texi (Displaying Buffers): Add information about
dedicated windows and toggle-window-dedicated.
* doc/emacs/screen.texi (Mode Line): Add information about the window
dedicated indicator.
* etc/NEWS: Announce mode-line-window-dedicated and
toggle-window-dedicated.
* lisp/window.el (toggle-window-dedicated): Add. (bug#64619)
(window-prefix-map): Add C-x w d binding.
* lisp/bindings.el (mode-line-window-control): Add.
(mode-line-window-dedicated): Add.
(standard-mode-line-format): Insert mode-line-window-dedicated.
Stefan Kangas [Wed, 25 Oct 2023 10:27:31 +0000 (12:27 +0200)]
Prefer HTTPS in `M-x webjump´
* lisp/net/webjump.el (webjump-url-fix): Prefer HTTPS to HTTP.
(webjump-sites): Document the above change.
(webjump-sample-sites): Change some links to HTTP only.
Po Lu [Wed, 25 Oct 2023 02:19:36 +0000 (10:19 +0800)]
Correct computation of intermediate axis coordinates
* src/sfnt.c (sfnt_compute_tuple_scale, sfnt_vary_simple_glyph)
(sfnt_vary_compound_glyph): Correct typos involving
intermediate_end (or something of the like) being set to
intermediate_start.
Jim Porter [Tue, 10 Oct 2023 03:25:28 +0000 (20:25 -0700)]
Add a new Eshell special reference type for markers
* lisp/eshell/esh-arg.el (eshell-get-marker, eshell-insert-marker)
(eshell-complete-marker-ref): New functions...
(eshell-special-ref-alist): ... Add them to the new "marker" entry.
* lisp/eshell/em-cmpl.el (eshell-complete-parse-arguments): Fix edge
case when 'end' is at beginning of (possibly-narrowed) buffer.
* lisp/eshell/esh-arg.el (eshell-special-ref-alist) New variable...
(eshell-special-ref-default): ... New option...
(eshell--special-ref-function): ... New function...
(eshell-parse-special-reference): ... use them.
(eshell-insert-special-reference): New function.
(eshell-complete-special-reference): Reimplement to use a nested call
to Pcomplete.
(eshell-complete-buffer-ref): New function.
* lisp/eshell/esh-proc.el (eshell-proc-initialize): Add "process"
special ref type here.
(eshell-complete-process-ref): New function.
* doc/misc/eshell.texi (Bugs and ideas): Remove now-implemented idea.
Jim Porter [Tue, 22 Aug 2023 20:13:45 +0000 (13:13 -0700)]
Support arbitrary Eshell arguments inside special references
* lisp/eshell/esh-arg.el (eshell-current-argument-plain): New variable.
(eshell-parse-special-reference): Use 'eshell-parse-arguments'.
(eshell-get-buffer): New function.
(eshell-insert-buffer-name): Properly quote the buffer name.
* lisp/eshell/esh-proc.el (eshell-read-process-name): Move to "Special
references" section.
(eshell-insert-process): Properly quote the process name.
* lisp/eshell/em-extpipe.el (eshell-parse-external-pipeline):
* lisp/eshell/esh-io.el (eshell-parse-redirection): Don't do anything
when 'eshell-argument-plain' is non-nil.
Harald Jörg [Tue, 24 Oct 2023 15:54:39 +0000 (17:54 +0200)]
; cperl-mode.el: Remove functions using mode-compile.el
mode-compile.el is no longer available from any maintained repository,
its archived version does not work since Emacs 27. The menu options
tested for availability of mode-compile and therefore were disabled,
the function was not documented.
* lisp/progmodes/cperl-mode.el (cperl-tips): Remove reference to
mode-compile.el.
(cperl-menu): Remove defunct entries requiring mode-compile.
(cperl-check-syntax): Remove function.
(cperl-extra-perl-args): Remove user option only used by cperl-check-syntax.
Stefan Kangas [Tue, 24 Oct 2023 15:28:51 +0000 (17:28 +0200)]
Make NSM warn if DH key exchange has less than 2048 bit primes
The previous default was to warn when servers supported only 1024 bit
primes in Diffie-Hellman key exchanges. This highly conservative
number was based on the observation that, in November 2018, no less
than 12.7% of servers still only supported 1024 bit primes (less than
0.1% supported only 768 and 512 bits).
Five years later, in October 2023, only 3.7 % of servers remain with
only 1024 bit support. SSL Labs summarizes: "At this time, 2048 bits
is the minimum expected strength." Therefore, it is reasonable to
start warning users about this in Emacs 30.1, at which time even fewer
servers with such poor capabilities will remain.
Note that key exchanges based on 1024 bit prime number were considered
broken for security purposes already in 2015 (see Logjam below).
For more information:
https://www.ssllabs.com/ssl-pulse/
https://en.wikipedia.org/wiki/Logjam_(computer_security)
* lisp/net/nsm.el (nsm-protocol-check--dhe-prime-kx): Bump expected
minimum number of prime bits to 2048.
Po Lu [Tue, 24 Oct 2023 13:12:32 +0000 (21:12 +0800)]
Introduce an option which controls touch screen hscroll
* doc/emacs/input.texi (Touchscreens): Document this new
function and revise this node for clarity and pithiness.
* lisp/touch-screen.el (touch-screen): New custom group.
(touch-screen-display-keyboard, touch-screen-delay)
(touch-screen-precision-scroll, touch-screen-word-select)
(touch-screen-extend-selection, touch-screen-preview-select):
Move such options to that group.
(touch-screen-enable-hscroll): New user option.
(touch-screen-handle-scroll): If it is disabled, maintain the
hscroll accumulators but refrain from scrolling the window.
Instead of modifying `frame-format` to be entirely machine-readable,
keep the original human-readable format and append a second,
machine-readable line that we remove after parsing.
* lisp/progmodes/gud.el
(gud-lldb-marker-filter): Parse the new line format and filter it out.
* lisp/progmodes/gud.el
(gud-lldb-def-python-completion-function): Rename to...
(gud--lldb-python-init-string): ...this and add modification
of `frame-format`, which seems easiest done from Python.
(gud-lldb-frame-format): Remove.
(gud-lldb-initialize): Update, remove no longer needed parts.
Po Lu [Tue, 24 Oct 2023 07:32:25 +0000 (07:32 +0000)]
Correct documentation of selection-coding-system
* doc/lispref/frames.texi (Window System Selections): Don't
assert that selection-coding-system functions everywhere or that
its default value is always utf-16le-dos.
(Drag and Drop): Fix a typo.
Po Lu [Tue, 24 Oct 2023 03:04:51 +0000 (03:04 +0000)]
Rewrite first two sections of the drag-and-drop documentation
* doc/lispref/frames.texi (Accessing Selections): Refine
wording.
(Drag and Drop): Rewrite for clarity and enter into detail upon
various function arguments.
Stefan Kangas [Mon, 23 Oct 2023 22:21:20 +0000 (00:21 +0200)]
Remove gmane.org support from nnweb
* lisp/gnus/nnweb.el (nnweb-type, nnweb-type-definition): Remove gmane.
(nnweb-gmane-create-mapping, nnweb-gmane-wash-article)
(nnweb-gmane-search, nnweb-gmane-identity): Make obsolete.
(nnweb-definition, nnweb-init): Raise user-error when 'nnweb-type' is
'gmane'.
* doc/misc/gnus.texi (Registry Article Refer Method): Update
example to not use gmane.org.
Ref: https://gmane.io/
More robust control sequence handling in LLDB output (bug#66604)
* lisp/progmodes/gud.el (gud-lldb-marker-filter):
Slightly more elaborate interpretation of CHA and ED sequences
in LLDB output, allowing edits to previously emitted characters
on the same line.
* doc/lispref/variables.texi (Variable Scoping)
(Lexical Binding, Dynamic Binding):
Alter the presentation order from the point of view that lexical
binding is the standard discipline (if not always the default) and
dynamic binding an alternative, which corresponds better to Elisp
today. Modernise parts of the text.
* doc/lispref/elisp.texi (Top): Update menu.
Po Lu [Mon, 23 Oct 2023 11:11:30 +0000 (11:11 +0000)]
Rewrite Yank Media node in the Emacs Lisp manual
* doc/lispref/frames.texi (Other Selections): Introduce a
reference to Accessing Selections, then rewrite for clarity and
to stop mentioning MIME types by name, for selection data types
are not confined to those.
john muhl [Thu, 5 Oct 2023 01:46:15 +0000 (20:46 -0500)]
Various improvements to lua-ts-mode (Bug#66159)
* lisp/progmodes/lua-ts-mode.el (lua-ts-mode): Improve movement.
(lua-ts--simple-indent-rules): Improve indentation rules.
(lua-ts-mode-map): Add key bindings and menus.
(lua-ts-mode-hook): Make hook available in Customize.
(lua-ts-inferior-history, lua-ts-inferior--write-history): Add option
to read/write an input history file.
(lua-ts-inferior-lua, lua-ts-send-buffer, lua-ts-send-file)
(lua-ts-send-region, lua-ts-inferior-prompt)
(lua-ts-inferior-prompt-continue): Support for sending buffer,
file or region to the inferior process.
(lua-ts-show-process-buffer, lua-ts-hide-process-buffer)
(lua-ts-kill-process): New functions.
(lua-ts-inferior-prompt-regexp): Remove option.
* test/lisp/progmodes/lua-ts-mode-resources/indent.erts:
* test/lisp/progmodes/lua-ts-mode-resources/movement.erts: Add
tests.
Po Lu [Mon, 23 Oct 2023 02:32:09 +0000 (02:32 +0000)]
Further improve documentation concerning selections
* doc/lispref/frames.texi (Window System Selections): Replace
incomplete attempts to address selection data types in this node
with references to Accessing Selections.
(Accessing Selections, X Selections): Revise for clarity and
pithiness.
Mauro Aranda [Sat, 21 Oct 2023 14:02:36 +0000 (11:02 -0300)]
Allow specifying the dir locals file to edit (Bug#66663)
* lisp/files-x.el (modify-dir-local-variable): Take a 5th optional
argument, the filename of the dir locals file to modify.
(read-dir-locals-file): New function.
(add-dir-local-variable, delete-dir-local-variable)
(copy-file-locals-to-dir-locals): Optionally read the filename to
modify, and pass it to modify-dir-local-variable.
* etc/NEWS: Announce the change.
* doc/emacs/custom.texi (Directory Variables): Document the new
functionality.
Po Lu [Sun, 22 Oct 2023 07:54:50 +0000 (07:54 +0000)]
Revise documentation concerning selections outside X
* doc/lispref/frames.texi (Accessing Selections, X Selections):
Correct markup, averting the recognition of X followed by a
sentence stop as an acronym.
(Other Selections): Relate the nature of the MS-Windows
selection emulation, how it functions, and its deficiencies.
Clarify paragraphs concerning PGTK and Nextstep.
* doc/misc/efaq.texi (Emacs in a Linux console):
* doc/misc/use-package.texi (Conditional loading): Correct
markup, averting the recognition of X followed by a sentence
stop as an acronym.
Po Lu [Sun, 22 Oct 2023 01:06:28 +0000 (09:06 +0800)]
Enumerate default UVS glyphs
* src/sfnt.c (sfnt_compare_unicode_value_range)
(sfnt_is_character_default): New functions.
(sfnt_test_uvs): Print and verify the default UVS table.
* src/sfnt.h: Update prototypes.
* src/sfntfont.c (sfntfont_get_variation_glyphs): Index the cmap
with the default glyph, and insert it within VARIATIONS if
character is present within a selector record's default UVS
table.
Move lexical-binding warning from checkdoc to byte-compiler
This warning is much more appropriate for the compiler, since lexical
binding affects what it can reason and warn about, than for checkdoc
as the warning has no bearing to documentation at all.
The move also improves the reach of the warning.