diff --git a/crates/repl/src/stdio.rs b/crates/repl/src/stdio.rs index 8b949c7f5f4d9d559f76cc6b0369e0951e698c33..d9a29d8ad3ea35fbb2dee414ac54542d379f5fd0 100644 --- a/crates/repl/src/stdio.rs +++ b/crates/repl/src/stdio.rs @@ -61,11 +61,13 @@ impl TerminalOutput { .iter() .chain(Some(&self.handler.current_text_run)) .map(|ansi_run| { - let color = terminal_view::terminal_element::convert_color(&ansi_run.fg, theme); - let background_color = Some(terminal_view::terminal_element::convert_color( - &ansi_run.bg, + let color = terminal_view::terminal_element::convert_color( + &ansi_run.fg.unwrap_or(Color::Named(NamedColor::Foreground)), theme, - )); + ); + let background_color = ansi_run + .bg + .map(|bg| terminal_view::terminal_element::convert_color(&bg, theme)); TextRun { len: ansi_run.len, @@ -99,21 +101,11 @@ impl LineHeight for TerminalOutput { } } -#[derive(Clone)] +#[derive(Clone, Default)] struct AnsiTextRun { len: usize, - fg: alacritty_terminal::vte::ansi::Color, - bg: alacritty_terminal::vte::ansi::Color, -} - -impl AnsiTextRun { - fn default() -> Self { - Self { - len: 0, - fg: Color::Named(NamedColor::Foreground), - bg: Color::Named(NamedColor::Background), - } - } + fg: Option, + bg: Option, } struct TerminalHandler { @@ -126,11 +118,7 @@ impl TerminalHandler { fn new() -> Self { Self { text_runs: Vec::new(), - current_text_run: AnsiTextRun { - len: 0, - fg: Color::Named(NamedColor::Foreground), - bg: Color::Named(NamedColor::Background), - }, + current_text_run: AnsiTextRun::default(), buffer: String::new(), } } @@ -159,15 +147,11 @@ impl TerminalHandler { self.text_runs.push(self.current_text_run.clone()); } - let mut text_run = AnsiTextRun { - len: 0, - fg: self.current_text_run.fg, - bg: self.current_text_run.bg, - }; + let mut text_run = AnsiTextRun::default(); match attr { - Attr::Foreground(color) => text_run.fg = color, - Attr::Background(color) => text_run.bg = color, + Attr::Foreground(color) => text_run.fg = Some(color), + Attr::Background(color) => text_run.bg = Some(color), _ => {} } diff --git a/docs/src/repl.md b/docs/src/repl.md index 4890d478f70893844044b83f787530ab25d0703a..586a9f359d9eccc5dfa5e3cd167fe94aa7da8fc2 100644 --- a/docs/src/repl.md +++ b/docs/src/repl.md @@ -1,29 +1,11 @@ # REPL -Read. Eval. Print. Loop. - -
- -This feature is in active development. Details may change. We're delighted to get feedback as the REPL feature evolves. - -
- ## Getting started -Bring the power of [Jupyter kernels](https://docs.jupyter.org/en/latest/projects/kernels.html) to your editor! The built-in REPL for Zed allows you to run code interactively in your editor similarly to a notebook with your own text files. +Bring the power of [Jupyter kernels](https://docs.jupyter.org/en/latest/projects/kernels.html) to your editor! The built--in REPL for Zed allows you to run code interactively in your editor similarly to a notebook with your own text files. -To start using the REPL, add the following to your Zed `settings.json`: - -```json -{ - "jupyter": { - "enabled": true - } -} -``` - ## Installation Zed supports running code in multiple languages. To get started, you need to install a kernel for the language you want to use. @@ -33,7 +15,6 @@ Zed supports running code in multiple languages. To get started, you need to ins * [Python (ipykernel)](#python) * [TypeScript (Deno)](#typescript-deno) - Once installed, you can start using the REPL in the respective language files, or other places those languages are supported, such as Markdown. @@ -46,48 +27,6 @@ The `repl: run` command will be executed on your selection(s), and the result wi Outputs can be cleared with the `repl: clear outputs` command, or from the REPL menu in the toolbar. -## Changing which kernel is used per language {#changing-kernels} - -Assign kernels by name to languages in your `settings.json`. - -```jsonc -{ - "jupyter": { - "kernel_selections": { - "python": "conda-env", - "typescript": "deno-debug" - } - } -} -``` - -If you have `jupyter` installed, you can run `jupyter kernelspec list` to see the available kernels. - -``` -$ jupyter kernelspec list -Available kernels: - ark /Users/z/Library/Jupyter/kernels/ark - conda-base /Users/z/Library/Jupyter/kernels/conda-base - deno /Users/z/Library/Jupyter/kernels/deno - deno-debug /Users/z/Library/Jupyter/kernels/deno-debug - deno-release /Users/z/Library/Jupyter/kernels/deno-release - python-chatlab-dev /Users/z/Library/Jupyter/kernels/python-chatlab-dev - python3 /Users/z/Library/Jupyter/kernels/python3 - ruby /Users/z/Library/Jupyter/kernels/ruby - rust /Users/z/Library/Jupyter/kernels/rust -``` - -Note: Zed will not find kernels nested within your Python `sys.prefix`, shown here as `/Users/z/.pyenv/versions/miniconda3-latest/`. - -``` -$ jupyter kernelspec list -Available kernels: - conda-base /Users/z/Library/Jupyter/kernels/conda-base - python3 /Users/z/.pyenv/versions/miniconda3-latest/share/jupyter/kernels/python3 -``` - -You must run `python -m ipykernel install --user` to install the kernel. - ## Language specific instructions ### Python {#python} @@ -100,7 +39,6 @@ On MacOS, your system Python will _not_ work. Either set up [pyenv](https://gith - To setup your current python to have an available kernel, run: ``` @@ -116,7 +54,6 @@ conda install ipykernel python -m ipykernel install --user --name myenv --display-name "Python (myenv)" ``` - #### Virtualenv with pip ``` @@ -130,7 +67,7 @@ python -m ipykernel install --user --name myenv --display-name "Python (myenv)" [Install Deno](https://docs.deno.com/runtime/manual/getting_started/installation/) and then install the Deno jupyter kernel: ``` -deno jupyter --unstable --install +deno jupyter --install ``` ### Other languages @@ -142,3 +79,45 @@ The following languages and kernels are also supported. You can help us out by e - [Ark Kernel](https://github.com/posit-dev/ark) - via Positron, formerly RStudio - [Xeus-R](https://github.com/jupyter-xeus/xeus-r) * [Scala (almond)](https://almond.sh/docs/quick-start-install) + +## Changing which kernel is used per language {#changing-kernels} + +Zed automatically detects the available kernels on your system. If you need to configure a different default kernel for a +language, you can assign a kernel for any supported language in your `settings.json`. + +```jsonc +{ + "jupyter": { + "kernel_selections": { + "python": "conda-env", + "typescript": "deno", + "javascript": "deno" + } + } +} +``` + +If you have `jupyter` installed, you can run `jupyter kernelspec list` to see the available kernels. + +``` +$ jupyter kernelspec list +Available kernels: + ark /Users/z/Library/Jupyter/kernels/ark + conda-base /Users/z/Library/Jupyter/kernels/conda-base + deno /Users/z/Library/Jupyter/kernels/deno + python-chatlab-dev /Users/z/Library/Jupyter/kernels/python-chatlab-dev + python3 /Users/z/Library/Jupyter/kernels/python3 + ruby /Users/z/Library/Jupyter/kernels/ruby + rust /Users/z/Library/Jupyter/kernels/rust +``` + +Note: Zed will not find kernels nested within your Python `sys.prefix`, shown here as `/Users/z/.pyenv/versions/miniconda3-latest/`. + +``` +$ jupyter kernelspec list +Available kernels: + conda-base /Users/z/Library/Jupyter/kernels/conda-base + python3 /Users/z/.pyenv/versions/miniconda3-latest/share/jupyter/kernels/python3 +``` + +You must run `python -m ipykernel install --user` to install the kernel.