Something we still have to think about is key bindings for the ICS Console. Most text entries in XBoard do not have a special key-event handler associated with them. Those that do mostly use the 'standard' handler that reacts to
<Esc>: pop down the dialog the entry is in <Enter>: emulate pressing of the OK button Note that pressing OK does not always results in closing of the dialog; this depends on the value returned by the OK handler. The ICS Input Box had its own handler, which ignored <Esc>, and allowed the use of Up and Down Arrow to recall previous input lines. I used the standard handler on the the input field of the ICS Console, but extended that handler to also intercept Up and Down Arrows, but only in case it was handling an event from this input field. It seems to me that to make it work conveniently, it would need some changes. In particular, popping down the ICS Console on typing <Esc> does not seem a sensible action. OTOH, it would be convenient if there was a way to switch between chats and ICS commands by use of the keyboard, rather than by clicking the Hide or one of the Chat buttons. Perhaps the following would be helpful: <Esc>: emulate pressing the Hide button (switch to ICS command mode) <Tab>: switch to the next chat that is in use Perhaps the <Tab> should give priority to chats marked as 'dirty'. Showing them would make them clean, so repeated pressing of <Tab> would eventually still cycle you through all the chats. <Tab> would just emulate pressing of one of the top-row chat buttons, so when the chat pane was hidden, it would open it (for the left-most active chat). I don't know if there are other ideas for key bindings. In general, the XBoard menu key bindings do not work when one of the dialogs has focus. For the ICS console this could be a nuisance. We could try to intecept all non-printables in the key-event handler of the input field, and perform the corresponding XBoard menu function. (E.g. so that the user could press F2 for Flip View, etc.) A less complex alternative is to define a key that would transfer focus to the main window, where all bindings would work autmatically. Typing printables in the main window in ICS mode already transfers focus to the ICS Console input field, putting the character there (and popping it up when required). So you would easily get back to the console. Of course playing moves would normally transfer focus to the main window all the time, so this automatic transfer of focus to the ICS Console on typing is pretty important. Perhaps <Esc> when the console is already in ICS mode (when there is no chat pane to hide) should transfer focus to the main window, so the user could use a key binding (e.g. to offer a draw, resign etc.).
