Tab completion in Instantbird 1.2

We’ve made some major improvements to the tab completion of nicknames in IRC channels (and other chatrooms). The goal, as always, is to make it “just work” (so you can think about more important things!).

Simply press TAB to complete the first couple of letters you have typed:

image0

To undo the completion, just press Backspace as usual.

If there is no unique nick that fits the bill, Instantbird tries to guess which nick you mean from the context. For example, if you have recently been pinged by someone, that nick is preferred. Otherwise it just completes as much as possible, and shows you a list of alternative completions:

image1

You can then always press TAB again to cycle through these candidate nicks until you get the right one:

image2

(Shift+TAB will cycle through the list in the opposite direction.)

Notice how Instantbird automatically added a colon after the nick, as we were addressing someone at the start of a message. And if you add another nick, you get a comma-separated list:

image3

Of course, sometimes that may not be what you intended. So if you delete the trailing colon by pressing Backspace, the punctuation adjusts accordingly:

image4

Don’t forget you can also reply to any message by double-clicking it! This will add the sender’s nick to the beginning of the message.

Status Update: May 23, 2012

We’ve made quite a bit of improvements over the past few weeks. Although a lot of the changes are behind the scenes or fixing regressions, there are some exciting user facing changes, as detailed below! We’ve also been working with our Google Summer of Code 2012 student, wnayes, quite a bit to get him up to speed of how things work in Instantbird. He’s made great progress on understanding the code and has even fixed a bug (see the “top protocols” page, below)!

Landed Changes:

"Top Protocol" Page in the Account Wizard

Top Protocol” Page in the Account Wizard”

  • The account wizard now has a “top protocols” page to allow users to quickly set up accounts that are most applicable to them. This is localizable as different instant messaging networks are popular in different regions.
  • Tab Completion improvements:
    • Will no longer complete the same name multiple times.
    • You can now cycle backwards through the list of completions by holding shift while pressing tab.
    • All matching names can be cycled through now, although they are prioritized as:
      1. Names of people who have pinged you (i.e. said your name in the chat).
      2. Names of active participants.
      3. Names of inactive participants.
  • IRC changes

Google Summer of Code Status:

The past few weeks were the “bonding” period for Google Summer of Code students and their respective communities; actual work has started this week. As part of the “bonding” period, we asked wnayes to check out bug 1391: adding the “top protocols” page to the account wizard (see above for a screenshot!).  We thought this would be a great introduction to our tools (mostly Bugzilla and Mercurial), our workflow (requesting reviews and feedback, discussing why changes were made, etc.), some of the languages that we use (XUL, XBL, CSS, and JavaScript) and to some of the account manager code that he will be working on this summer! wnayes has done a great job and the changes are already in the nightly builds!

To follow along with what wnayes will be working on this summer, you can read his blog (RSS feed) and check out his user repository. Additionally, he’s posted some general information (his application, timeline and a series of links) that he’ll be updating as the summer continues. (And of course you can stop by our IRC channel, #instantbird on irc.mozilla.org, and say “Hi!”)

The Interruptions Manager

For Instantbird 1.1, which will be released soon, we realized a weak spot in our API was the ability to control whether events should be shown to a user or cancelled under certain conditions.  This fits in as part of our mission about giving control of instant messaging to the user: the user should only be interrupted by events that deserve their attention.  If you’re wondering how this is useful; extensions now have great control over how Instantbird is allowed to interact with the user.  For example, extensions could: keep conversations from opening (i.e. spam guards), quiet sounds during a full screen video, or even stop new conversations from opening if the user has set their status as Unavailable.

Extensions are able to simply register themselves with the interruptions manager and they will automatically be notified if certain events happen, including when Instantbird wants to: get your attention (e.g. flash the task bar), open a new conversation, play a sound or show a message notification.

The API is really easy to use and we’ve created some example add-ons that use it!  We have created an an add-on to not allow the NickServ from IRC accounts to open (source), an update of NickServKiller. Additionally there is an add-on to force auto-joined chats to be held on the buddy list (source), allowing you to give them your attention when you want to.  Another example of a great add-on is the Do Not Disturb add-on, which does not allow Instantbird to disturb the user while their status is set to Unavailable, really allowing you to concentrate on something more important (source).

There’s also a skeleton for an anti-spam add-on (an often requested feature!) that is just waiting to be finished!  Contact us on #instantbird on irc.mozilla.org if you’re interested in helping out.  And don’t worry, these extensions will be available on addons.instantbird.org soon!

We think this is a great addition for add-on developers working on Instantbird and can’t wait to see what exciting ideas people come up with!

User icons

Another very visible change between Instantbird 0.2 and 0.3 is the possibility to set a user icon and a display name.

screenshot of the contact list with a place holder icon

You will see a place holder icon at the top of the buddy list, just click it (this will open a file picker) to set an icon. The icon will be automatically resized and converted to fit the various size and format requirements of the IM networks you use.

Similarly, click the “Display name” place holder to edit it. This name will be visible in your contacts’ buddy lists (unfortunately this currently works only for MSN).

Here you go, your friends will now easily recognize you:

screenshot of the contact list with an icon and a display name

Conversation windows have also been changed to display your contacts’ icons and some more information (display name, status message, …):

conversation with an info bar showing the user icon

I can already hear some comments about how much space this new information bar takes (or wastes) in all conversation windows. Yes, this takes a lot of space, we know. People tend to use big or very big windows for chatting (sometimes even full screen!) but if you like the ability to chat in small windows, don’t worry, we love you too! Just resize the window and this information bar will shrink to ensure you still see the actual content of the conversation:

conversation with a smaller info bar

And for very small conversation windows, the bar will completely disappear, leaving only the strictly necessary user interface:

small conversation without the info bar

Better contact list

The contact list was identified as a weak area of Instantbird 0.2. It has been dramatically improved for Instantbird 0.3 which we plan to release next week.

Tags

Goodbye groups

Like most IM clients, Instantbird 0.2 had each contact placed in a group, leading users to organize contacts a bit like files are placed in folders on the disk.

While this seems ok at first, placing contacts inside groups doesn’t work well when thinking of the contact as a person. Don’t you have a friend (group ‘friend’) who is also a coworker (group ‘colleagues’)?

For this reason, with Instantbird 0.3 we replaced the notion of “Groups” with the notion of “Tags” throughout the user interface. While groups used to be containers for your contacts (it was possible to move a contact from one group into another), tags are additional data attached to the contact (you can add or remove tags on a contact, but no longer ‘move’ a contact) and thus a single contact can have multiple tags. To change the tags attached to a contact, use the “Tags…” context menu item of the contact; it shows a list of the existing tags with a check mark next to the tags attached to the selected contact. Checking/unchecking a tag in this list will attach/detach a tag from the contact.

Tags menu

Hidden tags

It’s pretty common when using several accounts of different protocols on a multi-protocol client for the first time to have contacts scattered around in lots of meaningless tags. These contacts are typically those that have never been moved before and are still in whatever the default group of the various previous clients were.

As moving each of these contacts out of these meaningless groups is not really an interesting task, and sometimes is even impossible (if the server doesn’t allow us to move it), we have designed a more efficient way to forget the annoyance caused by the pointless resulting tags: when hovering a tag in the contact list, you will see an [x] icon. Clicking it will hide the tag (after showing an explanation the first time).

Hide tag icon

It’s possible to manage the list of visible tags (to unhide a tag) from the “Visible tags…” context menu item.

Contacts which haven’t been associated with a visible tag will be displayed in a special “Other Contacts” tag, always at the bottom of the contact list.

Grouped contacts

If several networks are usable to IM the same person, you will no longer be annoyed by seeing that person listed several times in your contact list. Just drag and drop one of these contacts onto another and Instantbird will know they are both ways to contact the same person.

During future conversations, if your contact suddenly starts talking to you from a different network, the conversation will continue in the same tab. A system message will be displayed in the conversation to unobtrusively notify you of this change.

If you want to start talking to a different account of your contact, you can do so easily with a click on the protocol icon at the top right of the conversation UI:

Talk using a different network

When starting a conversation from the contact list, Instantbird will automatically select the best way to reach your contact, based on availability information and your preference with regard to the various ways to contact this person. You can change this preference by expanding a contact (with the down arrow icon) and then using drag and drop to reorder the accounts.

Expanded contact

Other noticable changes

  • The contact list is now sorted: both tags and contacts inside a tag appear alphabetically sorted.
  • Changes in the displayed information are smoothly animated, making them at the same time easier to understand and less interrupting.
  • Closing the contact list window, which is not needed all the time, will no longer close Instantbird. On Windows and Linux it will be minimized to the system tray (this behavior can be customized in the Preference dialog); on Mac it can be easily reopened from the menubar.

Introducing Time Bubbles

Instantbird 0.2 was released with Bubbles as its default message theme:

default message themes of Instantbird 0.2

The most common feedback we received from users that quickly switched back to Simple (the previous default) or another theme was that the lack of timestamp for each message made the theme unusable.

Some users have really passionate opinions about whether these timestamps should be shown or not. On one hand, people think it’s a useful piece of information that should always be visible, but on the other hand, people think it’s a waste of space on their limited screens. The common “solution” to this problem is to include a “show timestamp” preference, allowing each user to decide for themselves which of the two behaviors is the least inconvenient.

I don’t think that making the user responsible for choosing between two not-so-good options which one is best is a good way to address this issue. So soon after the 0.2 release, I started searching for better solutions.

I tried to identify what the information provided by message timestamps was used for, so that we could hopefully find something appropriate for the actual needs.

The starting points of my reflection were that:

  • timestamps, when visible, are most of the time ignored.
  • when they are actually read, the information they provide is rarely the information really desired, but only an indirect way to answer a valid question.

So then, I tried to identify which questions users who wanted to have their timestamps visible all the time had to answer. Here are the questions I found, and what I’ve implemented to provide human friendly answers to these questions:

1. How much time has passed between 2 messages?

That’s actually still an indirect answer to another question: has that person talking to me actually read what I said and thought about it before replying? Sometimes when receiving an answer that doesn’t seem to take into account what has just been said, it’s just that the message wasn’t read yet at the time the reply was written.

I believe having to read and compare mentally 2 timestamps to get that information is overly complicated and we can convey this information visually:

screenshot with 2 bubbles touching each other, and 2 bubbles with some space between them

The vertical space between Bubbles is used to show how much time separates messages. If 2 people talked at the same second, their bubbles will almost touch each other. If there’s been a pause between the messages, there will be some space between the bubbles.

In order to not waste too much space when 2 messages are separated by a long time, I decided that the first few seconds would cause a much bigger increase of the space than the next seconds and minutes (for the readers who care about the details: it’s a logarithmic representation of the time).

This makes it easy to see a difference in time just after a message was received (the very few seconds that make the difference between a likely-read message and a most-likely-not-read-yet message), but makes it hard to evaluate time intervals of several minutes. To address that, when messages are separated by over 5 minutes, the exact time is displayed between the bubbles in gray text:

screenshot of 2 messages with over 5 minutes of interval

2. Is this message old?

This question is especially interesting when returning to the computer after being away, and having several conversations with new messages, to decide which one to answer to first. If a message has already been waiting there for an hour or so, the person has probably moved on already, and is most likely not actively waiting for your answer. However, if a message was sent only a few seconds or minutes ago, it’s reasonable to expect that the person is still at the other end and still remembers what was discussed.

To answer this question, my proposition is to make the space between the latest message and the text input box vary exactly like the space between 2 bubbles. Unlike the time between 2 bubbles which doesn’t change, the time between the last message and now changes continuously, so displaying this time requires an animation: messages will “scroll away” as they get old. If a message is older than 5 minutes, the time since it appeared will be written (omitting seconds, so that the text displayed doesn’t change continuously).

Just arrived message: screenshot of the area at the bottom of the conversation without space

Message arrived a while ago: screenshot of the area at the bottom of the conversation with a lot of space and the time displayed

3. When did I say that?

This question occurs occasionally when looking for something in the backlog (typically using the findbar). In this case, the time is actually the desired information, but seconds are irrelevant, so only the hour and minutes need to be displayed. For this case, I decided to display the time of the first message of a bubble when the bubbles is hovered:

hovered bubble

4. What was the time of a specific message?

This rather rare question was already addressed with a little known feature of the existing bubble theme: when hovering a message, a tooltip appears showing a timestamp for that specific message.

5. When quoting messages (to paste in emails for example), I need the messages to have some time information associated with them in plain text!

While this is a valid concern, it’s out of the scope of the message theme design, as Instantbird 0.2 already supported a nice feature that we called “magic copy”: when a selection inside a conversation is copied into the clipboard, Instantbird will detect which messages are selected, and “prettyprint” them so that whatever message theme is currently in used doesn’t change the appearance of quoted messages.

the input box with a copy of some selected messages

Conclusion

I have experimented with all of these suggestions for over a year already with a modified version of the Bubble theme, called “Time Bubbles” which was in an add-on. As the results of the experiment were satisfying, the “Time Bubbles” feature is now part of the Bubbles theme which is used by default in Instantbird. You can try it in current nightly builds, and it will be in Instantbird 0.3 beta 1 which we plan to release very soon. We look forward to your feedback on this!

Context Menus

Context menus (opened with a “right click”) are a common and expected part of the user interface. It can be very frustrating when they are missing, so in Instantbird 0.2 we tried to add one wherever users are likely to expect one.

In the buddy list, the context menu of contacts can be used to start a conversation (although pressing enter or double clicking is usually faster), show the conversation history, rename a contact, move the contact to a different group or remove it from the list:

Buddy context menu

The context menu is usable anywhere in the buddy list to toggle the display of offline buddies:

Buddy list context menu

A context menu was added in the account manager too. There, it proposes all the possible actions for an account. Since Instantbird 0.2, it’s possible to reorder the accounts in the list (this is also possible with drag & drop using the mouse or with the keyboard using shift + the up or down arrow).

Account context menu

A context menu is available on conversation tabs, with actions related to that tab (opening it in a new window, closing it, …) and to the conversation, like showing the history of previous conversations with the same contact.

Tab context menu

Last but not least, there’s a context menu in conversation content. This is the most “contextual” context menu we have added. The proposed actions will vary depending on whether there is a selection or if the context click was done over a link.

Content context menu

When selecting some text from a conversation, a common action is to copy it to the clipboard and then paste it in a browser to use it as the query in search engine. We have included search engine items directly in the context menus to reduce the number of clicks needed for this common case.