TODO for the new Twisted notebook

[ ] pressing shift-enter in a cell before a text area still puts
    the new input cell in the wrong place.  (i.e., after the text)

[ ] sometimes restart doesn't seem to really work until hit
    shift-enter a few times :-(

[ ] On safari foo([tab] is broken.

[ ] Sorting published worksheets by owner is broken (I think it is not sorting by
    publisher, since they are all technically owned by the pub user).


Ideas:

[ ] On safari foo([tab] is broken.

[ ] Sorting published worksheets by owner is broken (I think it is not sorting by
    publisher, since they are all technically owned by the pub user).


Ideas:

[ ] we *really* need a "insert cell after" given cell command.

[ ] Viewing published pages still sometimes claims they were last updated
    "by pub", which is wrong.

[ ] admin users should be able to delete worksheets, especially published ones

[ ] when saving after edit mode, the status info about whether or not
a cell has been evaluated is all set to "not evaluated".  It shouldn't be.

[x] search is broken in that the typ=??? field gives "undefined".

[x] rename in worksheet list view would be very useful.

[x] javascript -- when reset title it should truncate without having to refresh window, i.e.,
   javascript should do the truncation too.

[x] Click rating link to see user ratings.


[x] backward compatible

[x] attachment upload

[x] fix cell://

[x] cross browser
* safari os x
* firefox os x
* firefox windows
* (later) IE/windows


[x] logout doesn't work at all.

[x] make cookies persistent

[x] don't let two people edit a worksheet at the same time -- only edit a copy.
  (at least give a warning now)

[x] search_doc and search-src -- fix it.

[] unpublish -- appears to owners.

[x] bug -- using text mode can have multiple cells with the same id. Ick!

[x] way to attach local text files:
    (1) Click "upload"
    (2) select a .py, .sage, or .spyx file.
    (3) Then it gets listed in
        nb.__files
    (4) Can edit using a javascript code text editor
    (5) It has a name and can be loaded, attached, doctested.

[x] I forgot the "doctest text" display for the worksheets!

[x] bug: published worksheets always say "last edited on June 22, 2007
04:18 AM by pub" but they should give who really edited them.  The
time maybe doesn't get updated either.

[x] save from "plain text mode" should make an entry in the revisions log.

[x] definitely *need* autosave!

[x] marketing text: "Idea for marketing text: With the SAGE Notebook
anyone can create, collaborate on, and publish interactive
worksheets. In a worksheet, one can write code using SAGE and the
different software included such as Python and evaluate it his
code. He could make pretty pictures, calculate something new, tutor
someone, learn about programming, and many other things."

[ ] i definitely do not know how to make twisted listen on the same port
with both https and http.  however, it is easy to make twisted listen
on separate ports for both http and https, and allow the anonymous
view http.


-----------------------


Later...

[x] have an active/archived/trash/new folder thing for published worksheets

[ ] if a worksheet is in the trash after x days all images are deleted...

[ ] migration of old notebooks to new format

[ ] implement user configuration:
      * default system

[ ] implement server configuration:
      ban/add/delete users (where do their worksheets go?)

[ ] implement worksheet configuration:
     * system



BUG FIXING:
----------
done * implement notebook() command as described in docs

done * make sure notebook? gives docs.


[] why not have "click to the left" of input cell toggle whether it is shown?

[] move between cells should save their contents to the server if they change (?)

[x] keep alive

 * anonymous login can still see something sort of

----------------------------
[x] fix broken interactive docbrowser


[x] bug: edit a worksheet you published gives a copy anyways

[x] edit mode should have same header.

[x] rewrite trash/active/archived to be relative to a username



[x] implement worksheet collaboration.

[ ] admin -- should have power to become any other user, hence change their password, etc.

Here's my todo list:
[x] way to delete published worksheets (?)

[] typing notebook(...) -- if fail, should try next few ports; to
implement, have something written to a file to indicate success, then
check that file on exit.

[x] standard notebook help screen.

[x] full text search of all worksheet


[x] make sure "pub" is not an allowed username

[x] renaming worksheets

[x] worksheet list

[x] copy worksheet

[x] full save -- when shutting down notebook server and/or once in a long while, save all worksheet.txt and conf.txt files to disk (by looping through all worksheets).

[?] place where system is displayed and can be changed via a click (should list common / all options, by finding
out which objects have an eval method?)

[x] whether or not a given worksheet is read only

[] make worksheet prefs be stored in a txt files instead of an sobj.

[x] clicking "new" to create a new worksheet should not pop
    up a new window

[] user-saved objects: these should all be in worksheets/username/objects

[] publishing objects

[x] publishing worksheets: a "publish" button

[] stats about the server:
      # of processes, # worksheets running, memory usage

[] page with a list of users; sort by activity, order, etc.; click to
see all worksheets/data they have published.

[x] data directory for individual worksheets; way to
upload/download/delete from it; this is needed so worksheets can have
pictures, etc., not computed by SAGE -- just like moin-moin's
"attachments".

[x] using a published worksheets (copying it from the published space
to one's own).

[] sharing a worksheet should optionally send an email to users being
shared with

[x] some obvious basic restyling of individual worksheet page to be
simpler; in partiuclar, the title should be bigger, etc. -- should
look more like google docs.

[x] a save button, which saves a snapshot of the text of the worksheet
(images aren't saved -- they are too big).  Configure how far back the
snapshots go. Also, give easy interface to see or revert to any past
snapshot.


done * create new worksheet needs confirmation

* carefully control the total number of Python worksheet
  processes that can be started.   Make sure that worksheets
  not used for a certain amount of time are stopped, and
  that only so many can be created.  This is *critical*.
  The public notebook breaks in a few hours without this.

* A User Model Make it so each user of the notebook has an account on
  the notebook, and can only see worksheets that are explicitly shared
  by other users. (I.e., we need either an account and ownership model
  or a wiki model for the notebook. Email/registration. An account
  model makes the most sense).

* Published worksheets should be rate-able

* Save/Load Worksheets/Plain Mode Rewrite saving/loading of
  worksheets, so it doesn't use pickle. Instead use the ''s text
  encoding and the images in directories. XML, plain text format,
  etc. Finish implementing the html/edit mode: (1) images shouldn't
  get deleted on saving, (2) inserting new cells shouldn't be broken.

* Don't lose work: If anything in a page changes, make it so trying to
  navigate away from the page requires confirmation (like in gmail)

* Worksheet Revisions. Like Google docs.
  SAVE when -- hit a big "save" button or exit a worksheet.

* Address the "jupiness" of the notebook, e.g., Justin Walker reports
  that in Safari under OS X, "I reach the bottom of the visible page,
  and scroll down to make the next cell visible, enter an expression,
  and hit SHFT- Return, the page jumps back to the top."

======================================================

Other ideas...

* Highlighting a block of text and pressing tab indents it four spaces; similarly, pressing shift-tab dedents it four spaces.

* In the notebook some input cell should *always* have focus, if this is possible. I hate typing into a worksheet and having random movement happen.

* Create a worksheet settings panel; use this to:
    * Set the math software system used to evaluate cells
    * Determine whether pressing shift-enter jumps to the next cell or stays in current one.
    * Create a notebook settings panel:
          o Whether or not left panel is displayed by default
          o Whether shift enter or enter evaluates a cell (Mathematica or Maple mode)
          o Default math software system for new worksheets.

* New feature -- pdf printing; Printing needs to also allow for the
  following: Given a single worksheet, print it by (1) saving it to a
  latex file with embedded images, and (2) running pdflatex on the
  result, then return the resulting pdf file and/or a tarball with the
  images and latex. This would be very high quality, and will also be
  something that would be easily included in latex documents. Printing
  a notebook (=all worksheets owned by a given user) would create a
  document with a section for each notebook.

* SageTex as suggested by Sara Billey.


* Implement some of the features of Google Notebook (http://www.google.com/notebook) -- note we were before them.
    * Full search of all worksheets
    * Cleaner display of worksheet list on the left
    * Drag and drop





=======================================================














=======================================================

(very old todo list)

BUGS:
   [] screen corruption and freezing on either Firefox or Safari under
      OS X both intel and powerpc.   Resizing the window and/or refreshing
      the browser is a temporary work around.
         Things to try: * turn off input box rescaling and or use <pre> and
                          see what happens.
                        * maybe timing of ajax requests is relevant (?)

TODO/IDEAS:
   [] Make a pdflatex output for entire worksheets -- this would lead to nice
      pdf, etc. printing of worksheets.   The output would have embedded graphics
      using the pdf backend -- for vector graphics -- or the .png backend for
      more graphical graphics.

   [] %auto -- it's too slow -- all the code to eval should probably
      get pushed in in one lump (?) Or maybe that breaks something.
      Also the red line on left doesn't get removed for auto-run code.

   [] Undo:  The SAGE Notebook *is* a wiki, albeit with minimal hyperlinking
(so far).   From moinmoin's help:
"There are two main ways to devalue a wiki. One is through erasure and
the other is through corruption. Dealing with erasure is not terribly
difficult, because there is a change log (and back versions) of every
page and they can be reverted easily. Thus, when page deletions or
major content erasures are detected (which should be fairly quickly),
pages can be restored quite easily to their previous good state.

Explicit and intentional corruption is more difficult to deal
with. The possibility exists that someone can enter incorrect
information onto a page, or edit pages to intentionally change the
information so it is incorrect (for example, people can change the
attributions on a page to make it look like a different person made a
particular comment, or someone can change the content of a paragraph
to alter its meaning in a detrimental way). Pretty much any
collaborative system has this problem. In practice, wiki corruption is
an extremely rare event, and one that can be dealt with (if needed)
with the notification feature (to a fixed auditor) for new material
submission."
      Is there any reason why sage worksheets shouldn't have a
      change log of the input, at least as an *option*?

   [] clicking anywhere below the last cell should create a new cell at the end.

   [] make it so all requested computations go into the compute
      stream at once (??)  currently a computation must complete
      before the next one is sent to the SAGE "compute kernel",
      but it would probably be easy to send several at once, and
      the result might be faster and more responsive, especially
      when evaluating a whole worksheet.

   [] easy way to change the default session for a worksheet.

   [] make the worksheet title be easily changeable independent of the filename.
   [] Create new worksheet should open a browser window in the new worksheet.

   [] Regarding your tip for locally specifying default browser, this
may not work ideally on Mac OS X: first, 'firefox' is generally not
accessible (it is "/whereever/you/keep/applications/
FireFox.app/Content/MacOS/firefox", and there may need to be other
arguments used to make it work smoothly.  If you use the "open"
command, then "/wherever/you/keep/applications/ FireFox.app" (no
trailing "/") should work.

As it is, I see lots of crankiness in the SAGE window where I call
notebook(), e.g., 2006-06-19 13:30:10.530 firefox-bin[21348] CFLog
(21): Error loading /System/Library/
Components/DictionaryService.component/Contents/MacOS/DictionaryService:
error code 4, error number 0 (Symbol not found:
__cg_png_destroy_write_struct Referenced from:
/System/Library/Frameworks/ApplicationServices.framework/Versions/A/
Frameworks/ImageIO.framework/Versions/A/ImageIO Expected in:
/SandBox/Justin/sb/sage-1.3.1.1/local/lib/libPng.dylib

   [] If I set the default browser, as described by William, I get the
following when I exit SAGE, after using ^C to exit the notebook server:
sage: ^C
blah blah ...
sage:
KeyboardInterrupt
sage: ^D
Exiting SAGE (CPU time 0m0.34s, Wall time 8m0.28s).
Python 2.4.3 (#1, May 17 2006, 23:50:57)
[GCC 4.0.1 (Apple Computer, Inc. build 5250)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
 >>>
I don't see this if I use the "pre-defined" default browser.

   [] latex -- add support for embedding images using \includegraphics???

   [] deleting saved objects

[x]This reminds me, I wonder if the GPL requires an "about" link, which
opens a new webpage (or a new tab) with your name+email and the copyright
info. Even if it's not required, I think it's a good idea. What do you
think?
That's a good idea.   The license() command gives that info, but
it's already so long it gets truncated.   It should be that there
is a link that pops up the license() info in a popup.

  [] At some point I'll add a feature so you can set the session when
     you create a new worksheet.  What I've just done is make it so
     that any new worksheets created use a given CAS.  If you restart
     the notebook with a different system= option, then new worksheets
     get that CAS, but old ones stay the way they are.




   [] session switching -- should be able to switch back and forth
      multiple times in a given input cell. This would in no way be
      difficult to code.  E.g.,
2+2
%octave
...
%sage
...
%latex
...
etc.

   [] have a window that pops up and shows all sage commands
      and is easy to search.

   [] worksheets with lots of graphics sometimes feel slow.???

   [] (Note -- there is currently no support for
     pulling in objects and evaluating code in SAGE by typing
     "sage(...)" inside the input block (for another system).
        This is planned.)

   [] optimization: output should update only the end, not the whole
      thing every time.

   [] (bad idea?) Make it so tracebacks in output can be toggled
between showing the inside of the traceback and not via some
javascript, with the default not showing the traceback (just the first
and last line).

[] (??) convenience: rename worksheet -- really workbooks should just be files
   on the computer that can be anywhere -- while working with them
   they are stored in the local notebook directory, but they should
   be save-able / load-able from anywhere on the computer / network.

[] move some buttons to worksheet title:
    download, text, eval, interrupt, hide
   --> but this means "scattering links", which Tish thinks is bad.<

[] Ability to load a plain text file log, e.g.,

 sage:  k=linbox.GFq(2,8,GF(2**8).polynomial())
 sage:  R.<x,y>=PolynomialRing(k,2)
 sage:  f=k.random_element()*x^3+x*y*k.random_element()+k.random_element();f
  _3 = 118 + 50*x*y + 183*x^3
 sage:  time for i in range(1000): _ = f*f

and have it appear immediately as if it were a worksheet.

MORE generally -- have a full plain text format for worksheets.

[] SAJAX -- ajax terminal -- make it embedded somehow (?) into
   the notebook, e.g., as another tab.

[] keyboard access to variable list.

[] undelete -- with a countdown that is interruptable. ???

[] So to indent lines, seems like the spacebar is the only option.

[] click on variable and get a download

[] good support for a "presentation" mode.

[] os.sytem('pydoc -k <...>')  -- interesting

[] debugger -- some way to enter pdb and use it from web interface

[] save all objects in a session to a single variable:
     - a button in the variables pane -- asks for var name.
       OR drag variables pane to worksheets (?).

   [] ability to select any subset of the cells, e.g., by
      checking on a button next to each or something and do
      each of the following ops:
          delete them
          export them as another worksheet
      Also, should be able to insert a worksheet between two cells.
      Basically, copy, paste, and delete with bits of worksheets.
      Should also be able to reorganize them.

DONE

   [x] Ability to switch from one log (=worksheet) to another via
      the web interface.
   [x] Add text annotation that is not evaluated
      between blocks (maybe in html?)
   [x] Ability to interrupt running calculations directly
      from the web interface (no console access)
   [x] Nice animation while a computation is proceeding.
   [x] Some way to show output as it is computed.
   [x] Option to delete blocks
   [x] Make block expand if enter a lot of text into it.
   [x] Evaluate the entire worksheet
   [x] Theme-able / skin-able
   [x] Downloading and access to exact log of IO to client SAGE process
   [x] Saving and loading of all objects in a session
   [x] Save session objects as to log objects so don't have to re-eval?
   [x] The entire page is resent/updated every time you hit shift-enter;
      using 'AJAX' this flicker/lag could be completely eliminated.
   [x] When pressing shift-enter a line feed is inserted temporarily
      into the inbox, which is unnerving.
   [x] Add authentication
   [x] Embed the log object in the html file, so server session
      can be restared directly using the html file!  E.g., embed
      pickled Log object in a comment at end of the .html file.
   [x] Ability to upload and download source files (to be run)
      via web interface; maybe ability to edit them too, via some
      'rich' code editing javascript 'widget'.
   [x] rewrite tables using CSS
   [x] load and attaching scripts.
   [x] a way to interactively watch the output of a running computation
      (in verbose mode).
   [x] undo -- have infinite undo and redo of the SAGE *log*, i.e.,
      text I/O (and possibly graphics).  does not save *state* of
      the "sage kernel".
   [x] switch into mode where the whole input box is parsed by
      another system, e.g., Maxima.

   [x] Saving and loading of individual objects: -- should be trivial,
       but is very tedious right now.
       (maybe all relative paths for save/load should be redirected
        to sage_server directory?!)
   [x] The "move to the current input box" javascript *only* works
      with firefox (not opera, not konqueror); also this should
      just keep the page position where it is rather than move it.
      Moving to a more AJAX-ish model would alternatively fix this, maybe.
   [x] A. Clemesha: shrink/expand input/output blocks
   [x] A. Clemesha: When hit shift-enter the next text box should be made
      into focus.
   [x] Embedded graphics from plots;
       also embed png from latexing of math objects (so they look nice).

[x] save_session broken.
[x] Manipulating cell list:
     -- add new cell (automatic at end)
     -- add cell between two existing cells
     -- delete cell

[x] Saved objects:
     -- info: load/save

[x] SAGE restart (with confirmation alert)

[x] interrupt -- should add (interrupted) to top of all output

[x] interrupt -- red only when comp running!!

[x] Fix worksheet area so it doesn't scroll horizontally

[x] Separate the variables / scripts panes from the worksheets / objects panes.

[x] Variables:
     -- info:
     -- change typeface of "type" of variable, e.g., in parens and dimmer,
        but variable name in bold.

[x] Introspection:
      Tab completion / search / help -- bring in from before.

[x] bug: when backspace away a cell, get taken to next -- should get taken to previous.

[x] another idea:
     where to comps get run?  they could all be run from
     an explicitly given directory when the notebook is
     started.  Then new files are copied to their cell
     directories.    another possibility:
       define a variable "HOME" in all sage0's,
       which is the directory
       from which SAGE was started.   Then users
       can load by using HOME + ...


[x] fix variables pane

[x] support for .sage/init.sage

[x] '\n' alone on a line breaks it.  If it isn't the last line it's ok.

[x] preparser fix -- triple quoted strings in middle of loaded files should be ignored

[x] Scripts: way to load/attach via web interface.

[] some "magic":
 done    - attach   # will work from DIR if not abs path.
 done    - load     # will work from DIR if not abs path.
 done    - save_session -- saves to objects dir

 done    - %gp: at the top of a block and it gets executed in pari.

[] latex -- support for embedding in output?, e.g.,
        view(x)
   embeds latex repn.

[x] todo: make the saved state file backup the last safe state, to
   avoid the potential for corruption if the server Python process is
   killed while saving state.  Also, this could easily allow for a
   sophisticated undo function; design ideas welcome...

[] variables: easy way to save any variable to a var with the same name
   in the common saved objects store.
   xxx -- no save session good enough...

[] worksheets list -- could have status information, e.g.,
   if a comp is running, could make the entry redish until
   it is done.

 [x] fix that this happens:
    s() if not __x__ in __SAGENB__globals and __x__[0] != "_" and str(type(globals( )[__x__])) != "function"]) ' ()

[x] make evaluation much more robust:
print ">>> dkjd"

s.chdir("/home/was/people/josh/sage_notebook/worksheets/_scratch_/cells/1")
[A

 [x] restart doesn't reset the output box in which it occurs.
 [x] fails if load a deleted worksheet.
[x] introspect -- if see a ? before any quote and to the right, then introspect.

[] introspection -- f1
   completions -- f2
[x] eval of empty cell -- skipped
[x] variables -- much more robust
[x] Completion should complete and not just list completions.
[x] I'll make control-up and control-down move between input boxes
(instead of tab).

[x] up arrow broken after inputing new cells
[x] And the plan is that the notebook should be usable mouse free with,
at least, no less functionality than one has in the command line.
(I.e., the mouse may give you more functionality than the command
line, but you won't loose functionality that you had on the command
line.  Right now this isn't the case, e.g., there's no reverse search
or history scroll yet.)

 [x] attached files list doesn't get updated
 [x] fails if worksheet 0 is deleted.
 [x] put the output in nowrap, then
    import time
    for i in range(100):
       time.sleep(1)
       print i

[x] tabbed worksheets.  -- just make it easier to use your web browser; i.e., this
   is already a feature of web browsers.

[x]
>   In an xterm, I can copy and paste input and output to e-mail
>   an example session to someone.  I can't make firefox copy
>   multiple boxes.

That's because currently the input boxes are all "text areas"
even the non-active ones.  If I change them to be <pre>'s when
they aren't selected then you will be able to copy everything
except the box you're currently typing into.

-- fix: text version of worksheet


[x] restart should start on same worksheet as before.

[x] workbooks -- link

[x] i need to rethink the design of having multiple worksheets at once:
    possibilities:
        xx have multiple worksheet div's all in the html, each
           with an id.  have a way to "close" a worksheet, i.e.,
           button in upper right (Maybe a close link like the Help, etc. links).
           the update function has to tell about *all* the worksheets
           rather than just one:
               update contains:
                    number of worksheets with data
                    worksheet number <data>  ...
                    worksheet number <data>  ...
               and the worksheet data will allow us to set the color
               on the the worksheets tab on the left.
    (all html downloaded at once; so switching done entirely in js)
     -- new
     -- switching
     -- deleting

[x] It'll be nice to record the history of commands like in a shell.

[x] quit function should do something
 sage: quit
'Use Ctrl-D (i.e. EOF), %Exit, or %Quit to exit without confirmation.'

[x] latex an entry cell.

[x] output shouldn't include html links until it's done.
[x] tab completion of empty string is 4 spaces.

[x] fix decimal point before number sage_eval('.5') should work!Q
[x] update the help
[x] add hide/show of input cells
[x] add print-screen function
[x] Have the cell output option be saved via async.
[x] doesn't chop off exec stuff after some errors:
for i in range(10):

   [x] "time " disappears from saved input for cells
   [x] add a "restart sage" button in the top.
[x] Make an entire Gap Notebook or Magma Notebook or ...

   [x] text, eg., matrix, look a little indented when output.

   [x] tab completion sticks cursor at end of text when expands output.
       (Tom fixed this -- not in official sage yet)

   [x] Safari -- (from J. Walker) I just tried (1.3.3.6)
"R.<x>=PolynomialRing(Integers(),'x')" in Safari, it mostly seemed to
work, save the minor problem that the "(" following the procedure name
doesn't seem to take.  When I try to execute it I get a traceback
indicating that it (sage) hasn't seen the "(".

   [x] images in output sometimes "moved down" after reload of page!

   [x] (NO - this conflicts with Tom's very nice "tab" introspects
      when typing input to a function.)
      tab completion could also do completions on keyword arguments
      to methods.   ; these would have to be in addition to all
      valid identifiers, since you might just want to pass a valid
      id in.  -- and it shouldn't fail if the object that has the
      method isn't defined yet.

   [] CRAZY: try a modified version of the worksheet that does multiple
      input cells all in a different thread.  This might be
      horrible, but would be interest to try.

   [x] enter to submit when adding a new worksheet or deleting.

[x] HTML cells in addition to SAGE code cells; or just better typesetting
   support and way to hide the input (!)

[x] print -- javascript button, which displays the whole page as one page
   (no scrolling, etc.), etc., and calls print.

[x] easy user override of css elements.

[x] should be able to download/upload complete worksheets as a single file
   and move them in/out of other notebooks.  How?
     1. an sobj defines the worksheet, and a tarball the data and graphs,
        so tarball it up with the sobj.
     2. interface -- when you mouse over a worksheet, a menu appears with
        the option to download it to a file.
     3. Also, there's an upload link in the worksheets list.

[x] Markup mode?:
   If the input box begins in %html then the output is in html instead
   of plain text, and the input box gets shrunk.  This would allow for
   sophisticated markup.

[x] favicon

[x] CTRL enter does this -- -when eval: always insert a new cell after the current one???
     mathematica does *not* do this, but word processors do.

   [x] restart (with confirm) button -- lets you restart the
      client SAGE interpreter that is being run by the web server.
      This way you don't have to keep restarting the web server
      when doing code development.  Have button that can also
      save session, restart, and load session!
   [x] way to time how long a computation takes.
   [x] word wrap -- default on, but toggle on/off on a cell-by-cell basis
      (will require ajax to do the wrapped/non-wrapped computation, or
      store both versions in the html... so will work offline)
   [x] input one form shouldn't delete data from any other forms;
       e.g., you could be editing one form and submit another!
   [x] The whole interface needs to be slimmed down so bunches of single
      line input (and output) will work.
   [x] Konqueror -- sometimes shift-enter does not send the input correctly.
       The input does get sent, but the update queue business just
       doesn't work right.
   [x] If you tab complete in an empty cell weird stuff happens related to
      the last tab completion.
   [x] style the completion list:
          * css needs descent names
          * must be out of the way of what we're typing
          * everything should appear in the same place.

   [x] long list of completions -- looks good at top but a weird at the
      bottom (formatting is munged)

   [x] When interrupt or restart it doesn't change the
      cells to not running -- so they stay green!
      This is a critical bug.
   [x] Opera box size resize.
   [x] Control-c / Escape maybe broken.
   [x] In system="python" mode tab completion doesn't work.  This is because
      it tries to complete via python.trait_names().
