* Rename `jupyter-code-context-at-point` to `jupyter-code-context`
* Use `cl-defmethod` and specializers to handle the
different kinds of contexts
* Move the newly defined code context methods to their
appropriate locations
* Define new method `jupyter-kernel-info` which takes care
of caching the result of a kernel info request. All
access of the kernel info plist should happen through
this method.
* Do not return the kernel info plist in
`jupyter-start-new-kernel`, callers should access the
kernel info through `jupyter-kernel-info`
Since IDs of requests are generated in the parent Emacs process, there is no
need to pass back the ID of a request from the child process that send
messages.
* Remove field properties when inserting prompts and all other read only
inserts.
* Abstract out the bulk of `jupyter-repl-after-buffer-change` into the new
function `jupyter-repl-insert-continuation-prompts`.
* Add `jupyter-repl-mark-as-cell-code` which sets the `field` property of text
to `cell-code` only if inserted text is part of a code cell. Do this in
`jupyter-repl-after-buffer-change` after inserting continuation prompts.
If we are getting the code of the last cell in the buffer, `forward-line` will
return 0 when attempting to move past the last line of the buffer and `point`
will be at `point-max`.
* Set the lazy highlight limit to only look at the current cell
* Simplify `jupyter-repl-history-next` and `jupyter-repl-history-previous`
* Properly restore isearch state when searching through history
* Add tests for REPL history navigation
When `point` is already at the beginning of the first cell in a REPL buffer,
`jupyter-repl-previous-cell` would say that a motion was performed when in
reality it hadn't.
* Replace `jupyter-repl--insert-prompt` with `jupyter-repl--make-prompt` which
only makes the prompt overlay and adds text properties to the overlayed
character. `jupyter-repl--insert-prompt` would also insert the newline
character for the overlay as well as recenter the overlays. These tasks are
now handled by `jupyter-repl-insert-prompt`.
* Add notes on why an invisible character is inserted along with the prompts.
* `jupyter-repl-cell-code` properly handles invisible characters introduced by
line continuation prompts.
* Don't make the invisible character inserted by continuation prompts
read-only.
* Use a marker to keep track of the end position of the cell when inserting
continuation prompts.
* Guard against searching past boundary when inserting continuation prompts
- Be more obvious in `jupyter-repl-ret`
- Prefer shorter lines in `js/emacs-jupyter.js`
- Add `jupyter-repl-language`
- Refactor `jupyter-handle-error` for `jupyter-repl-client's
- Include margin width when fixing traceback spacing for python kernels
- Extract out special handling of python kernels in `jupyter-handle-error`