Saturday, 18 August 2012
Progress Report: "Comic Chat" Shell for Linux
Some amount of progress has been made since my previous post, although there is still quite a way to go.
Remember the internet in the 1990s? If not, you probably don't remember Comic Chat.
My original efforts, as you may recall, were to run Microsoft Chat, that is Comic Chat, on a GNU/Linux operating system. During the initial, conventional WINE troubleshooting, it dawned upon me that Comic Chat is nearly 20 years old. A century in the world of technology. My effort then, one of technological nostalgia, transformed into a more creative endeavor: to duplicate Microsoft Comic Chat on my own system and improve it when necessary.
As I am not a developer, and in judging my word please acknowledge this disclaimer, my options are limited. I cannot aim to provide an IRC client for Linux users that replicates Comic Chat. I can, however, work on top of other clients and build local bash scripts that work on top of those clients in order to suit my own needs. When I began this project two months ago, I had the important decision to make of choosing a client. I am increasingly confident that Weechat was the right choice. FlashTux's support of the really handy FIFO pipe has made my own limitations a potential strength, allowing practically unlimited possibilities of shell-to-IRC-client interaction. Weechat is fast, powerful, flexible, and featureful; the only limitations I have encountered have been met with either solutions or workarounds thanks to a little hacker creativity and the continuous support of FlashTux, the developer, on his website forums.
If I do manage to bring this project to a completely workable state before half the applications used in the scripts change or break, I will begin to look at moving slowly out of bash and into probably python-based Weechat plugins. For now, I am running off the built in features of weechat, a few hacked Weechat plugins from the web, and a few hundred lines of bash scripts that communicate with Weechat.
The drawing of image bubbles needs a good deal of work. The patchy one-line bubble pictured above is about as good as it gets; longer messages run off the screen. Only outgoing messages are being drawn, incoming messages are still text only at the moment.
The memorable randomly generated ("Networked Nerds," "You Shoulda Been There," etc.) title that filled the first pane in Microsoft Chat has been duplicated at the top of the user list; this list is generated by a bash script which reads the Weechat room log upon joining a room. The icons represent the actual icons corresponding to the characters that are associated with the given nicknames. User names are numbered, as scene below each icon, as are all the possible outgoing poses for the local user's own character file.
The outgoing message prompt, in the gray terminal on the left side of the screen toward the bottom, is automatically prefixed with the format "0t0." The number preceding the "t" represents the pose code, corresponding with the pose that will be sent to Comic Chat users. If it is left at "0," then one of the neutral poses will be selected, or the proper emotion/gesture will be interpreted based on the message the user sends out (for example "hello" will trigger a wave or a grin, etc.) The number following the "t" indicates who will be the recipient of the outgoing message, that is, who will be featured in the comic pane. Sending to multiple users or the whole room will be supported in the future, as will sending out "thoughts," "actions," or "whispers," instead of normal speech bubble messages.
All graphics are, for the moment, generated on the fly by Image Magick and local, saved "comic art." They are then displayed with feh which is basically fine for displaying the nicks list, for example, but very unpleasant and inappropriate for pages of comic panes generated in a busy IRC channel. I simply have not encountered the resources necessary to do this "appropriately" (as though any of this is appropriate, I should not be doing this project as I am not a developer and bash is not a programming language) and am open to suggestions. Ultimately, I would like to find a *nix image viewer, or some other sort of already existing program, that can dynamically update the image displayed whenever it is modified, perhaps displaying four comic panes at a time.
In the mean time, there is a lot of work to do behind the scenes. Microsoft Chat does not handle away messages according to IRC standards, but generates a "coffee cup" icon to indicate away statuses based on CTCP messages under the format "PRIVMSG #Channel :\01AWAY Gone fishing.\01". Scripts have to be provided that send the away message not only when going away, but every time a new member joins. It should also be remembered in between "sessions" in case there is a crash, etc. Woodsman figured out how to automate this in a mIRC script he released back in 2000, but as far as I know it has not been done in a native *nix client until now. Ultimately, my work here should and hopefully eventually will be remade into a native plugin for Weechat, rather than an outside bash script piped in.