2015-05-03 00:14:38 -05:00
|
|
|
#+STARTUP: indent
|
|
|
|
|
|
|
|
* Overview
|
|
|
|
* Design
|
|
|
|
** Notebook Buffer
|
2015-05-14 09:39:47 -05:00
|
|
|
|
|
|
|
Notebook information is stored as a [[file:lisp/ein-notebook.el::ein:$notebook][struct]]. Always associated with a buffer,
|
|
|
|
[[file:lisp/ein-notebook.el::ein:notebook-buffer][ein:notebook-buffer]] is used to find buffer associated with a notebook.
|
|
|
|
|
|
|
|
Notebook does not hold cells, that is delegated to instances of the [[file:lisp/ein-worksheet.el::ein:worksheet][worksheet]]
|
|
|
|
class. Instances are stored as a list in the `ein:$notebook-worksheets` slot.
|
|
|
|
|
2015-05-03 00:14:38 -05:00
|
|
|
** Notebooklist Buffer
|
|
|
|
** Kernel communication
|
|
|
|
** Contents API
|
|
|
|
* Enhancements/Fixes
|
|
|
|
** Imenu/Speedbar Cooperation
|
|
|
|
Seems to be a couple ways of doing this:
|
|
|
|
|
|
|
|
1. Configuring `[[http://emacswiki.org/emacs/ImenuMode#toc12][imenu-generic-expression]]` regex's.
|
|
|
|
|
|
|
|
2. Redefining imenu-create-index ala python.el.
|
|
|
|
|
|
|
|
(2) seems to be the more elegant solution.
|
|
|
|
|
|
|
|
EIN currently has minimal support for imenu through
|
|
|
|
`[[file:lisp/ein-worksheet.el::ein:worksheet-imenu-create-index][ein:worksheet-imenu-create-index]]`, but all it does is look for
|
|
|
|
headings. Somehow this fails to work with speedbar and also does not handle
|
|
|
|
indexing Python code (i.e. variables, function, classes, etc.).
|
|
|
|
|
|
|
|
To get the speedbar working we will need to define a minor mode per the
|
|
|
|
following [[http://www.gnu.org/software/emacs/manual/html_node/speedbar/Minor-Display-Modes.html#Minor-Display-Modes][instructions]].
|
|
|
|
|
|
|
|
For /name/~-speedbar-menu-items~ can I just use ~imenu-generic-expression~?
|
|
|
|
|
|
|
|
Maybe the way to do this is for each ~[[file:lisp/ein-cell.el::ein:codecell][codecell]]~ create a temp buffer with the text
|
|
|
|
of that cell and call ~ein:imenu-create-index~.
|
|
|
|
|
|
|
|
#+BEGIN_SRC elisp
|
|
|
|
(let ((text (ein:cell-get-text cell)))
|
|
|
|
(with-temp-buffer
|
|
|
|
(insert text)
|
|
|
|
(ein:imenu-create-index)))
|
|
|
|
#+END_SRC
|
|
|
|
|
|
|
|
Still will need way to map temp buffer positions to actual positions in the
|
|
|
|
notebook buffer (~ein:cell-input-pos-min~ and ~ein:cell-input-pos-max~)
|
|
|
|
|
|
|
|
** Live links to other notebooks
|
|
|
|
|
|
|
|
1. Understand how org-mode does it.
|
|
|
|
2. Steal???
|
|
|
|
3. Profit!!!
|
|
|
|
|
|
|
|
** Use polymode
|
|
|
|
|
|
|
|
[[https://github.com/vspinu/polymode][Polymode]] uses indirect buffers, which may or may not be a good solution for ein
|
|
|
|
notebooks.
|
|
|
|
|
|
|
|
** Access password protected notebooks
|
|
|
|
** Connect to non-python kernels
|
|
|
|
** Synergies with pymacs?
|
|
|
|
** Detect system path of opened notebook
|
|
|
|
** Jump to notebook code in traceback (issue [[https://github.com/millejoh/emacs-ipython-notebook/issues/42][#42]])
|
|
|
|
|
|
|
|
What needs to be done:
|
|
|
|
|
|
|
|
1. Carry notebook reference in the ~[[file:lisp/ein-traceback.el::ein:traceback][ein:traceback]]~ structure.
|
|
|
|
2. Look for ~<ipython-input-3-05c9758a9c21> in <module>()~. The number 3 means
|
|
|
|
input #3 in the notebook.
|
|
|
|
3. Find cell based on input number. Can iterate through list of cells () and look for matching
|
|
|
|
~input-prompt-number~.
|
|
|
|
4. Call ~ein:cell-goto~ on that cell. May need to swap buffers first.
|
|
|
|
|
2015-05-14 09:39:47 -05:00
|
|
|
** Return of worksheets
|
|
|
|
|
|
|
|
tkf/ein and IPython 2.x allowed for multiple worksheets within an individual
|
|
|
|
notebook. This feature was removed in 3.0 since multiple worksheets do not make
|
|
|
|
much sense in the context of a tabbed web browser interface. EIN's legacy code
|
|
|
|
still supports worksheets, though at the moment that information is lost upon
|
|
|
|
saving a notebook.
|
|
|
|
|
|
|
|
Having multiple worksheet support makes some sense for ein; below is thinking on
|
|
|
|
how to reimplement this feature.
|
|
|
|
|
|
|
|
IPython nbformat 4 specifies a [[http://ipython.org/ipython-doc/3/notebook/nbformat.html#metadata][metadata]] key which can be used to store general
|
|
|
|
information. Cell metadad has a tag key which is a "A list of string tags on the
|
|
|
|
cell. Commas are not allowed in a tag."
|
|
|
|
|
|
|
|
Best place to set the tag key is when generating [[content]] for saving a notebook.
|
|
|
|
|