See also: ideas.txt. FujiChat features, we're almost at parity! - Configurable ctcp version response. Does it matter? - Keyboard buffer, if possible. Right now we miss the occasional keystroke when typing fast & furious during network I/O. Not sure how to accomplish this with FujiNet (the old FujiChat key buffer actually hooked into the SLIP code). Use a VBI I guess. If that doesn't do it, it would require a custom SIO replacement... well, I have the OS source, so maybe. Other stuff: - Implemented, but not sure it was worth doing: If an VBI-driven keyboard buffer turns out to be impossible or too much of a PITA to contemplate, another idea to avoid dropping keystrokes: after every keypress, wait something like 1/4 or 1/3 second for another keypress, before checking for incoming net traffic. As long as the user's typing 4 (or 3) keys per second, he won't lose keystrokes. Probably have to put a limit on it, a pathological case would be holding down a key long enough to fill the edit box with 240 of the same character. That would cause a 60 sec delay in net traffic, which might actually cause us to time out... need some data on just how fast a fast typist really types, and on average, how often they pause (to think or read back what they just wrote, etc). Also look into detecting key repeats (SRTIMER). Remove this when/if I do a proper typeahead buffer. - Write a cgetc() replacement that doesn't call the OS K: "get one byte" routine. I was avoiding it because it will need a 192-byte table (keycode -> atascii lookup)... but I'm spending more than 192 bytes of code on keycode-filtering, and it's not even complete. - Filter out the rest of the keystrokes that causes cgetc() to block. Includes ctrl-/, ctrl-8, ctrl-9, maybe others (The_Doctor__). - Load/save config files to N:SD///.FujiNetChat or such. Since we *have* to have a FujiNet anyway, might as well make better use of it. - Rewrite the incoming message parser! It needs to work more like the command parser in cmd.c: know how many arguments to expect, and not blindly assume they're present. Also, replace strtok() and strstr() with nextarg(). - Make scr_activate() *not* set scr_status[scr_active]. Also make printing to a screen aware of the proper SCR_* status to set. This will matter even more once there's another status (4th statusbar color). - Status bar needs another color (COLOR2). It will mean "new non-chat text" (e.g. join/quit/part, numerics). The existing SCR_ACTIVE (COLOR1) will mean *only* new text (that doesn't hilite you), and COLOR3 (red) will stay the same as it now. - Filtered-out keystrokes (ctrl-3 and friends) shouldn't even bring up the editbox, if it's not already showing. - Auto-pinging the server seems to work, but needs more testing. - *Thoroughly* test the nick and channel tab completion for the [private] and [server] screens. - Fix the nick completion in channel screens. It works, but needs some polishing up. - More scrollback. Of course it needs more memory... see doc/scrollback.txt for my ideas on this. - ^U works, but is slow (calls backspace() in a loop, which does a memmove() each time). - Server /ping command is iffy (see do_server_pong() in irc.c). - "User has kicked from #channel", the name should be replaced by "you". - Gracefully handle nicks/channels whose lengths are stupid long. At least we shouldn't overflow any buffers. - At least one keyboard macro (for ChanServ auth). More would be nice, if we can afford the RAM. - Error numerics should go to the current screen (?). - Add an optional key parameter to /join (key). spec calls for it, I've never seen it used. - 'Dead' screens (channels we've parted, or failed to join) should show some kind of indicator, and not accept input. Although maybe this isn't worth doing (you already get "cannot send to channel"). - *Possibly* save the config from within the client... though not all options can be changed (really only /nick and /beep). To make this useful would probably bloat the code too much. Some way to change the IRC server/port within the app would be very useful though. - Input box history. Up-arrow to recall previous command. Unfortunately this needs a lot of RAM. Maybe just one previous command, so you can up-arrow to re-ping someone, etc. Config file and initial config: - The config tool should be rewritten in asm, for size. It doesn't need to be fast, but it needs to *load* fast. - The config UI should be nicer. Dialog/curses style, arrows to move, and hotkeys like [S]erver, [N]ick. Categories (as tabs? tree?). I'm not going to get this right without some user feedback, since I'm mainly a CLI and text editor guy. - There should be a preset list of servers to choose from, or the user can enter his own. - There should be a file selector for load/save config. More prefs: - CTCP VERSION response? Do we need it? - Ignore list (maybe). - Connect macro (log in to bot). Remember, the config has to be <= 512 bytes!