summary refs log tree commit diff
path: root/chat.h
AgeCommit message (Collapse)Author
2022-09-11Remove WHO reply handlersJune McEnroe
2022-09-11Generate /ops from cacheJune McEnroe
2022-09-11Set pointer to Entry in CursorJune McEnroe
This feels a little redundant but the API makes sense, I think?
2022-08-02Track prefix bitsJune McEnroe
2022-07-31Move cache color to an Entry structJune McEnroe
So that more values can be added sensibly.
2022-07-30Rename cache{Prefix,Substr} to cache{Complete,Search}June McEnroe
2022-07-30Switch to cache interfacesJune McEnroe
2022-07-30"Rename" complete to cache, refactor interfacesJune McEnroe
2022-07-30Update copyrights, authorsJune McEnroe
2022-05-29Allow setting fallback nicks and highlight on anyJune McEnroe
As a side-effect, even with only one nick set you'll still be highlighted by it even if your current nick is different.
2022-02-20Save input buffer contentsJune McEnroe
2022-02-20Show indicator in status when window has pending inputJune McEnroe
2022-02-19Reimplement text macrosJune McEnroe
2022-02-19Factor out input handling to input.cJune McEnroe
2022-02-19Factor out window management to window.cJune McEnroe
2022-02-18Implement new line editing "library"June McEnroe
Losing tab complete and text macros, for now. This new implementation works on an instance of a struct and does not interact with the rest of catgirl, making it possible to copy into another project. Unlike existing line editing libraries, this one is entirely abstract and can be rendered externally. My goal with this library is to be able to implement vi mode. Since it operates on struct instances rather than globals, it might also be possible to give catgirl separate line editing buffers for each window, which would be a nice UX improvement.
2022-02-12Prompt for empty server or SASL passwordsJune McEnroe
2021-10-16Import refactored xdg.c from pounceC. McEnroe
2021-09-20Request znc.in/self-message if availableC. McEnroe
catgirl correctly handles receiving "self-messages". pounce always sends them. [1]: https://wiki.znc.in/Query_buffers [2]: https://defs.ircdocs.horse/info/selfmessages.html
2021-08-26Match id names case-insensitivelyC. McEnroe
This fixes the case where an IRCd does not normalize channel names, e.g. PRIVMSG #TEST is relayed as-is, rather than as #test or whatever the canonical casing of the channel name is. It also fixes the case of opening a query window with incorrect case, e.g. /query nickserv. However, this solution is only completely correct when CASEMAPPING=ascii.[1] I do not think the extra mappings of CASEMAPPING=rfc1459 are relevant enough to justify adding the code to handle it. [1]: https://modern.ircdocs.horse/#casemapping-parameter
2021-07-20Add -q/quiet option to raise default message visibility thresholdKlemens Nanni
Silencing all windows with `M-+' (across multiple catgirl instances) can be cumbersome, so provide an option to hide events, JOIN/PART noise, etc. by default (each window's threshold will persist across load/save cycles, i.e. when using the `-s/save' option). Started out as `-v | visibility = threshold' to set a specific level, the idea of a simpler toggle comes from june, who also squashed other bugs (as usual).
2021-07-13Perform TLS handshake after final pledgeKlemens Nanni
ircConnect() yields a connected TCP socket after which "inet dns" is no longer needed. Possibly having loaded private key material, it seems a tad more comforting to speak TLS *after* dropping any network capabilities (except for socket read/write to the IRC host, of course). Instead of moving the final pledge into irc.c:ircConnect() and thus complicating the code around pledge across two C modules, simply stub out an mnemonic ircHandshake() and call that explicitly. This restores behaviour gained with 981ebc4 "Remove explicit tls_handshake(3) from ircConnect" which was reverted for other reasons.
2021-07-02Save invited channel for /joinC. McEnroe
2021-06-25Keep log directory open, use mkdirat(2) and openat(2)C. McEnroe
2021-06-20OpenBSD: Only unveil used directoriesKlemens Nanni
dataMkdir() already picked the appropiate directory so make it return that such that unveilData() can go as only that one directory needs unveiling.
2021-06-18Add -m mode option to set user modesC. McEnroe
2021-06-17Match windows by substring in /windowC. McEnroe
This could just iterate over idNames instead, but using complete means more recently used windows will match first.
2021-06-11Open save file once in uiLoad() and keep it open until uiSave()Klemens Nanni
Opening the same file *path* twice is a TOCTOU, although not a critical one: worst case we load from one file and save to another - the impact depends on how and when catgirl is started the next anyway. More importantly, keeping the file handle open at runtime allows us to drop all filesystem related promises for `-s/save' on OpenBSD. uiLoad() now opens "r+", meaning "Open for reading and writing." up front so uiSave() can write to it. In the case of a nonexistent save file, it now opens with "w" meaning "Open for writing. The file is created if it does not exist.", i.e. the same write/create semantics as "w" except uiLoad() no longer truncates. existing files. uiSave() now truncates the save file to avoid appending in general.
2021-06-09Avoid creating out-of-bounds pointer when checking for seprintf truncationMichael Forney
It is technically undefined behavior (see C11 6.5.6p8) to construct a pointer more than one past the end of an array. To prevent this, compare n with the remaining space in the array before adding to ptr.
2021-06-09Remove catfC. McEnroe
2021-06-09Replace catf with seprintfC. McEnroe
2021-06-09Add seprintfC. McEnroe
Based on seprint(2) from Plan 9. I'm not sure if my return value exactly matches Plan 9's in the case of truncation. seprint(2) is described only as returning a pointer to the terminating '\0', but if it does so even in the case of truncation, it is awkward for the caller to detect. This implementation returns end in the truncation case, so that (ptr == end) indicates truncation.
2021-05-28List windows with /window 1.8C. McEnroe
Reuse the /window command to preserve /wi abbreviation.
2021-05-27Hash the username in kiosk modeC. McEnroe
So that the first part of $SSH_CLIENT can be passed as username.
2021-05-04Ignore messages in reply to previously ignored messagesC. McEnroe
Using the +draft/reply client tag, which is supported by BitBot. This hides the bot's replies to ignored users or ignored bot command messages. This commit is dedicated to the land of Estonia.
2021-04-02Skip STATUSMSG prefixesC. McEnroe
This feature is rarely used, so just skip STATUSMSG prefixes in the target so messages get routed correctly.
2021-03-17Show where too-long-messages will be automatically splitC. McEnroe
2021-03-08Disable nick and channel colors with hash bound 0C. McEnroe
2021-02-21Use separate reply counts for automatic join topics/namesC. McEnroe
This restores showing the topic and names for automatic joined channels, while still avoiding touching the windows, by using Cold heat.
2021-01-27Measure timestamp width using ncursesC. McEnroe
This allows for non-ASCII characters in timestamps, and simplifies things by including the trailing space in the width.
2021-01-27Add toggleable display of timestampsC. McEnroe
2021-01-26Add numbers to buffer linesC. McEnroe
This directly correlates hard-wrapped lines with the soft lines they were wrapped from. Choosing uint here because it doesn't change the size of struct Line. It doesn't at all matter since buffers only hold 1024 lines at a time anyway.
2021-01-23Separate kiosk mode from restrict modeC. McEnroe
Restrict mode will focus on sandboxing, while kiosk will continue to restrict IRC access through a public kiosk. Kiosk mode without restrict mode allows execution of man 1 catgirl with /help, assuming external sandboxing. The /list and /part commands are also added to the list of disabled commands in kiosk mode, since they are pointless without access to /join.
2021-01-16Rename ignore code to filterC. McEnroe
2021-01-16Generalize ignore toggling to visibility thresholdC. McEnroe
2021-01-11Save and load the URL ring in the save file 1.4C. McEnroe
2021-01-10Print chain to stdout with -oC. McEnroe
2021-01-09Add -o and -t options to trust self-signed certificatesC. McEnroe
2021-01-09Allow configuring the upper bound of the hash functionC. McEnroe
This allows limiting the nick colors used to the 16-color terminal set without modifying the TERM environment variable. Produces different results from just using the default configuration in a 16-color terminal, but what can you do?
2021-01-01Split ignore fields to avoid over-eager * matchingC. McEnroe
Split ignore fields and match each separately to avoid an early * eagerly matching across several fields. For example, "* JOIN * *" should not match messages which happen to contain the word "JOIN" followed by two other words. Ignore capacity is reduced to 64 to keep the size of the array the same. I don't think it's an issue.