Metadata-Version: 2.1
Name: zsh-jupyter-kernel
Version: 3.4.1
Summary: Z shell kernel for Jupyter
Home-page: https://github.com/dany-oak/zsh-jupyter-kernel
Author: Dan Oak
Author-email: curly-brace-17@protonmail.com
License: WTFPL
Keywords: jupyter,ipython,zsh,shell,kernel
Classifier: Development Status :: 3 - Alpha
Classifier: Framework :: IPython
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Education
Classifier: Intended Audience :: Information Technology
Classifier: Intended Audience :: System Administrators
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
Classifier: Operating System :: Unix
Classifier: Operating System :: MacOS
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Other Scripting Engines
Classifier: Topic :: System :: Shells
Requires-Python: >=3
Description-Content-Type: text/markdown
Requires-Dist: ipykernel
Requires-Dist: jupyter-client
Requires-Dist: IPython
Requires-Dist: pexpect

# zsh kernel for jupyter

a simple z shell jupyter kernel powered by pexpect and enthusiasm

support link: https://ko-fi.com/danoak


## installation

### pipenv
```sh
pipenv --python 3 install notebook zsh_jupyter_kernel
pipenv run python -m zsh_jupyter_kernel.install --sys-prefix
```

### pip
```sh
python3 -m pip install notebook zsh_jupyter_kernel
python3 -m zsh_jupyter_kernel.install --sys-prefix
```


## technical overview

### how does code execution work  
the kernel configures zsh prompt string to its own custom value.  
when a user requests a cell execution, the code is sent to kernel.   
then the kernel puts the frontend on hold, sends the code to zsh process, and waits for the prompt string to release the frontend and let user request more code execution.

### code completion
code completion is powered by quite a non-trivial script that involves multiple steps including spawning another temporary zsh process and capturing completion options into a data structure that jupyter frontend understands.

### code inspection
code inspection is done by `man --pager ul` which sends the whole man page to the frontend.

### code completeness
code completeness is checked with the temporary zsh process and help of `EXEC` zsh option which allows to switch off code execution and simply check if the code is complete using the exit code of the zsh process itself.

### stderr 
stderr content is just send to the front-end as regular stdout.

### stdin
stdin is not supported because of the execution system when a process spawned by user waits for stdin, there is no way to detect it.

### missing features
- history
- rich html output for things like images and tables
- stdin. might be possible with or without the current system 
- pagers. might be possible or not
- stored and referenceable outputs
 
