emacs/test/lisp/erc/resources/base/send-message/noncommands.eld
F. Jason Park 174b3dd9bd Make nested input handling more robust in ERC
* lisp/erc/erc.el (erc--send-action-function): New function-valued
variable for locally advising `erc-send-action' so that built-in
modules can elect to handle insertion and sending themselves.
(erc-send-action): Defer to `erc--send-action-function'.
(erc--send-action-perform-ctcp): Isolate the message-sending business
for CTCP ACTIONs that used to reside in `erc-send-action'.
(erc--send-action-display): Isolate the message-insertion business
formerly residing in `erc-send-action' for more granular use.  Fix a
minor bug involving inserted representations of CTCP ACTIONs not
having `erc-my-nick-face' applied to the speaker.
(erc--send-action): Perform the same displaying and sending of CTCP
ACTION messages formerly handled by `erc-send-action', but display
messages before sending them.
(erc--current-line-input-split): New variable bound to the post-review
`erc--input-split' object for the extent of display processing.  This
mainly benefits slash-command handlers and the utility functions they
employ, such as `erc-send-message'.
(erc-cmd-SAY): Defer to `erc--send-message'.
(erc--send-message-nested-function): New function-valued variable
supporting an internal interface for influencing how
`erc-send-message' inserts and sends prompt input.  Some handlers for
slash commands, like /SV, use `erc-send-message' to perform their own
insertion and sending, which is normally the domain of
`erc-send-current-line'.  When this happens, modules can't easily
leverage the normal hook-based API to do things like suppress
insertion but allow sending or vice-versa.  This variable provides an
internal seam for modules to exert such influence.
(erc-send-message): Behave specially when called by the default
interactive client via `erc-send-current-line' and friends.
(erc--send-message-external): New function to house the former body of
`erc-send-message', for third-party code needing to apply the
traditional behavior.
(erc--send-message-nested): New function for turning arbitrary text,
such as replacement prompt input, into outgoing message text by doing
things like ensuring "send" hooks run and invariants for prompt
markers are preserved.
(erc--make-input-split): New helper function for creating a standard
`erc--input-split' object from a string.  This is arguably less
confusing than adding another constructor to the struct definition.
(erc-send-current-line): Bind `erc--current-line-input-split' when
dispatching prompt-input handlers.  Use helper `erc--make-input-split'
to initialize working `erc--input-split' state object.
(erc--run-send-hooks): Honor existing `refoldp' slot from
`erc--input-split' object.
(erc--send-input-lines): Convert to generic function to allow modules
control over fundamental insertion and sending operations, which is
necessary for next-generation features, like multiline messages.
(erc-modes): Don't output non-modules.  That is, only list actual
modules created via `define-erc-module', and `quote' members of the
resulting list.
* test/lisp/erc/erc-scenarios-base-send-message.el: New test file.
* test/lisp/erc/resources/base/send-message/noncommands.eld: New data
file.  (Bug#67031)
2023-11-12 20:37:48 -08:00

52 lines
3.4 KiB
Text

;; -*- mode: lisp-data; -*-
((nick 10 "NICK tester"))
((user 10 "USER user 0 * :tester")
(0.00 ":irc.foonet.org 001 tester :Welcome to the foonet IRC Network tester")
(0.01 ":irc.foonet.org 002 tester :Your host is irc.foonet.org, running version ergo-v2.11.1")
(0.01 ":irc.foonet.org 003 tester :This server was created Sun, 12 Nov 2023 17:40:20 UTC")
(0.01 ":irc.foonet.org 004 tester irc.foonet.org ergo-v2.11.1 BERTZios CEIMRUabefhiklmnoqstuv Iabefhkloqv")
(0.00 ":irc.foonet.org 005 tester AWAYLEN=390 BOT=B CASEMAPPING=ascii CHANLIMIT=#:100 CHANMODES=Ibe,k,fl,CEMRUimnstu CHANNELLEN=64 CHANTYPES=# CHATHISTORY=1000 ELIST=U EXCEPTS EXTBAN=,m FORWARD=f INVEX :are supported by this server")
(0.02 ":irc.foonet.org 005 tester KICKLEN=390 MAXLIST=beI:60 MAXTARGETS=4 MODES MONITOR=100 NETWORK=foonet NICKLEN=32 PREFIX=(qaohv)~&@%+ STATUSMSG=~&@%+ TARGMAX=NAMES:1,LIST:1,KICK:,WHOIS:1,USERHOST:10,PRIVMSG:4,TAGMSG:4,NOTICE:4,MONITOR:100 TOPICLEN=390 UTF8ONLY WHOX :are supported by this server")
(0.01 ":irc.foonet.org 005 tester draft/CHATHISTORY=1000 :are supported by this server")
(0.01 ":irc.foonet.org 251 tester :There are 0 users and 4 invisible on 1 server(s)")
(0.01 ":irc.foonet.org 252 tester 0 :IRC Operators online")
(0.01 ":irc.foonet.org 253 tester 0 :unregistered connections")
(0.01 ":irc.foonet.org 254 tester 2 :channels formed")
(0.01 ":irc.foonet.org 255 tester :I have 4 clients and 0 servers")
(0.01 ":irc.foonet.org 265 tester 4 4 :Current local users 4, max 4")
(0.01 ":irc.foonet.org 266 tester 4 4 :Current global users 4, max 4")
(0.02 ":irc.foonet.org 422 tester :MOTD File is missing")
(0.00 ":irc.foonet.org 221 tester +i")
(0.01 ":irc.foonet.org NOTICE tester :This server is in debug mode and is logging all user I/O. If you do not wish for everything you send to be readable by the server owner(s), please disconnect."))
((mode-tester 10 "MODE tester +i"))
((join-chan 10 "JOIN #chan")
(0.00 ":irc.foonet.org 221 tester +i")
(0.01 ":tester!~u@ggpg6r3a68wak.irc JOIN #chan")
(0.03 ":irc.foonet.org 353 tester = #chan :@fsbot bob alice tester")
(0.01 ":irc.foonet.org 366 tester #chan :End of NAMES list")
(0.00 ":bob!~u@cjn7mjwx57gbi.irc PRIVMSG #chan :tester, welcome!")
(0.01 ":alice!~u@cjn7mjwx57gbi.irc PRIVMSG #chan :tester, welcome!"))
((mode-chan 10 "MODE #chan")
(0.00 ":irc.foonet.org 324 tester #chan +Cnt")
(0.02 ":irc.foonet.org 329 tester #chan 1699810829")
(0.01 ":alice!~u@cjn7mjwx57gbi.irc PRIVMSG #chan :bob: To prove him false that says I love thee not.")
(0.02 ":bob!~u@cjn7mjwx57gbi.irc PRIVMSG #chan :alice: For hands, to do Rome service, are but vain."))
((privmsg-action 10 "PRIVMSG #chan :\1ACTION sad\1")
(0.07 ":alice!~u@cjn7mjwx57gbi.irc PRIVMSG #chan :bob: Spotted, detested, and abominable."))
((privmsg-me 10 "PRIVMSG #chan :/me sad")
(0.03 ":bob!~u@cjn7mjwx57gbi.irc PRIVMSG #chan :Marcus, my brother! 'tis sad Titus calls."))
((privmsg-sv 10 "PRIVMSG #chan :I'm using ERC " (+ (not " ")) " with GNU Emacs")
(0.07 ":bob!~u@cjn7mjwx57gbi.irc PRIVMSG #chan :alice: You still wrangle with her, Boyet, and she strikes at the brow."))
((privmsg-sm 10 "PRIVMSG #chan :I'm using the following modules: `erc-autojoin-mode', ")
(0.04 ":alice!~u@cjn7mjwx57gbi.irc PRIVMSG #chan :No, not till Thursday; there is time enough."))
((quit 10 "QUIT :\2ERC\2")
(0.05 ":tester!~u@ggpg6r3a68wak.irc QUIT :Quit: \2ERC\2 5.x (IRC client for GNU Emacs)")
(0.02 "ERROR :Quit: \2ERC\2 5.x (IRC client for GNU Emacs)"))