]> git.eshelyaron.com Git - emacs.git/log
emacs.git
20 months agoDon't use `mapconcat` for effect
Mattias Engdegård [Mon, 10 Apr 2023 13:20:27 +0000 (15:20 +0200)]
Don't use `mapconcat` for effect

* lisp/progmodes/make-mode.el (makefile-browser-fill):
* lisp/url/url-mailto.el (url-mailto):
Use `mapc` instead of `mapconcat`.

20 months agoebnf2ps: eliminate double nreverse
Mattias Engdegård [Mon, 10 Apr 2023 13:07:24 +0000 (15:07 +0200)]
ebnf2ps: eliminate double nreverse

* lisp/progmodes/ebnf-otz.el (ebnf-split-suffix): Simplify code that
relied on a rather inobvious in-place reversal of a list twice for
correctness, silencing a byte-compiler warning.

20 months agoClarify process-environment in eglot-tests
Basil L. Contovounesios [Mon, 10 Apr 2023 09:58:49 +0000 (10:58 +0100)]
Clarify process-environment in eglot-tests

* test/lisp/progmodes/eglot-tests.el (eglot--call-with-fixture):
Clarify commentary (bug#61637).  Use null-device and briefer syntax.

20 months agoEnd default-directory with slash in eglot-tests
Basil L. Contovounesios [Mon, 10 Apr 2023 09:42:09 +0000 (10:42 +0100)]
End default-directory with slash in eglot-tests

* test/lisp/progmodes/eglot-tests.el (eglot--call-with-fixture):
Separate prefix from random part of temporary file name.  Ensure
default-directory ends with a directory separator (bug#61637).

20 months ago; Eliminate warning when `dired-map-over-marks` value is unused
Mattias Engdegård [Mon, 10 Apr 2023 09:15:57 +0000 (11:15 +0200)]
; Eliminate warning when `dired-map-over-marks` value is unused

* lisp/dired.el (dired-map-over-marks): Reformulate.

20 months agoUpdate manual about `sort`
Mattias Engdegård [Mon, 10 Apr 2023 08:25:11 +0000 (10:25 +0200)]
Update manual about `sort`

* doc/lispref/sequences.texi (Sequence Functions):
Remove inaccurate and over-specific claims about how `sort` works for
lists: there is no guarantee that it doesn't modify the `car` fields
of the input list (which is precisely what it does at this time).

20 months agoTweak file/dir creation in eglot-tests
Basil L. Contovounesios [Mon, 10 Apr 2023 09:23:06 +0000 (10:23 +0100)]
Tweak file/dir creation in eglot-tests

* test/lisp/progmodes/eglot-tests.el (eglot--make-file-or-dir):
Expand file name only once, under default-directory, avoiding
duplicate dir separators.  Ensure default-directory ends with a dir
separator.  Use with-temp-file.  (Bug#61637)

20 months agoSimplify let-bindings in eglot-tests
Basil L. Contovounesios [Sun, 9 Apr 2023 23:33:13 +0000 (00:33 +0100)]
Simplify let-bindings in eglot-tests

* test/lisp/progmodes/eglot-tests.el (eglot--call-with-fixture):
Don't allow fixture elements to be symbol-value pairs (bug#61637).
This feature was used in only one test.  The same effect can be
achieved in a simpler way, and closer to the body, with plain
let-bindings.
(eglot--with-fixture): Adapt docstring accordingly.
(eglot-test-ensure): Adapt c-mode-hook binding accordingly.
(eglot--cleanup-after-test): Remove symbol restoring logic.

20 months agoMinor eglot-tests cosmetics
Basil L. Contovounesios [Sun, 9 Apr 2023 23:18:15 +0000 (00:18 +0100)]
Minor eglot-tests cosmetics

* test/lisp/progmodes/eglot-tests.el:
(eglot--eldoc-on-demand, eglot--tests-force-full-eldoc)
(eglot-test-multiline-eldoc, eglot-test-rust-on-type-formatting)
(eglot-test-path-to-uri-windows): Fix headings, commentary, and
indentation (bug#61637).

20 months agoAvoid Git project in eglot-test-eclipse-connect
Basil L. Contovounesios [Sun, 9 Apr 2023 22:32:14 +0000 (23:32 +0100)]
Avoid Git project in eglot-test-eclipse-connect

* test/lisp/progmodes/eglot-tests.el (eglot-test-eclipse-connect):
Avoid creating a Git project, which subsequently confuses
project-files (bug#62741).

20 months agoTweak ert-remote-temporary-file-directory in tests
Basil L. Contovounesios [Sun, 9 Apr 2023 19:28:32 +0000 (20:28 +0100)]
Tweak ert-remote-temporary-file-directory in tests

* lisp/emacs-lisp/ert-x.el (ert-remote-temporary-file-directory):
Don't add trailing slash to HOME (bug#61637).  Reindent docstring.

20 months agoPacify byte-compiler warnings in nadvice-tests
Basil L. Contovounesios [Sat, 8 Apr 2023 16:18:06 +0000 (17:18 +0100)]
Pacify byte-compiler warnings in nadvice-tests

* test/lisp/emacs-lisp/nadvice-tests.el
(advice-test-called-interactively-p)
(advice-test-called-interactively-p-around)
(advice-test-called-interactively-p-filter-args)
(advice-test-call-interactively): Heed advertised-calling-convention
of called-interactively-p to pacify byte-compiler warnings.

20 months agoAdapt Tramp test
Michael Albinus [Sun, 9 Apr 2023 16:51:21 +0000 (18:51 +0200)]
Adapt Tramp test

* test/lisp/net/tramp-tests.el (tramp-test09-insert-file-contents):
Adapt test.

20 months agoExtend ignored-return-value warning to more functions (bug#61730)
Mattias Engdegård [Sun, 9 Apr 2023 13:57:31 +0000 (15:57 +0200)]
Extend ignored-return-value warning to more functions (bug#61730)

Warn when the return value of certain functions is unused.  Previously
this was only done for side-effect-free functions, and for `mapcar`.

These are functions where the return value is important for correct
usage or where ignoring it is likely to indicate a mistake.  The exact
set of functions is tentative and will be modified as we gain a better
understanding of which ones to include.

The current set comprises higher order functions such as `mapcar`
which are not primarily called for the effects of their function
arguments, and list-mutating functions like `nreverse` whose return
value is essential.

* lisp/emacs-lisp/bytecomp.el (byte-compile-form): Add list of
functions to warn about when their value is ignored.
* etc/NEWS: Announce.

20 months agoRemove unused values in effect context
Mattias Engdegård [Sun, 9 Apr 2023 13:27:28 +0000 (15:27 +0200)]
Remove unused values in effect context

* lisp/net/eudcb-mab.el (eudc-mab-query-internal):
* lisp/org/ob-core.el (org-babel-insert-result):
* lisp/progmodes/prolog.el (prolog-smie-forward-token)
(prolog-smie-backward-token):
Silence ignored-return-value warnings about calls to side-effect-free
functions in the last clause of `cond` statements whose values are
unused.

20 months agoAdjust side-effect-free declarations
Mattias Engdegård [Sun, 9 Apr 2023 11:54:17 +0000 (13:54 +0200)]
Adjust side-effect-free declarations

* lisp/emacs-lisp/byte-opt.el (side-effect-and-error-free-fns):
Add `eql` here.
* lisp/emacs-lisp/cl-macs.el (eql, cl-subst, cl-sublis):
Don't set the `side-effect-free` property here.
`cl-subst` and `cl-sublis` are not side-effect-free.
* lisp/emacs-lisp/cl-extra.el (cl-revappend):
Declare side-effect-free.
* lisp/emacs-lisp/cl-lib.el (cl-copy-list):
Declare side-effect-free and error-free.

20 months agoFix scoping error in Tramp
Michael Albinus [Sun, 9 Apr 2023 14:18:41 +0000 (16:18 +0200)]
Fix scoping error in Tramp

* lisp/net/tramp-sshfs.el (tramp-sshfs-handle-insert-file-contents):
Move result out of unwindform.

20 months ago; * test/src/fns-tests.el: Strengthen tests of `nreverse`.
Mattias Engdegård [Sun, 9 Apr 2023 08:57:43 +0000 (10:57 +0200)]
; * test/src/fns-tests.el: Strengthen tests of `nreverse`.

20 months ago* lisp/emacs-lisp/cl-extra.el (cl-parse-integer): side-effect-free.
Mattias Engdegård [Sun, 9 Apr 2023 08:45:43 +0000 (10:45 +0200)]
* lisp/emacs-lisp/cl-extra.el (cl-parse-integer): side-effect-free.

20 months agoUpdate gnus/nnselect marks only for current articles
Andrew G Cohen [Wed, 29 Mar 2023 06:05:59 +0000 (14:05 +0800)]
Update gnus/nnselect marks only for current articles

* lisp/gnus/nnselect.el (nnselect-push-info): Restrict updating of
marked articles to those whose headers have been retrieved, taking
care to handle 'tuples.

20 months agoCompute gnus/nnselect read articles from summary variables
Andrew G Cohen [Wed, 29 Mar 2023 02:23:06 +0000 (10:23 +0800)]
Compute gnus/nnselect read articles from summary variables

* lisp/gnus/nnselect.el (nnselect-push-info): The current list of read
articles should be computed from the summary buffer local variables,
not from the group info.

20 months agoDon't modify gnus group info when gnus-newsgroup-selection is nil
Andrew G Cohen [Tue, 28 Mar 2023 12:23:34 +0000 (20:23 +0800)]
Don't modify gnus group info when gnus-newsgroup-selection is nil

* lisp/gnus/nnselect.el (nnselect-push-info): Don't try to propagate
info to component groups if gnus-newsgroup-selection is nil.
* lisp/gnus/nnselect.el (nnselect-request-update-info): Don't update
the nnselect group info if gnus-newsgroup-selection is nil.

20 months agoKeep the gnus active range current while getting articles
Andrew G Cohen [Mon, 27 Mar 2023 01:37:55 +0000 (09:37 +0800)]
Keep the gnus active range current while getting articles

* lisp/gnus/gnus-group.el (gnus-group-get-new-news-this-group):
* lisp/gnus/gnus-group.el (gnus-get-unread-articles-in-group): Update
the current value of the active range since it might have changed.

20 months ago* lisp/gnus/nnselect.el (nnselect-request-article): Check car of thread
Andrew G Cohen [Tue, 28 Mar 2023 12:21:13 +0000 (20:21 +0800)]
* lisp/gnus/nnselect.el (nnselect-request-article): Check car of thread

20 months agoproject.el: Use project-name to calculate prefixed buffer name
Spencer Baugh [Sun, 9 Apr 2023 01:50:20 +0000 (04:50 +0300)]
project.el: Use project-name to calculate prefixed buffer name

* lisp/progmodes/project.el (project-prefixed-buffer-name):
Use project-name to calculate prefixed buffer name (bug#62548).
(project-compilation-buffer-name-function): Update doc.

20 months agoEglot: more work on eglot--sig-info (bug#62687)
João Távora [Sat, 8 Apr 2023 22:26:43 +0000 (23:26 +0100)]
Eglot: more work on eglot--sig-info (bug#62687)

Simplify function and now also consider individual parameter
documentation strings, which typescript-language-server seems to
provide.

* lisp/progmodes/eglot.el (eglot--sig-info): Rework.

20 months ago* etc/ERC-NEWS: Add section for ERC 5.6.
F. Jason Park [Sat, 10 Dec 2022 06:00:59 +0000 (22:00 -0800)]
* etc/ERC-NEWS: Add section for ERC 5.6.

20 months agoAllow erc-reuse-frames to favor connections
F. Jason Park [Sat, 21 May 2022 10:04:04 +0000 (03:04 -0700)]
Allow erc-reuse-frames to favor connections

* lisp/erc/erc.el (erc-reuse-frames): Add alternate value to favor
existing frames already displaying buffers from the same connection.
(erc--setup-buffer-first-window, erc--display-buffer-use-some-frame):
Add helpers to support 'display' variant of `erc-resuse-frames'
* test/lisp/erc/erc-tests.el (erc-tests--run-in-term,
erc-tests--servars, erc-reuse-frames, erc-tests--erc-reuse-frames,
erc-tests--erc-reuse-frames--t, erc-resuse-frames--t,
erc-tests--erc-reuse-frames--displayed-single,
erc-reuse-frames--displayed-single, erc-tests--assert-server-split,
erc-tests--erc-reuse-frames--displayed-double,
erc-reuse-frames--displayed-double,
erc-tests--erc-reuse-frames--displayed-full,
erc-reuse-frames--displayed-full): Add test case and supporting
fixtures.  (Bug#55540.)

20 months agoMake auth-source erc-services tests more readable
F. Jason Park [Fri, 25 Nov 2022 05:03:03 +0000 (21:03 -0800)]
Make auth-source erc-services tests more readable

* lisp/erc/erc-common.el: (erc-with-server-buffer): Modify slightly to
use `buffer-local-value' when possible.
* test/lisp/erc/erc-services-tests.el
(erc-services-tests--auth-source-plstore-standard-entries,
erc-services-tests--auth-source-plstore-standard-secrets): Remove
unused variables.
(erc-services-tests--auth-source-plstore-standard-announced): Add new
var to hold common plstore document.
(erc--auth-source-search--plstore-standard,
erc--auth-source-search--plstore-announced,
erc--auth-source-search--plstore-overrides): Use string literals for
text-document content.
(erc-services-tests--auth-source-json-standard-entries): Remove unused
variable.
(erc-services-tests--auth-source-json-standard-announced): Add new
variable.
(erc--auth-source-search--json-standard,
erc--auth-source-search--json-announced,
erc--auth-source-search--json-overrides): Use string literals for
text-document content.
(erc-services-tests--secrets-search-items): Add new helper function.
(erc--auth-source-search--secrets-standard,
erc--auth-source-search--secrets-announced,
erc--auth-source-search--secrets-overrides): Use helper to mock
`secrets-search-items' instead of misleading lambda.
* lisp/erc/erc-tests.el (erc-with-server-buffer): Add test.

20 months agoAdd erc-button helper for substituting command keys
F. Jason Park [Mon, 19 Dec 2022 03:01:40 +0000 (19:01 -0800)]
Add erc-button helper for substituting command keys

* lisp/erc/erc-button.el (erc-button-mode, erc-button-enable): Warn if
`erc-button-alist' contains deprecated FORM field in `nicknames'
entry.
(erc-button-alist): Discourage arbitrary sexp form for third item of
entries and offer more useful bounds-modifying function in its place.
Mention that anything other than `erc-button-buttonize-nicks' is
deprecated as the FORM field in a `nicknames' entry.  Bump
package-version even though this doesn't introduce a visible change in
the default value.
(erc-button--maybe-warn-arbitrary-sexp): Add helper for validating
third `erc-button-alist' field.
(erc-button--check-nicknames-entry): Add helper to check for
deprecated items in `erc-button-alist'.
(erc-button--preserve-bounds): Add function to serve as default value
for `erc-button--modify-nick-function).
(erc-button--modify-nick-function): Add new variable to hold a
function that filters nickname bounds when buttonizing.
(erc-button--phantom-users, erc-button--add-phantom-speaker,
erc-button--phantom-users-mode): Add new internal minor mode for
treating unseen speakers of PRIVMSGs as known members of the server
for things like coloring nicks during buffer playback.
(erc-button--get-user-from-speaker-naive): Add temporary utility
function to scrape nick from speaker in narrowed buffer.  This will be
replaced by an account-aware version in next major ERC release.
(erc-button-add-nickname-buttons): Accommodate function variant for
"form" field of `erc-button-alist' entries.  Minor optimizations.
This function will likely become the primary juncture for applying
text properties that support nickname-related user-intelligence
features.
(erc-button-add-buttons-1): Show warning when arbitrary sexp for third
"form" field encountered.  Accommodate binary function instead.
(erc-button--substitute-command-keys-in-region): Add helper function
for applying key substitutions in ERC warning messages.
(erc-button--display-error-notice-with-keys): Add new helper function
for displaying ad hoc warnings that possibly require key substitution.
(erc-button--display-error-notice-with-keys-and-warn): Add variant of
`erc-button--display-error-notice-with-keys' that also emits warnings.
* lisp/erc/erc-networks.el (erc-networks--ensure-announced,
erc-networks--on-MOTD-end): Use new key-substitutions helper from
erc-button.
* test/lisp/erc/erc-tests.el
(erc-button--display-error-notice-with-keys): New test.
* test/lisp/erc/resources/base/assoc/bouncer-history/foonet.eld: Add
unknown speaker in channel for phantom store to handle.  Currently
requires manual intervention to leverage.  (Bug#60933.)

20 months agoReplace Info-goto-node with info in erc-button-alist
F. Jason Park [Mon, 19 Dec 2022 03:01:40 +0000 (19:01 -0800)]
Replace Info-goto-node with info in erc-button-alist

* lisp/erc/erc-button.el (erc-button-alist): Replace `Info-goto-node'
with plain `info', which is autoloaded.  Expand regexp to recognize
inline `info' function calls.
* lisp/erc/erc-networks.el (erc-networks--set-name,
erc-networks--warn-on-connect): Don't require `info'.  (Bug#60933.)

20 months agoAdd erc-fill style based on visual-line-mode
F. Jason Park [Fri, 13 Jan 2023 08:00:56 +0000 (00:00 -0800)]
Add erc-fill style based on visual-line-mode

* lisp/erc/erc-fill.el (erc-fill-function): Add new value
`erc-fill-wrap'.
(erc-fill-static-center): Extend meaning of option to also affect
`erc-wrap-mode'.
(erc-fill--wrap-value, erc-fill--wrap-visual-keys): New variables to
support new local module.
(erc-fill-wrap-visual-keys): New option to control how and where
`visual-line-mode' keys are active.
(erc-fill-wrap-merge): Add option for omitting a speaker's name if
they just now spoke.  Enabled by default.
(erc-fill--wrap-move): New helper function for fill-wrap movement
commands.
(erc-fill--wrap-kill-line, erc-fill--wrap-beginning-of-line,
erc-fill--wrap-end-of-line): New movement commands.
(erc-fill-wrap-cycle-visual-movement): New command to cycle local
copy of `erc-fill-wrap-visual-keys'.
(erc-fill-wrap-mode-map): New keymap based on `visual-line-mode-map'.
(erc-fill--make-module-dependency-msg): Helper for
`erc-fill-wrap-enable'.
(erc-fill-wrap-mode, erc-fill-wrap-enable, erc-fill-wrap-disable): New
local module.
(erc-fill--wrap-length-function): Internal interface in the form of a
function variable for other modules to control the fill-wrap overhang.
(erc-fill--wrap-last-msg, erc-fill--wrap-max-lull,
erc-fill--wrap-continued-message-p): Add items to support hiding of
redundant speaker names in consecutive messages.
(erc-fill--wrap-stamp-insert-prefixed-date): New function to add
`line-prefix' property to inserted date stamp.
(erc-fill-wrap): New function implementing the
`erc-fill-function' (behavioral) interface.
(erc-fill--wrap-fix): New, possibly temporary function for other
modules to fix misalignment caused by fill-wrap.
(erc-fill-wrap-nudge, erc-fill--wrap-nudge): New command and helper
for growing and shrinking visual fill prefix.
* test/lisp/erc/erc-fill-tests.el: New file.  (Bug#60936.)
* test/lisp/erc/resources/fill/snapshots/merge-01-start.eld: New file.
* test/lisp/erc/resources/fill/snapshots/merge-02-right.eld: New file.
* test/lisp/erc/resources/fill/snapshots/monospace-01-start.eld: New file.
* test/lisp/erc/resources/fill/snapshots/monospace-02-right.eld: New file.
* test/lisp/erc/resources/fill/snapshots/monospace-03-left.eld: New file.
* test/lisp/erc/resources/fill/snapshots/monospace-04-reset.eld: New file.

20 months agoAdd variant for erc-match invisibility spec
F. Jason Park [Fri, 27 Jan 2023 13:34:56 +0000 (05:34 -0800)]
Add variant for erc-match invisibility spec

* lisp/erc/erc-match.el (erc-match-mode, erc-match-enable,
erc-match-disable): Arrange for possibly adding or removing
`erc-match' from `buffer-invisibility-spec'.
(erc-match--hide-fools-offset-bounds): Add new variable to serve as
switch for activating invisibility on a modified interval that's
offset toward `point-min' by one character.
(erc-hide-fools): Optionally offset start and end of invisible region
by minus one.
(erc-match--modify-invisibility-spec): New housekeeping function to
set up and tear down offset spec.  (Bug#60936.)

20 months agoConvert erc-fill minor mode into a proper module
F. Jason Park [Sun, 24 Apr 2022 09:38:12 +0000 (02:38 -0700)]
Convert erc-fill minor mode into a proper module

* lisp/erc/erc-fill.el (erc-fill-mode, erc-fill-enable,
erc-fill-disable): Use API to create these.
(erc-fill-static): Save restriction instead of caller's match
data.  (Bug#60936.)

20 months agoPut display properties to better use in erc-stamp
F. Jason Park [Wed, 24 Nov 2021 13:35:35 +0000 (05:35 -0800)]
Put display properties to better use in erc-stamp

* lisp/erc/erc-log.el (erc-log-filter-function): Add new value
`erc-stamp-prefix-log-filter'.
* lisp/erc/erc-stamp.el (erc-timestamp-use-align-to): Enhance meaning
of option to accept numeric value for dynamically aligned right-hand
stamps.  Use `graphic-display-p' to determine default value even
though, as stated in the manual, terminal Emacs also supports the
"space" display spec.
(erc-stamp-right-margin-width): New option to determine width of right
margin when `erc-stamp--display-margin-mode' is active or
`erc-timestamp-use-align-to' is set to `margin'.
(erc-stamp--display-margin-force): Add new helper function for
`erc-stamp--display-margin-mode'.
(erc-stamp--adjust-right-margin): New function to adjust width of
right margin.
(erc-stamp-prefix-log-filter): New value for `erc-log-filter-function'
compatible with modules that activate
`erc-stamp--display-margin-mode'.
(erc-stamp--display-margin-mode): Add internal minor mode to help
other modules quickly ensure left-right, display-prop-oriented stamps
are showing correctly.  Does not support left-hand-only stamps.
(erc-insert-aligned): Deprecate function and remove from primary
client code path.
(erc-stamp--inherited-props): Add internal constant to hold properties
that should be inherited from any stamp-bearing message being
inserted.
(erc-insert-timestamp-right): Account for new display-related values
of `erc-timestamp-use-align-to'.
* test/lisp/erc/erc-stamp-tests.el (erc-timestamp-use-align-to--nil,
erc-timestamp-use-align-to--t): Adjust spacing for new default
right-hand stamp, `erc-format-timestamp', which lacks a leading space.
(erc-timestamp-use-align-to--integer,
erc-timestamp-use-align-to--margin): New tests.  (Bug#60936.)

20 months agoMake some erc-stamp functions more limber
F. Jason Park [Wed, 24 Nov 2021 13:35:35 +0000 (05:35 -0800)]
Make some erc-stamp functions more limber

* lisp/erc/erc-stamp.el (erc-timestamp-format-right): Deprecate option
and change meaning of its nil value to fall through to
`erc-timestamp-format'.  Do this to allow modules to predict what the
right-hand stamp's final width will be.  This also saves
`erc-insert-timestamp-left-and-right' from calling
`erc-format-timestamp' again for every inserted message.
(erc-stamp-mode, erc-stamp-enable, erc-stamp-disable): Add
`erc-stamp--recover-on-reconnect' to `erc-mode-hook'.
(erc-stamp--recover-on-reconnect): Add function to reuse last values
of `erc-timestamp-last-inserted' and friends to avoid reprinting
stamps when reconnecting.
(erc-stamp--current-time): Add new generic function and method to
return current time.  Default to calling `erc-current-time'.  Also add
new internal variable of the same name to hold time value used to
construct formatted stamps passed to `erc-insert-timestamp-function'.
(erc-add-timestamp): Bind `erc-stamp--current-time' when calling
`erc-insert-timestamp-function'.
(erc-stamp--insert-date-function): New variable for modules to tweak
date-insertion.
(erc-insert-timestamp-left-and-right): Use STRING parameter and favor
it over the now deprecated `erc-timestamp-format-right' to avoid
formatting twice.  Also extract current time from the variable
`erc-stamp--current-time' for similar reasons.  And defer to
`erc-stamp--insert-date-function' to insert left stamp.  (Bug#60936.)
(erc-stamp--tz): New internal variable.
(erc-format-timestamp): Pass `erc-stamp--tz' as time-zone to
`format-time-string'.

20 months agoExpose insertion time as text prop in erc-stamp
F. Jason Park [Wed, 24 Nov 2021 11:10:20 +0000 (03:10 -0800)]
Expose insertion time as text prop in erc-stamp

* lisp/erc/erc-stamp.el (erc-add-timestamp): Add new text property
`erc-timestamp' to store lisp time object formerly ensconced in a
closure.  Instead of creating a new lambda for the cursor-sensor
function of each message in a buffer, leave a gap between messages to
trip the sensor function.  The motivation behind this change is to
allow third parties access to valuable timestamp data already stored
by ERC anyway.  Of secondary importance is discouraging the reliance
on those lambdas as a means of detecting message bounds.  The gap now
serves a similar purpose.  Basically, the final character in a
message, a newline, will not have a timestamp or a sensor function.
In the rare instance the stamps module isn't loaded, the new
`erc-command' property can be used for this purpose instead.  Also,
instead of looking for the `invisible' text property at point, which
is normally `point-max' and thus outside the accessible portion of the
buffer, look at the beginning of the inserted message.  This allows
hook members running before this function to opt out of timestamps by
marking a message as invisible.
(erc-echo-timestamp): Make interactive and show timestamps even when
the variable `erc-echo-timestamps' is nil.
(erc--echo-ts-csf): Add new function to serve as value of
cursor-sensor function text properties.
* test/lisp/erc/erc-stamp-tests.el: New file.  (Bug#60936.)

20 months agoAdjust some old text properties in ERC buffers
F. Jason Park [Thu, 16 Jun 2022 08:20:49 +0000 (01:20 -0700)]
Adjust some old text properties in ERC buffers

* lisp/erc/erc.el (erc-display-message): Replace `rear-sticky' text
property, which has been around since 2002, with a more useful
`erc-command' property.  It records the current IRC command as a
symbol or a number, in the case of numerics.
(erc--own-property-names, erc--remove-text-properties) Add variable
and internal helper function for filtering values returned by
`filter-buffer-substring-function'.
(erc-display-prompt): Make the `field' text property more meaningful
to aid in searching, although this makes the `erc-prompt' property
somewhat redundant.
(erc-put-text-property, erc-list): Alias these to subr functions.
(erc-restore-text-properties): Don't forget tags when restoring.
(erc--get-eq-comparable-cmd): New function to extract commands for use
as more easily searchable text-property values.  (Bug#60936.)

20 months agoRefactor marker initialization in erc-open
F. Jason Park [Tue, 24 Jan 2023 04:48:24 +0000 (20:48 -0800)]
Refactor marker initialization in erc-open

* lisp/erc/erc.el (erc--initialize-markers): New helper to ensure
prompt and its associated markers are set up correctly.
(erc-open): When determining whether a session is a logical
continuation, leverage the work already performed by the
`erc-networks' library to that effect.  Its verdicts are based on
network context and thus reliable even when a user dials anew from an
entry-point, which is not a simple reconnection because the user
expects a clean slate for everything except an existing buffer's
messages, meaning `erc--server-reconnecting' will be nil and
local-module state variables need resetting.  Also remove the check
for `erc-reuse-buffers' and instead trust that `erc-get-buffer-create'
always does the right thing.  Replace all code involving marker and
prompt setup by deferring to a new helper, `erc--initialize markers'.
* test/lisp/erc/erc-scenarios-base-local-module-modes.el: New file.
* test/lisp/erc/erc-scenarios-base-local-modules.el
(erc-scenarios-base-local-modules--mode-persistence): Move test to
separate file to help with parallel "-j" runs.
* test/lisp/erc/erc-tests.el (erc-tests--send-prep): Replace
redundant prompt-setup code.
(erc--initialize-markers): New test.  (Bug#60936.)

20 months agoPreserve ERC prompt and its bounding markers
F. Jason Park [Mon, 20 Feb 2023 05:33:36 +0000 (21:33 -0800)]
Preserve ERC prompt and its bounding markers

* lisp/erc/erc.el (erc--assert-input-bounds): Add possibly temporary
helper function to sync `process-mark' to `erc-insert-marker' in
server buffer.
(erc-display-line-1): Expect `erc-insert-marker' to always be
initialized.  Assert some essential invariants regarding insert
markers.
(erc-send-current-line): Delete typed input but not the prompt.
(erc-display-msg): Rework slightly to respect existing markers.
* test/lisp/erc/erc-dcc-tests.el
(erc-dcc-tests--dcc-handle-ctcp-send): Set insert marker.
* test/lisp/erc/erc-networks-tests.el
(erc-networks--rename-server-buffer--existing-live): Initialize
markers to appease `erc--assert-input-bounds'.
* test/lisp/erc/erc-tests.el (erc-ring-previous-command): Fix sloppy
mock.  (Bug#60936.)

20 months agoAdd option to show visual erc-keep-place indicator
F. Jason Park [Sat, 10 Dec 2022 06:00:59 +0000 (22:00 -0800)]
Add option to show visual erc-keep-place indicator

* lisp/erc/erc-goodies.el (erc-keep-place-indicator-style,
erc-keep-place-indicator-buffer-type,
erc-keep-place-indicator-follow): New options for anchoring kept place
visually.
(erc-keep-place-indicator-line, erc-keep-place-indicator-arrow): New
faces.
(erc--keep-place-indicator-overlay): New internal variable.
(erc--keep-place-indicator-on-window-configuration-change): New
function to subscribe to `window-configuration-change-hook' and maybe
update kept-place indicator.
(erc--keep-place-indicator-setup): New function to initialize buffer
for local module `keep-place-indicator'.
(erc-keep-place-indicator-mode, erc-keep-place-indicator-enable,
erc-keep-place-indicator-disable): New local ERC module.  Depends on
"parent" module `keep-place'.  Like `fill-wrap', this is (for now)
also deliberately left out of the widget menu for `erc-modules'.
(erc-keep-place-move, erc-keep-place-goto): Add new commands for
manually updating and jumping to keep-place indicator.
(erc-keep-place): Move `erc--keep-place-overlay' when applicable.
* test/lisp/erc/erc-goodies-tests.el (erc-keep-place-indicator-mode):
Add test.
(Bug#59943.)

20 months agoOptionally prompt for more ERC entry-point params
F. Jason Park [Thu, 29 Dec 2022 14:43:19 +0000 (06:43 -0800)]
Optionally prompt for more ERC entry-point params

* doc/misc/erc.texi: Update statement about availability of `:user'
keyword param when entry points called interactively.
* lisp/erc/erc/compat.el: Don't require `url-parse' when compiling.
Add forward declaration for `url-type'.
* lisp/erc/erc.el: Don't require `url-parse' when compiling.  Add
forward declarations for accessors of `url' struct from `url-parse'
library.
(erc-select-read-args): Allow optionally calling entry points with a
prefix arg to access params `user' and `:full-name'.
(erc-tls): Update doc string.
* test/lisp/erc/erc-tests.el (erc-select-read-args): Add test for
extra args.  (Bug#60428.)

20 months agoAdd display option for interactive ERC invocations
F. Jason Park [Thu, 29 Dec 2022 14:43:19 +0000 (06:43 -0800)]
Add display option for interactive ERC invocations

* lisp/erc/erc.el (erc-buffer-display, erc-receive-query-display):
Add aliases for `erc-join-buffer' and `erc-auto-query'.
(erc-interactive-display): Add new option to control display of server
buffers during interactive entry-point invocations.
(erc-select-read-args): Pass `erc-interactive-display' to entry
points.
* test/lisp/erc/erc-tests.el (erc-select-read-args): Expect
buffer-display values from `erc-interactive-display'.
(erc-tls, erc--interactive): Also check `erc-join-buffer' in
environment when `erc-open' called.  (Bug#60428.)

20 months agoBe smarter about switching to TLS from M-x erc
F. Jason Park [Thu, 29 Dec 2022 14:43:19 +0000 (06:43 -0800)]
Be smarter about switching to TLS from M-x erc

* lisp/erc/erc.el (erc--warn-unencrypted): Remove unused internal
function.
(erc-select-read-args): Offer to use TLS when user runs M-x erc and
opts for default server and port or provides the well-known IANA TLS
port or enters an ircs:// URL at the server prompt.  For the last two,
do this immediately instead of calling `erc-tls' interactively and
imposing a review of just-chosen values.  Also remove error warnings
and ensure `erc-tls' still works by setting
`erc-server-connect-function' to `erc-open-tls-stream' when
appropriate.  Include the word "URL" in server prompt.
(erc--with-entrypoint-environment): Add new macro for empowering an
entry point's interactive form to bind special variables in their
command's body without shadowing them in the lambda list.
(erc, erc-tls): Add internal keyword argument for interactive use, but
don't make it `keywordp' or advertise its presence.  Also use new
helper macro, `erc--with-entrypoint-environment', to temporarily bind
special vars given by interactive helper `erc-select-read-args'.
* test/lisp/erc/erc-tests.el (erc--with-entrypoint-environment): Add
new test.
(erc-select-read-args): Modify return values to expect additional
internal keyword argument where appropriate.
(erc-tls): Make assertions about environment.
(erc--interactive): New test.  (Bug#60428.)

20 months agoIgnore killed buffers when switching in erc-track
F. Jason Park [Wed, 4 Jan 2023 07:10:53 +0000 (23:10 -0800)]
Ignore killed buffers when switching in erc-track

* lisp/erc/erc-track.el (erc-track--switch-buffer): If the chosen
buffer has been killed, remove it from `erc-modified-channels-alist'
and try again.
* test/lisp/erc/erc-scenarios-misc.el
(erc-scenarios-base-kill-server-track): New test.  (Bug#60560.)

20 months agoFill doc strings for ERC modules
F. Jason Park [Tue, 17 Jan 2023 04:18:32 +0000 (20:18 -0800)]
Fill doc strings for ERC modules

* lisp/erc/erc-common.el (erc--fill-module-docstring): Add helper to
fill doc strings.
(erc--assemble-toggle, define-erc-module): Use helper to fill doc
string.
* test/lisp/erc/erc-tests.el (define-minor-mode--global,
define-minor-mode--local): Adjust expected output for generated doc
strings.  (Bug#60935.)

20 months agoWarn when customizing minor-mode vars for ERC modules
F. Jason Park [Sun, 15 Jan 2023 03:08:11 +0000 (19:08 -0800)]
Warn when customizing minor-mode vars for ERC modules

* lisp/erc/erc-common.el: (erc--inside-mode-toggle-p): Add global var
to inhibit mode toggles from being run by `erc-update-modules'.  It
must be non-nil inside custom-set functions for mode toggles created
by `define-erc-module'.
(erc--favor-changed-reverted-modules-state): Add new helper to show a
"SET" Custom state for `erc-modules' except when reverting to the
default value because \"STANDARD\" always takes precedence, as
explained somewhat in bug#12864.
(erc--assemble-toggle): Don't modify `erc-modules' when run from
custom-set function.
(erc--neuter-custom-variable-state): Add new function to serve as a
phony getter that deceives Customize into thinking the variable is
always set to its standard value.  The justification for this is that
toggling a module's minor mode in Customize has never worked and has
only sewn confusion in new users.  Without this hack, mode widgets
show a state of "CHANGED outside Customize", which alone is probably
preferable, except that they all end up toggled open, bringing them
unwanted attention and distracting the user.
(erc--tick-module-checkbox): Add helper to toggle the appropriate
checkbox in the `erc-modules' widget when a user interactively toggles
a minor-mode state variable.
(erc--prepare-custom-module-type): Create spec for minor-mode Custom
`:type', deferring various aspects until module-definition time.
(define-erc-module): Add `:get' and `:type' keywords to be passed to
`defcustom' definition for global modules.
* lisp/erc/erc.el (erc-modules): Inhibit `erc-update-modules' when run
from a minor-mode toggle's custom-set function.
* test/lisp/erc/erc-tests.el (define-erc-module--global,
define-erc-module--local): Update `erc-modules' mutations with
`erc--inside-mode-toggle-p' guard conditions.  (Bug#60935.)

20 months agoDon't associate ERC modules with undefined groups
F. Jason Park [Sun, 15 Jan 2023 03:05:59 +0000 (19:05 -0800)]
Don't associate ERC modules with undefined groups

* lisp/erc/erc-capab.el: Add property crutch to help ERC find module's
Custom group.
* lisp/erc/erc-common.el (erc--find-group): Add new function, a helper
for finding an existing ERC module's Custom group based on
`define-erc-module' params.  Prefer `group-documentation' as a
sentinel over symbol properties owned by Customize because they might
not be present if the group isn't yet associated with any custom
variables.
(define-erc-module): Set `:group' keyword value more accurately,
falling back to `erc' when no associated group has been defined.
* test/lisp/erc/erc-tests.el (erc--find-group, erc--find-group--real):
New tests.
(define-erc-module--global, define-erc-module--local): Expect the
`:group' keyword to be the unevaluated `erc--find-group'
form.  (Bug#60935.)

20 months agoConvert ERC's Imenu integration into proper module
F. Jason Park [Fri, 20 Jan 2023 05:07:27 +0000 (21:07 -0800)]
Convert ERC's Imenu integration into proper module

* lisp/erc/erc-goodies.el: Don't add Imenu hooks to `erc-mode-hook' at
top level.  Remove autoload for `erc-create-imenu-index' because it
already exists in the `erc-imenu' library.
(erc-imenu-setup): Move to the erc-imenu library.
* lisp/erc/erc-imenu.el (erc-unfill-notice): Allow modifications to
read-only text.  Thanks to Yusef Aslam for reporting this bug.
(erc-imenu-setup): Move here from goodies.
(erc-imenu--create-index-function): New helper var to hold previous
local value of `imenu-create-index-function'.  Perhaps advice should
be used instead, but a cursory search of the Emacs code base reveals
no such usage.
(erc-imenu-mode, erc-imenu-enable, erc-imenu-disable): Create "new"
ERC module for Imenu integration.
* lisp/erc/erc.el (erc-modules): Add `imenu' to default value and
create widget menu item.  Update package-version.
* test/lisp/erc/erc-tests.el (erc-tests--modules): Add
`imenu'.  (Bug#60954)

20 months agoAdd missing colors to erc-irccontrols-mode
F. Jason Park [Sat, 10 Jul 2021 03:03:51 +0000 (20:03 -0700)]
Add missing colors to erc-irccontrols-mode

* lisp/erc/erc-goodies.el (erc-spoiler-face): Add new face.
(erc--controls-additional-colors): Add remaining 16-99 colors.
(erc-get-bg-color-face, erc-get-fg-color-face): Look up extended
colors in table.
(erc-controls-remove-regexp, erc-controls-highlight-regexp): Convert
to `rx' forms and move above first use to eliminate intra-file forward
declarations.
(erc-controls-propertize): Support spoilers.
* test/lisp/erc/erc-goodies-tests.el: New file.  (Bug#60954.)

20 months agoModify erc-mode-map in module definitions
F. Jason Park [Fri, 20 Jan 2023 05:07:27 +0000 (21:07 -0800)]
Modify erc-mode-map in module definitions

* lisp/erc/erc-button.el (erc-button-mode, erc-button-enable,
erc-button-disable): Replace call to `erc-button-setup' with one to
`erc--modify-local-map'.  This means `erc-button-setup' is now dead
code from a client perspective.
* lisp/erc/erc-goodies.el (erc-irccontrols-enable,
erc-irccontrols-disable, erc-irccontrols-mode): Bind
`erc-toggle-interpret-controls' in module definition so it's only
available when the module is active.
* lisp/erc/erc-log.el (erc-log-mode, erc-log-enable, erc-log-disable):
Move top-level `define-key' into module definition.
* lisp/erc/erc-match.el (erc-match-mode, erc-match-enable,
erc-match-disable): Move top-level `define-key' into module
definition.
* lisp/erc/erc.el (erc-mode-map): Remove C-c C-c binding for
`erc-toggle-interpret-controls'.
(erc--modify-local-map): Add helper for global modules to use when
modifying `erc-mode-map'.
* test/lisp/erc/erc-tests.el (erc--modify-local-map): Add test.
Ensure modifications to `erc-mode-map' on loading `erc' and via
`erc-mode-hook' still work.  (Bug#60954.)

20 months agoDon't require erc-goodies in erc.el
F. Jason Park [Fri, 20 Jan 2023 05:07:27 +0000 (21:07 -0800)]
Don't require erc-goodies in erc.el

* lisp/erc/erc-goodies.el: Obviate the need for forward declarations
by requiring `erc'.  Add minor-mode autoloads for `scrolltobottom',
`readonly', `move-to-prompt', `keep-place', `noncommands',
`irccontrols', `smiley', and `unmorse'.  Add Local variables footer
with `generated-autoload-file'.
(erc-controls-strip): Autoload this function.
* lisp/erc/erc-ibuffer.el: Require `erc-goodies' for
`erc-control-interpret'.  The justification for the blanket `require'
is this module isn't a member of `erc-modules' by default.
* lisp/erc/erc-page.el: (erc-ctcp-query-PAGE): Require `erc-goodies'
and put forward declaration for `erc-control-interpret' atop file.
* lisp/erc/erc-speedbar.el: Require `erc-goodies' for the same reason
as erc-ibuffer.el.
* lisp/erc/erc.el: Remove `require' for `erc-goodies' at end of file
and `pp' at top of file because `pp-to-string' is autoloaded on Emacs
27.  Also remove `require's for `thingatpt', `time-date', and
`iso8601'.  They're all used sparingly and the latter two have only
been around for one major release, so their removal likely won't cause
much churn.  And `thingatpt' already has a call-site `require', so the
top-level one is redundant, but autoload `word-at-point' anyway for
the benefit of third-party libraries like `hl-nicks'.  Also wrap local
loaddefs `require' call in `eval-and-compile'.
(erc--read-time-period): Require dependencies.  (Bug#60954.)

20 months agoLeverage loaddefs for migrating ERC modules
F. Jason Park [Sat, 4 Feb 2023 14:24:59 +0000 (06:24 -0800)]
Leverage loaddefs for migrating ERC modules

* lisp/erc/erc-common.el (erc--features-to-modules,
erc--modules-to-features, erc--module-name-migrations): Remove unused
internal functions.
(erc--normalize-module-symbol): Make aware of new migration scheme
based on symbol properties.
* lisp/erc/erc-page.el: Add autoload cookie for module migration.
* lisp/erc/erc-pcomplete.el: Add autoload cookies for module
migration.
* lisp/erc/erc-services.el: Add autoload cookie for module migration.
* lisp/erc/erc-sound.el: Add autoload cookie for module migration.
* lisp/erc/erc-stamp.el: Add autoload cookie for module migration.
* lisp/erc/erc.el (erc-modules): Reorder default value, sorted by
`string<' so that Customize does not consider the value to have been
edited.  Remove non-existent module `hecomplete' from lineup and swap
a couple more to maintain sorted order.  Change `:initialize' function
to tag all symbols for built-in modules with an `erc--module'
property.  In the `:set' function, ensure third-party modules appear
after the sorted and normalized built-ins, but in user-defined order.
Do this to prevent all modules, built-ins included, from ending up as
populated form fields for the "other" checkbox in the Customize
interface.
(erc--find-mode): Add helper function for `erc--update-modules'.
(erc--update-modules): Always resolve module names and only
conditionally attempt to require corresponding features.
* test/lisp/erc/erc-tests.el (erc-tests--modules): Add manifest for
asserting built-in modules and features.  This is easier to verify
visually than looking at the custom-type set for `erc-modules'.
(erc-modules--initialize): New test.
(erc-modules--internal-property): Add test.
(erc--normalize-module-symbol): New test.
(erc--find-mode): New test.
(erc--update-modules) Adapt to new paradigm and make more
comprehensive.  (Bug#60954.)

20 months agoCopy over upstream Compat macros to erc-compat
F. Jason Park [Fri, 20 Jan 2023 04:52:47 +0000 (20:52 -0800)]
Copy over upstream Compat macros to erc-compat

* lisp/erc/erc-backend: (erc--get-isupport-entry): Replace call to
`erc-compat--with-memoization' with the built-in `with-memoization'.
* lisp/erc/erc-compat.el: (erc-compat-function, erc-compat-call): Add
new macros from Compat 29.1.2.0.
(erc-compat--with-memoization): Remove because it's now provided by
Compat.  (Bug#60954.)

20 months agoHonor arbitrary CHANTYPES in ERC
F. Jason Park [Sun, 19 Feb 2023 03:32:36 +0000 (19:32 -0800)]
Honor arbitrary CHANTYPES in ERC

* lisp/erc/erc.el (erc-channel-p): Favor "CHANTYPES" ISUPPORT item
before falling back to well known prefixes.
* test/lisp/erc/erc-tests.el (erc-channel-p): Add test.  Arbitrarily
bundled with bug#60954.

20 months agoAdd hook to regain nickname in ERC
F. Jason Park [Fri, 7 Apr 2023 01:41:06 +0000 (18:41 -0700)]
Add hook to regain nickname in ERC

* lisp/erc/erc-backend.el (erc-server-reconnect-timeout): Mention
`erc-nickname-in-use-functions' in doc string.
* lisp/erc/erc.el (erc-nickname-in-use-functions,
erc-regain-nick-on-connect): Add abnormal hook and possible value to
handle stale connections preventing a desired nick from being reissued
by the server.  Follows directly from bug#62044.
(erc-nickname-in-use): Call `erc-nickname-in-use-functions'.
* test/lisp/erc/erc-scenarios-base-renick.el
(erc-scenarios-base-renick-auto-regain): New test.
* test/lisp/erc/resources/base/renick/regain/normal-again.eld: New file.
* test/lisp/erc/resources/base/renick/regain/normal.eld: New file.

20 months agoAdd probing erc-server-reconnect-function variant
F. Jason Park [Wed, 8 Mar 2023 14:14:36 +0000 (06:14 -0800)]
Add probing erc-server-reconnect-function variant

* lisp/erc/erc-backend.el (erc-server-reconnect-timeout): Replace
questionable claim with recommendation for alternate value when
experiencing nick rejections.
(erc-server-reconnect-function): Add new, somewhat experimental value
`erc-server-delayed-check-reconnect'.
(erc--server-connect-function): Add variable for process-dialing
monitor, a function.
(erc--server-propagate-failed-connection): Add function to serve as
default monitor to run on process creation and maybe execute failure
handlers.
(erc-server-connect): Run `erc--server-connect-function' for async
processes one second after creation.
(erc--server-reconnect-timeout, erc--server-reconnect-timeout-check,
erc--server-reconnect-timeout-scale-function,
erc--server-reconnect-timeout-double): Add supporting variables and
functions for `erc-server-delayed-check-reconnect'.
(erc-server-delayed-check-reconnect): Add possible alternate value for
option `erc-server-reconnect-function' that only attempts to reconnect
after hearing back from the server.
(erc-schedule-reconnect): Ensure previous `erc-server-process' is
deleted.
* test/lisp/erc/erc-scenarios-base-auto-recon.el: New file.
* test/lisp/erc/resources/base/reconnect/just-eof.eld: New file.
* test/lisp/erc/resources/base/reconnect/just-ping.eld: New file.
* test/lisp/erc/resources/base/reconnect/ping-pong.eld: New file.
* test/lisp/erc/resources/base/reconnect/unexpected-disconnect.eld:
New file.
* test/lisp/erc/resources/erc-scenarios-common.el
(erc-scenarios-common--make-bindings): Shadow
`timer-list'.  (Bug#62044.)

20 months agoAdd MOTD command to ERC
F. Jason Park [Sat, 11 Mar 2023 17:25:24 +0000 (09:25 -0800)]
Add MOTD command to ERC

* lisp/erc/erc-backend.el (erc-server-402, erc-server-402-functions):
Add new response handler and hook.
* lisp/erc/erc.el (erc-cmd-MOTD): New function to shield erc-network
from handling post-connection MOTD replies.  Thanks to Emanuel Berg
for reporting this (bug#62151).
(erc-message-english-s402): Define new ERR_NOSUCHSERVER message
template.
* test/lisp/erc/erc-scenarios-base-misc-regressions.el: New file.
* test/lisp/erc/resources/base/commands/motd.eld: New file.

20 months agoSplit overlong outgoing messages in erc-sasl
F. Jason Park [Fri, 24 Mar 2023 07:16:56 +0000 (00:16 -0700)]
Split overlong outgoing messages in erc-sasl

* lisp/erc/erc-sasl.el: (erc-server-AUTHENTICATE): Account for
client messages exceeding 400 bytes.  (Bug#62421.)
* test/lisp/erc/erc-scenarios-sasl.el
(erc-scenarios-sasl--plain-overlong-split,
erc-scenarios-sasl--plain-overlong-aligned): Add tests.
* test/lisp/erc/resources/sasl/plain-overlong-aligned.eld: New file.
* test/lisp/erc/resources/sasl/plain-overlong-split.eld: New file.

20 months agoFix DCC GET flag parsing in erc-dcc
Daniel Pettersson [Sat, 25 Mar 2023 15:25:48 +0000 (16:25 +0100)]
Fix DCC GET flag parsing in erc-dcc

* lisp/erc/erc-dcc.el (erc-cmd-DCC): Tokenize raw input line but also
accommodate legacy invocation.
(pcomplete/erc-mode/DCC): Quote file names when suggesting.  Account
for double-hyphen "end-of-options"-like separator.
(erc-dcc-do-GET-command): Simplify signature, subsuming NICK in
variadic args, now ARGS instead of FILE, which changes the arity
from (2 . many) to (1 . many).  Explain usage in doc string.  Honor an
optional separator, "--", if present.  (Bug#62444.)
* test/lisp/erc/erc-dcc-tests.el (erc-dcc-do-GET-command): Call new
parameterized helper with various flag/file combinations.
(erc-dcc-tests--erc-dcc-do-GET-command): New fixture function.
(pcomplete/erc-mode/DCC--get-quoted,
pcomplete/erc-mode/DCC--get-sep): New tests.

20 months agoAdd subcommand erc-cmd-HELP handler to erc-dcc
F. Jason Park [Sat, 25 Mar 2023 16:13:40 +0000 (09:13 -0700)]
Add subcommand erc-cmd-HELP handler to erc-dcc

* lisp/erc/erc-compat.el (erc-compat--28-split-string-shell-command,
erc-compat--split-string-shell-command): New functions introduced in
Emacs 28 for splitting pcomplete input.
* lisp/erc/erc-dcc.el (erc-cmd-DCC): Elect to tokenize line specially.
(erc-dcc--cmd-help): Add help handler.  (Bug#62444.)

20 months agoAdd subcommand dispatch facility to erc-cmd-HELP
F. Jason Park [Sat, 25 Mar 2023 16:13:40 +0000 (09:13 -0700)]
Add subcommand dispatch facility to erc-cmd-HELP

* lisp/erc/erc.el (erc-cmd-HELP): Change signature by adding &rest
parameter.  Look for symbol property `erc--cmd-help' and, if found,
assume it's a function and call it with &rest args after attempting to
autoload the primary command symbol.  (Bug#62444.)

20 months agoChange ERC version to 5.6-git
F. Jason Park [Sat, 1 Apr 2023 02:42:54 +0000 (19:42 -0700)]
Change ERC version to 5.6-git

* lisp/erc/erc.el: Update main Version header and bump required Compat
to latest release in Package-Requires header.  Also update entry in
`customize-package-emacs-version-alist', mapping ERC 5.6 to Emacs
30.1.
(erc-version): Move to 5.6-git.

20 months agoEglot: simplify eglot--sig-info and fix edge cases (bug#62687)
João Távora [Sat, 8 Apr 2023 19:41:13 +0000 (20:41 +0100)]
Eglot: simplify eglot--sig-info and fix edge cases (bug#62687)

The documentation of each signature was rarely rendered because of
obsolete logic that skipped MarkupContent objects.

The new function follows the principle that echo are gets as little as
possible, while the *eldoc* buffer gets as much as possible (except,
for the individual parameter documentation, as I couldn't find a
single server that uses it).

Tested with clangd, pylsp, jdtls, gopls, rust-analyzer, zls.

* lisp/progmodes/eglot.el (eglot--sig-info): Simplify.

20 months agoConsolidate existing warnings about unused return values
Mattias Engdegård [Sat, 8 Apr 2023 17:17:17 +0000 (19:17 +0200)]
Consolidate existing warnings about unused return values

Move the warning about unused return values from calls to
side-effect-free functions from the source-level optimiser to the code
generator, where it can be unified with the special-purpose warning
about unused values from `mapcar`.  This change also cures spurious
duplicate warnings about the same code, makes the warnings amenable to
suppression through `with-suppressed-warnings`, and now warns about
some unused values that weren't caught before.

* lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker):
Move warning away from here.
* lisp/emacs-lisp/byte-run.el (with-suppressed-warnings):
* lisp/emacs-lisp/bytecomp.el (byte-compile-warnings):
Doc string updates.
(byte-compile-form): Put the new warnings here.
(byte-compile-normal-call): Move mapcar warning away from here.
* lisp/emacs-lisp/bytecomp.el (byte-compile-ignore):
Compile args to `ignore` for value to avoid unused-value warnings, and
then discard the generated values immediately thereafter.  Mostly this
does not affect the generated code but in rare cases it might result
in slightly worse code.
* test/lisp/emacs-lisp/bytecomp-tests.el
(bytecomp-test--with-suppressed-warnings): Adapt test.

20 months agoImprove ibuffer-diff-with-file
Basil L. Contovounesios [Sat, 1 Apr 2023 14:14:34 +0000 (15:14 +0100)]
Improve ibuffer-diff-with-file

* lisp/ibuf-ext.el (ibuffer-diff-with-file): Link to diff-command in
docstring.  Make Diff buffer read-only from outset and inhibit as
needed to avoid surprises.  Check whether diff-command
supports --label.  Leave point at BOB and clean up any excess
newline inserted by ibuffer-diff-buffer-with-file-1.  Prefer
pop-to-buffer-same-window over switch-to-buffer.

(ibuffer-diff-buffer-with-file-1): Add docstring.  Remove unused
unwind-protect and copypasta from diff-no-select (bug#62599).  Use
diff-file-local-copy, string-join, and redisplay in place of
analogues.  Condition --label use on availability, and label buffers
consistently with diff-no-select.  Leave empty line between runs.
Let diff-sentinel delete temporary files.  Leave point at EOB for
next run.

20 months agoEglot: fix problems after changes to eglot-imenu (bug#62718)
João Távora [Fri, 7 Apr 2023 22:00:44 +0000 (23:00 +0100)]
Eglot: fix problems after changes to eglot-imenu (bug#62718)

* lisp/progmodes/eglot.el (eglot--imenu-SymbolInformation)
(eglot--imenu-DocumentSymbol): Fix.

20 months agoEglot: version strings must start with numbers (bug#62718)
João Távora [Fri, 7 Apr 2023 21:47:15 +0000 (22:47 +0100)]
Eglot: version strings must start with numbers (bug#62718)

Even though Eglot is a :core ELPA package and as such is on a
different release cycle than Emacs proper, the version strings used in
'defcustom' and 'make-obsolete' must still follow the numeric format.

* lisp/progmodes/eglot.el (eglot-report-progress): Adjust :version.
(eglot-lsp-abiding-column)
(eglot-current-column)
(eglot-current-column-function)
(eglot-move-to-current-column)
(eglot-move-to-lsp-abiding-column)
(eglot-move-to-column-function)
(eglot-ignored-server-capabilites)
(eglot-manual)
(eglot--managed-mode-hook): Update "obsolete" spec.

20 months agoEglot: use Eglot versions, not Emacs's in obsolete specs
João Távora [Fri, 7 Apr 2023 18:54:57 +0000 (19:54 +0100)]
Eglot: use Eglot versions, not Emacs's in obsolete specs

* lisp/progmodes/eglot.el (eglot-report-progress): Adjust :version.
(eglot-lsp-abiding-column)
(eglot-current-column)
(eglot-current-column-function)
(eglot-move-to-current-column)
(eglot-move-to-lsp-abiding-column)
(eglot-move-to-column-function)
(eglot-ignored-server-capabilites)
(eglot-manual)
(eglot--managed-mode-hook): Update "obsolete" spec.

20 months agoEglot: require optional text-property-search.el
João Távora [Fri, 7 Apr 2023 18:45:28 +0000 (19:45 +0100)]
Eglot: require optional text-property-search.el

Originally reported in
https://github.com/joaotavora/eglot/discussions/1201.

Also check for text-property-search-forward before using it, so we
won't break on Emacs 26.3.  At this point, better start relying on
compat.el, I guess.

* lisp/progmodes/eglot.el (eglot--format-markup): Check for
text-property-search-forward.

20 months agoEglot: be careful about gfm-view-mode read-only buffers
João Távora [Fri, 7 Apr 2023 18:40:27 +0000 (19:40 +0100)]
Eglot: be careful about gfm-view-mode read-only buffers

Although in most situations this doesn't error, it's only because of
the very wide binding of inhibit-read-only in jsonrpc--process-filter.
That binding will soon be narrowed, so better not rely on it.

Originally reported in
https://github.com/joaotavora/eglot/discussions/1202.

* lisp/progmodes/eglot.el (eglot--format-markup): Inhibit
read-only before touching buffer potentially in gfm-view-mode.

20 months ago; Eglot: fix misplaced parenthesis in last commit to eglot-tests.el
João Távora [Fri, 7 Apr 2023 17:52:06 +0000 (18:52 +0100)]
; Eglot: fix misplaced parenthesis in last commit to eglot-tests.el

* test/lisp/progmodes/eglot-tests.el
(eglot-test-eldoc-after-completions): Fix misplaced parenthesis.

20 months ago; * test/src/comp-tests.el (61917-1): Underscore unused parameter.
Mattias Engdegård [Fri, 7 Apr 2023 17:19:58 +0000 (19:19 +0200)]
; * test/src/comp-tests.el (61917-1): Underscore unused parameter.

20 months agoRemove useless unwind-protect forms, or make them useful as intended
Mattias Engdegård [Fri, 7 Apr 2023 14:29:32 +0000 (16:29 +0200)]
Remove useless unwind-protect forms, or make them useful as intended

* lisp/imenu.el (imenu--generic-function):
* lisp/mail/yenc.el (yenc-decode-region):
* lisp/textmodes/table.el (table-recognize-region):
* test/lisp/dired-tests.el (dired-test-directory-files):
* test/lisp/hl-line-tests.el (hl-line-tests-sticky):
Fix unwind-protect bracketing mistakes that caused the unwind code to
be misplaced.
* lisp/strokes.el (strokes-read-stroke): Fix a bracketing mistake that
misplaced the unwind code, and another one that misplaced the
else-clause of an `if` form.
* test/lisp/gnus/mml-sec-tests.el (mml-secure-test-fixture): Fix a
bracketing mistake that misplaced the unwind code, and remove
superfluous condition-case.

* lisp/mwheel.el (mouse-wheel-global-text-scale):
* lisp/speedbar.el (speedbar-stealthy-updates)
(speedbar-fetch-dynamic-etags):
* lisp/emacs-lisp/edebug.el (edebug--recursive-edit):
* lisp/emacs-lisp/package.el (package--read-pkg-desc):
* lisp/cedet/semantic.el (semantic-refresh-tags-safe):
* lisp/emulation/viper-cmd.el (viper-escape-to-state):
* lisp/emulation/viper-cmd.el (viper-file-add-suffix):
* lisp/gnus/mail-source.el (mail-source-movemail):
* lisp/mail/feedmail.el (feedmail-send-it-immediately)
(feedmail-deduce-address-list):
* lisp/mail/mailclient.el (mailclient-send-it):
* lisp/mail/smtpmail.el (smtpmail-deduce-address-list):
* lisp/mh-e/mh-print.el (mh-ps-print-range):
* lisp/textmodes/reftex-index.el (reftex-index-this-phrase):
* test/lisp/emacs-lisp/ert-tests.el (ert-test-run-tests-batch):
(ert-test-run-tests-batch-expensive):
Remove unwind-protect forms that are apparently useless, some since a
prior edit that removed their purpose, some since their first
appearance.

* test/lisp/subr-tests.el (subr-test--frames-2):
Insert dummy unwind form in backtrace test code.

20 months ago* test/infra/Dockerfile.emba (emacs-eglot): Adapt software selection.
Michael Albinus [Fri, 7 Apr 2023 15:08:46 +0000 (17:08 +0200)]
* test/infra/Dockerfile.emba (emacs-eglot):  Adapt software selection.

20 months agoEglot: no more tests based on Pylsp (bug#62694)
João Távora [Fri, 7 Apr 2023 13:55:01 +0000 (14:55 +0100)]
Eglot: no more tests based on Pylsp (bug#62694)

The functionality under test in eglot.el is exactly the same, but use
the clangd server only, as that is used in more tests, and it is much
easier to check if it misbehaves or not.

Tests pass with clangd version 15.

* test/lisp/progmodes/eglot-tests.el (python): Don't require it.
(eglot--call-with-fixture): Simplify.
(eglot--wait-for-clangd): New helper.
(eglot-test-basic-completions)
(eglot-test-non-unique-completions, eglot-test-basic-xref)
(eglot-test-snippet-completions)
(eglot-test-snippet-completions-with-company)
(eglot-test-eldoc-after-completions, eglot-test-multiline-eldoc):
Use clangd, not pylsp.
(eglot-test-formatting): Renamed from
eglot-test-python-autopep-formatting.
(eglot-test-python-yapf-formatting): Remove.

20 months agoEglot: rework eglot-imenu
João Távora [Fri, 7 Apr 2023 11:54:39 +0000 (12:54 +0100)]
Eglot: rework eglot-imenu

Most newer servers return a vector of 'DocumentSymbol' as a response
to 'textDocument/documentSymbol'.  It's not worth trying to dumb this
down to imenu format of 'SymbolInformation' vectors.

This lays groundwork for the forthcoming "breadcrumb" feature of
bug#58431.

* lisp/progmodes/eglot.el
(eglot--imenu-SymbolInformation, eglot--imenu-DocumentSymbol): New
helpers.
(eglot-imenu): Rework.

20 months agoAvoid failing the build when org-version.el is updated
Eli Zaretskii [Thu, 6 Apr 2023 19:14:59 +0000 (22:14 +0300)]
Avoid failing the build when org-version.el is updated

* lisp/Makefile.in: Force recompilation of all Org files when
org-version.el is updated with a new Org version.

20 months agoMerge from origin/emacs-29
Eli Zaretskii [Thu, 6 Apr 2023 18:38:20 +0000 (14:38 -0400)]
Merge from origin/emacs-29

305246d9726 Add emoji-zoom-reset
470d269ec1f Make emoji-zoom-{increase,decrease} set text properties c...
63d4a86f8d1 Fix transforming sliced images
5e1953a8f85 ; * etc/NEWS: Minor copyedits of entry for 'keymap-*' fun...
6b9f9df9454 ; Improve documentation of 'declare-function'
81d1f46d0fe ; Avoid compiler warning in eglot.el.
38cdfcb2128 ; Fix description of new 'keymap-*' functions
257090b8728 Adapt EMBA scripts.
90c07d3fdd2 Another terminology fix in ELisp reference manual
a832bc7090c Correct terminology in Elisp Reference Manual
db308233cb3 Comment out GNUSTEP jobs on EMBA (again)
8c1b1022439 ; * lisp/image.el (put-image): Doc fix.
eda88c63adf ; * doc/emacs/trouble.texi (Checklist): Minor grammar fix.
728bc09cf3c Fix regexp string escaping mistake in vhdl-mode.el (bug#6...
479626dbac9 Update to Org 9.6.3-2-gf2949d
5a1c9aace70 ; Add a bit more docstring to tsx-ts-mode (bug#62429)
86cf9fd932c Eglot: don't watch directories that don't exist
82d0b6c64ea ; * lisp/subr.el (use-dialog-box-p): Fix last change.
3619663f982 Preserve peer information for web page in eww-readable
cb8d6ab648f * lisp/subr.el (use-dialog-box-p): Fix conditions for GUI...
fb2c4409207 ; * lisp/progmodes/c-ts-mode.el (c++-ts-mode): Add some n...

# Conflicts:
# etc/NEWS

20 months ago; Merge from origin/emacs-29
Eli Zaretskii [Thu, 6 Apr 2023 18:38:16 +0000 (14:38 -0400)]
; Merge from origin/emacs-29

The following commit was skipped:

89e337c3fc9 ; Make sure 'eshell-command' tests don't prompt the user

20 months agoMerge from origin/emacs-29
Eli Zaretskii [Thu, 6 Apr 2023 18:38:13 +0000 (14:38 -0400)]
Merge from origin/emacs-29

b39c3cd1125 ; * etc/NEWS: Fix typos.
89ac5ba11c7 Fix ModelSim error regexp in vhdl-mode
24ed9c7ae78 ; * doc/emacs/trouble.texi (Checklist): Minor copyedits (...
d1d39a0f09c Document enhancements in handling of echo-area messages

# Conflicts:
# etc/NEWS

20 months ago; Merge from origin/emacs-29
Eli Zaretskii [Thu, 6 Apr 2023 18:38:04 +0000 (14:38 -0400)]
; Merge from origin/emacs-29

The following commits were skipped:

46209b2453b ; Fix last change
21a4ee209c1 Fix new Eshell tests on MS-Windows
e2ebf3995d0 ; Auto-commit of loaddefs files.
6419d78fa6f Fix using background commands in 'eshell-command'

20 months agoDescribe how to run Emba tests locally
Michael Albinus [Thu, 6 Apr 2023 14:31:49 +0000 (16:31 +0200)]
Describe how to run Emba tests locally

* admin/notes/emba: Describe how to run Emba tests locally.

* test/infra/Dockerfile.emba (emacs-eglot):  Adapt software selection.

20 months agoAdd emoji-zoom-reset
Robert Pluim [Wed, 5 Apr 2023 15:24:38 +0000 (17:24 +0200)]
Add emoji-zoom-reset

* lisp/international/emoji.el (emoji-zoom-map): Add emoji-zoom-reset.
(emoji-zoom-reset): New function, it resets the zoom level.
* lisp/international/mule-cmds.el (ctl-x-map): Add emoji-zoom-reset.
* etc/NEWS: Announce new command.

20 months agoMake emoji-zoom-{increase,decrease} set text properties correctly
Robert Pluim [Wed, 5 Apr 2023 13:19:13 +0000 (15:19 +0200)]
Make emoji-zoom-{increase,decrease} set text properties correctly

* lisp/international/emoji.el (emoji-zoom-increase): Ensure that we're
increasing the :height of the anonymous face at point, rather than
having two :height properties, which appeared to work by
accident, and don't error at eob.  (Bug#62675)

20 months agoRestore positions reliably for abbreviated file names in saveplace.el
Liu Hui [Tue, 4 Apr 2023 01:13:32 +0000 (09:13 +0800)]
Restore positions reliably for abbreviated file names in saveplace.el

* lisp/saveplace.el (save-place-abbreviate-file-names): Add setter
function for rewriting `save-place-alist'.  Update docstring.
(save-place-to-alist): Save Abbreviated dired-filename.
(save-place-load-alist-from-file): Move this function above
`save-place-abbreviate-file-names' since it is used in the :set
function.
(save-place-find-file-hook):
(save-place-dired-hook): Use abbreviated file name when
`save-place-abbreviate-file-names' is non-nil.
(Bug#62413)

20 months agoHandle electric heredocs pairs in elixir-ts-mode
Wilhelm H Kirschbaum [Sun, 2 Apr 2023 07:43:20 +0000 (09:43 +0200)]
Handle electric heredocs pairs in elixir-ts-mode

* lisp/progmodes/elixir-ts-mode.el
(elixir-ts--electric-pair-string-delimiter): New helper.
(elixir-ts-mode): Add post-self-insert-hook.  (Bug#62536)

20 months agoPropertize heredocs in elixir-ts-mode
Wilhelm H Kirschbaum [Tue, 21 Mar 2023 14:34:48 +0000 (16:34 +0200)]
Propertize heredocs in elixir-ts-mode

* lisp/progmodes/elixir-ts-mode.el
(elixir-ts--syntax-propertize-query): New variable.
(elixir-ts--syntax-propertize): New helper.
(elixir-ts-mode): Set syntax-propertize-function.  (Bug#62536)

20 months agoFix transforming sliced images
Eli Zaretskii [Thu, 6 Apr 2023 09:35:17 +0000 (12:35 +0300)]
Fix transforming sliced images

* lisp/image.el (image--get-image): Support sliced images
(bug#62679).  Doc fix.
(image-mouse-decrease-size, image-mouse-increase-size)
(image-decrease-size, image-increase-size): Doc fixes.

20 months agoCC Mode: Miscellaneous coding fixes in c-forward-type
Alan Mackenzie [Thu, 6 Apr 2023 09:14:56 +0000 (09:14 +0000)]
CC Mode: Miscellaneous coding fixes in c-forward-type

This fixes bug #62339.

* lisp/progmodes/cc-engine.el (c-forward-type): In the implicit int handling,
respect the setting of the parameter stop-at-end.  In the case "normal
identifier", insert a missing (c-forward-syntactic-ws); this fixes the bug.
Here, correct the wrong return value `prefix' to t.

20 months ago; Fix compiler warning
Po Lu [Thu, 6 Apr 2023 02:06:28 +0000 (10:06 +0800)]
; Fix compiler warning

* src/xterm.c (x_term_init): Fix:

"xterm.c", line 30759: warning: improper pointer/integer
combination: op "="

20 months agoComp: Fix limplification pass (bug#62537)
Andrea Corallo [Wed, 5 Apr 2023 16:17:58 +0000 (18:17 +0200)]
Comp: Fix limplification pass (bug#62537)

* test/src/comp-resources/comp-test-funcs.el (comp-test-62537-1-f)
(comp-test-62537-2-f): New functions.

* lisp/emacs-lisp/comp.el (comp-jump-table-optimizable): Make it
stricter add a comment.

20 months ago; * etc/NEWS: Minor copyedits of entry for 'keymap-*' functions.
Eli Zaretskii [Wed, 5 Apr 2023 13:50:58 +0000 (16:50 +0300)]
; * etc/NEWS: Minor copyedits of entry for 'keymap-*' functions.

20 months agoCC Mode: Fix fontification problems shown by test file templates-20.cc
Alan Mackenzie [Wed, 5 Apr 2023 13:02:12 +0000 (13:02 +0000)]
CC Mode: Fix fontification problems shown by test file templates-20.cc

Also fix one problem evident in test file decls-10.cc.

* lisp/progmodes/cc-engine.el (c-brace-stack-at): Bind
c-record-type-identifiers to nil to prevent called functions recording
identifiers spuriously.
(c-forward-<>-arglist-recur): Revert the ill-advised optimization from autumn
2022 which attempted to avoid re-marking c-type text properties inside angle
bracket arglists.
(c-forward-decl-or-cast-1): Accept the semicolon at the end of "t8 * id;" as
sufficient evidence to fontify as a declaration (not a multiplication).

* lisp/progmodes/cc-fonts.el (c-font-lock-c++-using): No longer fontify the
last component of foo::bar with c-reference-face-name.

20 months ago; Improve documentation of 'declare-function'
Eli Zaretskii [Wed, 5 Apr 2023 09:31:01 +0000 (12:31 +0300)]
; Improve documentation of 'declare-function'

* doc/lispref/functions.texi (Declaring Functions):
* lisp/subr.el (declare-function): Document explicitly that
ARGLIST argument, if provided, should include the parentheses.

20 months ago; Avoid compiler warning in eglot.el.
Eli Zaretskii [Wed, 5 Apr 2023 09:23:54 +0000 (12:23 +0300)]
; Avoid compiler warning in eglot.el.

20 months ago; Fix description of new 'keymap-*' functions
Eli Zaretskii [Wed, 5 Apr 2023 08:31:15 +0000 (11:31 +0300)]
; Fix description of new 'keymap-*' functions

* doc/lispref/keymaps.texi (Prefix Keys): Fix example (bug#62673).
(Functions for Key Lookup): Clarify the possible values of KEYMAP
argument of 'keymap-lookup'.
(Active Keymaps): Fix typo in function name; add cross-reference.

20 months agoImprove sigil fontification for elixir-ts-mode
Wilhelm H Kirschbaum [Sun, 2 Apr 2023 09:28:27 +0000 (11:28 +0200)]
Improve sigil fontification for elixir-ts-mode

* lisp/progmodes/elixir-ts-mode.el:
(elixir-ts--font-lock-settings): Update sigil queries.

20 months agoImprove list indentation for elixir-ts-mode
Wilhelm H Kirschbaum [Sun, 2 Apr 2023 09:26:02 +0000 (11:26 +0200)]
Improve list indentation for elixir-ts-mode

* lisp/progmodes/elixir-ts-mode.el:
(elixir-ts--argument-indent-offset): Add empty line check.
(elixir-ts--argument-indent-anchor): Change ERROR offset.
* test/lisp/progmodes/elixir-ts-mode-resources/indent.erts:
Add test.

20 months agoruby-ts-mode: Add more constructs to treesit-sexp-type-regexp
Dmitry Gutov [Wed, 5 Apr 2023 00:00:57 +0000 (03:00 +0300)]
ruby-ts-mode: Add more constructs to treesit-sexp-type-regexp

* lisp/progmodes/ruby-ts-mode.el (ruby-ts-mode): Add more
constructs to treesit-sexp-type-regexp (bug#62086).