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
* Handle the case of no time specification by defaulting to midnight when
decoding time
* Properly handle fractions in `jupyter--decode-time`
* Implement `jupyter--encode-time`
* Consider a time object to be a length 4 list of integers and encode the
object using `jupyter--encode-time` when encoding in `jupyter--encode`
* Add tests for time decoding/encoding
- A `jupyter-org-client` is a subclass of a `jupyter-repl-client` and replaces
the use of callbacks in `org-babel-execute:jupyter` to handle the insertion
of code block results in an `org-mode` buffer. `ob-jupyter.el` now only
contains the integration with `org-babel` and all integration with
`emcacs-jupyter` is placed in `jupyter-org-client.el`
- Introduce `jupyter-org-request`, which inherits all of the field of a
`jupyter-request` and adds the fields necessary for keeping track of the
source code block information a request was generated from during the
lifetime of the request.
- Add the method `jupyter-generate-request` to allow subclasses to initialize
their own request objects with extra fields in addition to those of
`jupyter-request`.
- Add the method `jupyter-drop-request` to allow subclasses to do any cleanup
once a request is complete.
* Use the `target-name` argument in `jupyter-handle-comm-open`
* Remove hard-coded URL format and use the new variable
`jupyter-widgets-url-format` instead
* Add `jupyter-widgets-supported-targets` to explicitly state which widget
targets are supported
* Rename `widget-proc` to `widget-sock` in a `jupyter-widget-client`
* Initialize the widget socket only when opening a valid comm
* Previously it was initialized when the client was initialized, but a client
may not even create any widgets so the widget socket would be unused.
* Use `pcase` in `jupyter-widgets-on-message`
* Update documentation and commentary of `jupyter-widget-client`