# Make Tab key insert tabs

**URL:** <https://discourse.jupyter.org/t/make-tab-key-insert-tabs/25182>\
**Category:** Notebook\
**Tags:** how-to\
**Created:** [April 15, 2024, 8:10am UTC](https://discourse.jupyter.org/t/make-tab-key-insert-tabs/25182 "2024-04-15T08:10:54Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![mr\_guy99493](https://avatars.discourse-cdn.com/v4/letter/m/8edcca/32.png) [@mr\_guy99493](https://discourse.jupyter.org/u/mr_guy99493)\
**Post date:** [April 15, 2024, 8:10am UTC](https://discourse.jupyter.org/t/make-tab-key-insert-tabs/25182/1 "2024-04-15T08:10:54Z")

</div>

Is it possible to prevent the [tab] key from doing autocomplete/suggestions in notebook, and instead add a tab, as expected?

I have tried adding `"disabled" : true` to various entries in the `shortcuts.jupyterlab-settings` file, but it doesn’t seem to have any effect,

Code completion is not enabled, (default) in the jupyterlab settings window, so I’m not even sure what is firing the dropdown tooltips.

This is not a question of line indentation, which works. I want the ability to tab the `=` signs on successive lines so that they line up - with tabs, not spaces.

First two lines are tabbed as desired by copy-pasting tab characters, so tabs are possible, but pressing tab on the next line shows this annoying dropdown instead.  
 ![image](https://canada1.discourse-cdn.com/flex031/uploads/jupyter/original/2X/6/65c26d1381208f43f74f3b616e7b16f9d8298919.png)

---

<div class="post-metadata">

**Author:** ![krassowski](https://yyz1.discourse-cdn.com/flex031/user_avatar/discourse.jupyter.org/krassowski/32/1685_2.png) [@krassowski](https://discourse.jupyter.org/u/krassowski)\
**Post date:** [April 15, 2024, 8:58am UTC](https://discourse.jupyter.org/t/make-tab-key-insert-tabs/25182/2 "2024-04-15T08:58:31Z")

</div>

Supporting this will require a change in JupyterLab in `indentMoreOrInsertTab` function so that it does not short-circiut when completer is enabled (and skipping the default `Tab` handler from CM6). This should be easy to do. Can you check if there is an issue on [Issues · jupyterlab/jupyterlab · GitHub](https://github.com/jupyterlab/jupyterlab/issues) and if not, open one?

> I have tried adding `"disabled" : true` to various entries in the `shortcuts.jupyterlab-settings` file, but it doesn’t seem to have any effect,

Did you try adding this in JSON Setting Editor instead? In any case, I would suggest testing out JupyterLab 4.2.0 beta which supports disabling default shortcuts from the shortcut editor.

---

<div class="post-metadata">

**Author:** ![mr\_guy99493](https://avatars.discourse-cdn.com/v4/letter/m/8edcca/32.png) [@mr\_guy99493](https://discourse.jupyter.org/u/mr_guy99493)\
**Post date:** [April 15, 2024, 9:21am UTC](https://discourse.jupyter.org/t/make-tab-key-insert-tabs/25182/3 "2024-04-15T09:21:04Z")

</div>

Editing the json in the advanced settings editor in the beta seems to have prevented the tooltip showing up - progress, thanks!

Can you hint at whether its simple for me to manually edit `indentMoreOrInsertTab` (which file?), and where some direction to enable tabs?

---

<div class="post-metadata">

**Author:** ![krassowski](https://yyz1.discourse-cdn.com/flex031/user_avatar/discourse.jupyter.org/krassowski/32/1685_2.png) [@krassowski](https://discourse.jupyter.org/u/krassowski)\
**Post date:** [April 15, 2024, 9:27am UTC](https://discourse.jupyter.org/t/make-tab-key-insert-tabs/25182/4 "2024-04-15T09:27:03Z")

</div>

No, while it would be easy to edit, it would be rather involved to compile; I would instead encourage you to make a pull request, it would be pretty similar to [Fix accepting completion with `Enter` by krassowski · Pull Request #16156 · jupyterlab/jupyterlab · GitHub](https://github.com/jupyterlab/jupyterlab/pull/16156)

Or just open an issue and I will take care of it 😉

---

<div class="post-metadata">

**Author:** ![mr\_guy99493](https://avatars.discourse-cdn.com/v4/letter/m/8edcca/32.png) [@mr\_guy99493](https://discourse.jupyter.org/u/mr_guy99493)\
**Post date:** [April 15, 2024, 9:52am UTC](https://discourse.jupyter.org/t/make-tab-key-insert-tabs/25182/5 "2024-04-15T09:52:16Z")

</div>

Ok, thanks, I couldnt see any issues when I looked before posting here, so made a new one:

> <https://github.com/jupyterlab/jupyterlab/issues/16164>
>
> \## Description
> 
> Is it possible to prevent the \[tab\] key from doing autocomplet…e/suggestions in notebook, and instead add a tab, as expected?
> 
> I tried adding "disabled" : true to various entries in the shortcuts.jupyterlab-settings file, but it doesn’t seem to have any effect until using a beta as suggested in the discourse link below.
> 
> Code completion is not enabled, (default) in the jupyterlab settings window, so I’m not even sure what is firing the dropdown tooltips.
> 
> This is not a question of line indentation, which works. I want the ability to tab the = signs on successive lines so that they line up - with tabs, not spaces.
> 
> First two lines are tabbed as desired by copy-pasting tab characters, so tabs are possible, but pressing tab on the next line shows this annoying dropdown instead.
> 
> !\[image\](https://github.com/jupyterlab/jupyterlab/assets/59213467/64df8027-5da2-414a-8ffe-e5e22f0fd13e)
> 
> With the beta and json disabling tabs using json below, the behaviour changes to: pressing tab activates the notebook's tab in the tab status bar 
> !\[image\](https://github.com/jupyterlab/jupyterlab/assets/59213467/7000e5e3-7c78-471d-a656-cf8bbceaca7f)
> 
> \`\`\`json
> {
> "command": "completer:invoke-console",
> "selector": ".jp-CodeConsole-promptCell .jp-mod-completer-enabled",
> "keys": \[
> "Tab"
> \],
> "disabled": true
> },
> {
> "command": "completer:invoke-notebook",
> "selector": ".jp-Notebook.jp-mod-editMode .jp-mod-completer-enabled",
> "keys": \[
> "Tab"
> \],
> "disabled": true
> },
> {
> "command": "completer:invoke-file",
> "selector": ".jp-FileEditor .jp-mod-completer-enabled",
> "keys": \[
> "Tab"
> \],
> "disabled": true
> }
> \`\`\`
> 
> \## Reproduce
> 
> Open a notebook, in a code block type a word, space, then tab.
> 
> \## Expected behavior
> 
> \\t tab character is inserted
> 
> \## Context
> 
> https://discourse.jupyter.org/t/make-tab-key-insert-tabs/25182
> 
> 
> 
> 
> \- Operating System and version: Fedora 
> \- Browser and version: Brave (Chromium) 1.64.122
> \- JupyterLab version: Version 4.2.0b1
> 
> \<details\>\<summary\>Troubleshoot Output\</summary\>
> \<pre\>jupyter troubleshoot
> $PATH:
> /home/driver/miniconda3/envs/cling/bin
> /home/driver/miniconda3/condabin
> /usr/lib64/ccache
> /usr/local/bin
> /usr/bin
> /bin
> /usr/local/sbin
> /usr/sbin
> /sbin
> /home/driver/.local/bin
> /home/driver/.local/bin
> /home/driver/.local/bin
> 
> sys.path:
> /home/driver/miniconda3/envs/cling/bin
> /home/driver/miniconda3/envs/cling/lib/python312.zip
> /home/driver/miniconda3/envs/cling/lib/python3.12
> /home/driver/miniconda3/envs/cling/lib/python3.12/lib-dynload
> /home/driver/.local/lib/python3.12/site-packages
> /home/driver/miniconda3/envs/cling/lib/python3.12/site-packages
> 
> sys.executable:
> /home/driver/miniconda3/envs/cling/bin/python
> 
> sys.version:
> 3.12.2 | packaged by conda-forge | (main, Feb 16 2024, 20:50:58) \[GCC 12.3.0\]
> 
> platform.platform():
> Linux-6.8.4-200.fc39.x86\_64-x86\_64-with-glibc2.38
> 
> which -a jupyter:
> /home/driver/miniconda3/envs/cling/bin/jupyter
> 
> pip list:
> Package Version
> ------------------------- ------------
> anyio 4.2.0
> argon2-cffi 21.3.0
> argon2-cffi-bindings 21.2.0
> asttokens 2.0.5
> async-lru 2.0.4
> attrs 23.1.0
> Babel 2.11.0
> beautifulsoup4 4.12.2
> bleach 4.1.0
> blinker 1.7.0
> Brotli 1.0.9
> certifi 2024.2.2
> cffi 1.16.0
> charset-normalizer 2.0.4
> comm 0.2.1
> contourpy 1.2.1
> cycler 0.12.1
> debugpy 1.6.7
> decorator 5.1.1
> defusedxml 0.7.1
> dnspython 2.6.1
> executing 0.8.3
> fastjsonschema 2.16.2
> Flask 3.0.3
> fonttools 4.51.0
> h11 0.14.0
> h2 4.1.0
> hpack 4.0.0
> httpcore 1.0.5
> httpx 0.27.0
> hyperframe 6.0.1
> idna 3.4
> importlib\_metadata 7.1.0
> importlib\_resources 6.4.0
> ipykernel 6.28.0
> ipython 8.20.0
> ipywidgets 8.1.2
> itsdangerous 2.1.2
> jedi 0.18.1
> Jinja2 3.1.3
> json5 0.9.6
> jsonschema 4.19.2
> jsonschema-specifications 2023.7.1
> jupyter 1.0.0
> jupyter\_client 8.6.0
> jupyter-console 6.6.3
> jupyter\_core 5.5.0
> jupyter-events 0.8.0
> jupyter-lsp 2.2.0
> jupyter\_server 2.10.0
> jupyter\_server\_terminals 0.4.4
> jupyterlab 4.2.0b1
> jupyterlab-pygments 0.1.2
> jupyterlab\_server 2.25.1
> jupyterlab-widgets 3.0.10
> kiwisolver 1.4.5
> MarkupSafe 2.1.5
> matplotlib 3.8.4
> matplotlib-inline 0.1.6
> mistune 2.0.4
> nbclient 0.8.0
> nbconvert 7.10.0
> nbformat 5.9.2
> nest-asyncio 1.6.0
> notebook 7.1.2
> notebook\_shim 0.2.3
> overrides 7.4.0
> packaging 23.2
> pandocfilters 1.5.0
> parso 0.8.3
> pexpect 4.8.0
> pillow 10.3.0
> pip 23.3.1
> platformdirs 3.10.0
> plotly 5.20.0
> ply 3.11
> prometheus-client 0.14.1
> prompt-toolkit 3.0.43
> psutil 5.9.0
> ptyprocess 0.7.0
> pure-eval 0.2.2
> pycparser 2.21
> Pygments 2.15.1
> pymongo 4.6.3
> pyparsing 3.1.2
> PyQt5 5.15.10
> PyQt5-sip 12.13.0
> PySocks 1.7.1
> python-dateutil 2.8.2
> python-json-logger 2.0.7
> pytz 2023.3.post1
> PyYAML 6.0.1
> pyzmq 25.1.2
> qtconsole 5.5.1
> QtPy 2.4.1
> referencing 0.30.2
> requests 2.31.0
> rfc3339-validator 0.1.4
> rfc3986-validator 0.1.1
> rpds-py 0.10.6
> scipy 1.13.0
> Send2Trash 1.8.2
> setuptools 68.2.2
> sip 6.7.12
> six 1.16.0
> sniffio 1.3.0
> soupsieve 2.5
> stack-data 0.2.0
> tenacity 8.2.3
> terminado 0.17.1
> tinycss2 1.2.1
> tomli 2.0.1
> tornado 6.3.3
> traitlets 5.7.1
> typing\_extensions 4.9.0
> urllib3 2.1.0
> wcwidth 0.2.5
> webencodings 0.5.1
> websocket-client 0.58.0
> Werkzeug 3.0.2
> wheel 0.41.2
> widgetsnbextension 4.0.10
> zipp 3.17.0
> 
> conda list:
> # packages in environment at /home/driver/miniconda3/envs/cling:
> #
> # Name Version Build Channel
> \_libgcc\_mutex 0.1 conda\_forge conda-forge
> \_openmp\_mutex 4.5 2\_gnu conda-forge
> alsa-lib 1.2.11 hd590300\_1 conda-forge
> anyio 4.2.0 py312h06a4308\_0  
> argon2-cffi 21.3.0 pyhd3eb1b0\_0  
> argon2-cffi-bindings 21.2.0 py312h5eee18b\_0  
> asttokens 2.0.5 pyhd3eb1b0\_0  
> async-lru 2.0.4 py312h06a4308\_0  
> attr 2.5.1 h166bdaf\_1 conda-forge
> attrs 23.1.0 py312h06a4308\_0  
> babel 2.11.0 py312h06a4308\_0  
> beautifulsoup4 4.12.2 py312h06a4308\_0  
> binutils\_impl\_linux-64 2.39 he00db2b\_1 conda-forge
> binutils\_linux-64 2.39 h5fc0e48\_13 conda-forge
> bleach 4.1.0 pyhd3eb1b0\_0  
> brotli-python 1.0.9 py312h6a678d5\_7  
> bzip2 1.0.8 h5eee18b\_5  
> ca-certificates 2024.3.11 h06a4308\_0  
> cairo 1.18.0 h3faef2a\_0 conda-forge
> certifi 2024.2.2 pyhd8ed1ab\_0 conda-forge
> cffi 1.16.0 py312h5eee18b\_0  
> charset-normalizer 2.0.4 pyhd3eb1b0\_0  
> clang 9.0.1 cling\_v0.9\_hf01e6bc\_5 conda-forge
> clang-9 9.0.1 cling\_v0.9\_h6699504\_5 conda-forge
> clang-tools 9.0.1 cling\_v0.9\_h1e27157\_5 conda-forge
> clangdev 9.0.1 cling\_v0.9\_h1e27157\_5 conda-forge
> clangxx 9.0.1 cling\_v0.9\_he14baed\_5 conda-forge
> cling 0.9 he0ac6c6\_1 conda-forge
> comm 0.2.1 py312h06a4308\_0  
> cppzmq 4.10.0 h2e2a08d\_1 conda-forge
> dbus 1.13.18 hb2f20db\_0  
> debugpy 1.6.7 py312h6a678d5\_0  
> decorator 5.1.1 pyhd3eb1b0\_0  
> defusedxml 0.7.1 pyhd3eb1b0\_0  
> executing 0.8.3 pyhd3eb1b0\_0  
> expat 2.6.2 h59595ed\_0 conda-forge
> font-ttf-dejavu-sans-mono 2.37 hd3eb1b0\_0  
> font-ttf-inconsolata 2.001 hcb22688\_0  
> font-ttf-source-code-pro 2.030 hd3eb1b0\_0  
> font-ttf-ubuntu 0.83 h8b1ccd4\_0  
> fontconfig 2.14.2 h14ed4e7\_0 conda-forge
> fonts-anaconda 1 h8fa9717\_0  
> fonts-conda-ecosystem 1 hd3eb1b0\_0  
> freetype 2.12.1 h4a9f257\_0  
> gcc\_impl\_linux-64 10.4.0 h5231bdf\_19 conda-forge
> gcc\_linux-64 10.4.0 h9215b83\_13 conda-forge
> gettext 0.22.5 h59595ed\_2 conda-forge
> gettext-tools 0.22.5 h59595ed\_2 conda-forge
> glib 2.80.0 hf2295e7\_4 conda-forge
> glib-tools 2.80.0 hde27a5a\_4 conda-forge
> graphite2 1.3.14 h295c915\_1  
> gst-plugins-base 1.24.1 hfa15dee\_1 conda-forge
> gstreamer 1.24.1 h98fc4e7\_1 conda-forge
> gxx\_impl\_linux-64 10.4.0 h5231bdf\_19 conda-forge
> gxx\_linux-64 10.4.0 h6e491c6\_13 conda-forge
> h11 0.14.0 pyhd8ed1ab\_0 conda-forge
> h2 4.1.0 pyhd8ed1ab\_0 conda-forge
> harfbuzz 8.3.0 h3d44ed6\_0 conda-forge
> hpack 4.0.0 pyh9f0ad1d\_0 conda-forge
> httpcore 1.0.5 pyhd8ed1ab\_0 conda-forge
> httpx 0.27.0 pyhd8ed1ab\_0 conda-forge
> hyperframe 6.0.1 pyhd8ed1ab\_0 conda-forge
> icu 73.2 h59595ed\_0 conda-forge
> idna 3.4 py312h06a4308\_0  
> importlib-metadata 7.1.0 pyha770c72\_0 conda-forge
> importlib\_metadata 7.1.0 hd8ed1ab\_0 conda-forge
> importlib\_resources 6.4.0 pyhd8ed1ab\_0 conda-forge
> ipykernel 6.28.0 py312h06a4308\_0  
> ipython 8.20.0 py312h06a4308\_0  
> ipywidgets 8.1.2 py312h06a4308\_0  
> jedi 0.18.1 py312h06a4308\_1  
> jinja2 3.1.3 py312h06a4308\_0  
> json5 0.9.6 pyhd3eb1b0\_0  
> jsonschema 4.19.2 py312h06a4308\_0  
> jsonschema-specifications 2023.7.1 py312h06a4308\_0  
> jupyter 1.0.0 py312h06a4308\_9  
> jupyter-lsp 2.2.0 py312h06a4308\_0  
> jupyter\_client 8.6.0 py312h06a4308\_0  
> jupyter\_console 6.6.3 py312h06a4308\_1  
> jupyter\_core 5.5.0 py312h06a4308\_0  
> jupyter\_events 0.8.0 py312h06a4308\_0  
> jupyter\_server 2.10.0 py312h06a4308\_0  
> jupyter\_server\_terminals 0.4.4 py312h06a4308\_1  
> jupyterlab 4.2.0b1 pyh62ca5b2\_0 conda-forge/label/jupyterlab\_beta
> jupyterlab\_pygments 0.1.2 py\_0  
> jupyterlab\_server 2.25.1 py312h06a4308\_0  
> jupyterlab\_widgets 3.0.10 py312h06a4308\_0  
> kernel-headers\_linux-64 2.6.32 he073ed8\_17 conda-forge
> keyutils 1.6.1 h166bdaf\_0 conda-forge
> krb5 1.21.2 h659d440\_0 conda-forge
> lame 3.100 h7b6447c\_0  
> ld\_impl\_linux-64 2.39 hcc3a1bd\_1 conda-forge
> libasprintf 0.22.5 h661eb56\_2 conda-forge
> libasprintf-devel 0.22.5 h661eb56\_2 conda-forge
> libcap 2.69 h0f662aa\_0 conda-forge
> libclang 9.0.1 cling\_v0.9\_h1e27157\_5 conda-forge
> libclang-cpp 9.0.1 cling\_v0.9\_h6699504\_5 conda-forge
> libclang-cpp15 15.0.7 default\_h127d8a8\_5 conda-forge
> libclang-cpp9 9.0.1 cling\_v0.9\_h6699504\_5 conda-forge
> libclang13 18.1.3 default\_h5d6823c\_0 conda-forge
> libcups 2.3.3 h4637d8d\_4 conda-forge
> libedit 3.1.20230828 h5eee18b\_0  
> libevent 2.1.12 hdbd6064\_1  
> libexpat 2.6.2 h59595ed\_0 conda-forge
> libffi 3.4.4 h6a678d5\_0  
> libflac 1.4.3 h59595ed\_0 conda-forge
> libgcc-devel\_linux-64 10.4.0 hd38fd1e\_19 conda-forge
> libgcc-ng 13.2.0 h807b86a\_5 conda-forge
> libgcrypt 1.10.3 hd590300\_0 conda-forge
> libgettextpo 0.22.5 h59595ed\_2 conda-forge
> libgettextpo-devel 0.22.5 h59595ed\_2 conda-forge
> libglib 2.80.0 hf2295e7\_4 conda-forge
> libgomp 13.2.0 h807b86a\_5 conda-forge
> libgpg-error 1.48 h71f35ed\_0 conda-forge
> libiconv 1.17 hd590300\_2 conda-forge
> libjpeg-turbo 3.0.0 hd590300\_1 conda-forge
> libllvm15 15.0.7 hb3ce162\_4 conda-forge
> libllvm18 18.1.3 h2448989\_0 conda-forge
> libllvm9 9.0.1 default\_hc23dcda\_7 conda-forge
> libnsl 2.0.1 hd590300\_0 conda-forge
> libogg 1.3.5 h27cfd23\_1  
> libopus 1.3.1 h7b6447c\_0  
> libpng 1.6.43 h2797004\_0 conda-forge
> libpq 16.2 h33b98f1\_1 conda-forge
> libsanitizer 10.4.0 h5246dfb\_19 conda-forge
> libsndfile 1.2.2 hc60ed4a\_1 conda-forge
> libsodium 1.0.18 h36c2ea0\_1 conda-forge
> libsqlite 3.45.2 h2797004\_0 conda-forge
> libstdcxx-devel\_linux-64 10.4.0 hd38fd1e\_19 conda-forge
> libstdcxx-ng 13.2.0 h7e041cc\_5 conda-forge
> libsystemd0 255 h3516f8a\_1 conda-forge
> libuuid 2.38.1 h0b41bf4\_0 conda-forge
> libvorbis 1.3.7 h7b6447c\_0  
> libxcb 1.15 h7f8727e\_0  
> libxcrypt 4.4.36 hd590300\_1 conda-forge
> libxkbcommon 1.7.0 h662e7e4\_0 conda-forge
> libxml2 2.12.6 h232c23b\_1 conda-forge
> libzlib 1.2.13 hd590300\_5 conda-forge
> llvm-tools 9.0.1 cling\_v0.9\_h2b820e9\_7 conda-forge
> llvmdev 9.0.1 cling\_v0.9\_h2b820e9\_7 conda-forge
> lz4-c 1.9.4 h6a678d5\_0  
> markupsafe 2.1.3 py312h5eee18b\_0  
> matplotlib-inline 0.1.6 py312h06a4308\_0  
> mistune 2.0.4 py312h06a4308\_0  
> mpg123 1.32.6 h59595ed\_0 conda-forge
> mysql-common 8.3.0 hf1915f5\_4 conda-forge
> mysql-libs 8.3.0 hca2cd23\_4 conda-forge
> nbclient 0.8.0 py312h06a4308\_0  
> nbconvert 7.10.0 py312h06a4308\_0  
> nbformat 5.9.2 py312h06a4308\_0  
> ncurses 6.4 h6a678d5\_0  
> nest-asyncio 1.6.0 py312h06a4308\_0  
> nlohmann\_json 3.11.3 h59595ed\_0 conda-forge
> notebook 7.1.2 pyhd8ed1ab\_0 conda-forge
> notebook-shim 0.2.3 py312h06a4308\_0  
> nspr 4.35 h6a678d5\_0  
> nss 3.98 h1d7d5a4\_0 conda-forge
> openssl 3.2.1 hd590300\_1 conda-forge
> overrides 7.4.0 py312h06a4308\_0  
> packaging 23.2 py312h06a4308\_0  
> pandocfilters 1.5.0 pyhd3eb1b0\_0  
> parso 0.8.3 pyhd3eb1b0\_0  
> pcre2 10.43 hcad00b1\_0 conda-forge
> pexpect 4.8.0 pyhd3eb1b0\_3  
> pip 23.3.1 py312h06a4308\_0  
> pixman 0.43.2 h59595ed\_0 conda-forge
> platformdirs 3.10.0 py312h06a4308\_0  
> ply 3.11 py312h06a4308\_1  
> prometheus\_client 0.14.1 py312h06a4308\_0  
> prompt-toolkit 3.0.43 py312h06a4308\_0  
> prompt\_toolkit 3.0.43 hd3eb1b0\_0  
> psutil 5.9.0 py312h5eee18b\_0  
> ptyprocess 0.7.0 pyhd3eb1b0\_2  
> pugixml 1.14 h59595ed\_0 conda-forge
> pulseaudio-client 17.0 hb77b528\_0 conda-forge
> pure\_eval 0.2.2 pyhd3eb1b0\_0  
> pycparser 2.21 pyhd3eb1b0\_0  
> pygments 2.15.1 py312h06a4308\_1  
> pyqt 5.15.10 py312h6a678d5\_0  
> pyqt5-sip 12.13.0 py312h5eee18b\_0  
> pysocks 1.7.1 py312h06a4308\_0  
> python 3.12.2 hab00c5b\_0\_cpython conda-forge
> python-dateutil 2.8.2 pyhd3eb1b0\_0  
> python-fastjsonschema 2.16.2 py312h06a4308\_0  
> python-json-logger 2.0.7 py312h06a4308\_0  
> pytz 2023.3.post1 py312h06a4308\_0  
> pyyaml 6.0.1 py312h5eee18b\_0  
> pyzmq 25.1.2 py312h6a678d5\_0  
> qt-main 5.15.8 hc9dc06e\_21 conda-forge
> qtconsole 5.5.1 py312h06a4308\_0  
> qtpy 2.4.1 py312h06a4308\_0  
> readline 8.2 h5eee18b\_0  
> referencing 0.30.2 py312h06a4308\_0  
> requests 2.31.0 py312h06a4308\_1  
> rfc3339-validator 0.1.4 py312h06a4308\_0  
> rfc3986-validator 0.1.1 py312h06a4308\_0  
> rpds-py 0.10.6 py312hb02cf49\_0  
> send2trash 1.8.2 py312h06a4308\_0  
> setuptools 68.2.2 py312h06a4308\_0  
> sip 6.7.12 py312h6a678d5\_0  
> six 1.16.0 pyhd3eb1b0\_1  
> sniffio 1.3.0 py312h06a4308\_0  
> soupsieve 2.5 py312h06a4308\_0  
> stack\_data 0.2.0 pyhd3eb1b0\_0  
> sysroot\_linux-64 2.12 he073ed8\_17 conda-forge
> terminado 0.17.1 py312h06a4308\_0  
> tinycss2 1.2.1 py312h06a4308\_0  
> tk 8.6.13 noxft\_h4845f30\_101 conda-forge
> tomli 2.0.1 pyhd8ed1ab\_0 conda-forge
> tornado 6.3.3 py312h5eee18b\_0  
> traitlets 5.7.1 py312h06a4308\_0  
> typing-extensions 4.9.0 py312h06a4308\_1  
> typing\_extensions 4.9.0 py312h06a4308\_1  
> tzdata 2024a h04d1e81\_0  
> urllib3 2.1.0 py312h06a4308\_1  
> wcwidth 0.2.5 pyhd3eb1b0\_0  
> webencodings 0.5.1 py312h06a4308\_2  
> websocket-client 0.58.0 py312h06a4308\_4  
> wheel 0.41.2 py312h06a4308\_0  
> widgetsnbextension 4.0.10 py312h06a4308\_0  
> xcb-util 0.4.0 hd590300\_1 conda-forge
> xcb-util-image 0.4.0 h8ee46fc\_1 conda-forge
> xcb-util-keysyms 0.4.0 h8ee46fc\_1 conda-forge
> xcb-util-renderutil 0.3.9 hd590300\_1 conda-forge
> xcb-util-wm 0.4.1 h8ee46fc\_1 conda-forge
> xeus 3.1.5 h06414e2\_0 conda-forge
> xeus-cling 0.15.3 he80cb83\_2 conda-forge
> xeus-zmq 1.1.1 h6b5a882\_1 conda-forge
> xkeyboard-config 2.41 hd590300\_0 conda-forge
> xorg-kbproto 1.0.7 h7f98852\_1002 conda-forge
> xorg-libice 1.1.1 hd590300\_0 conda-forge
> xorg-libsm 1.2.4 h7391055\_0 conda-forge
> xorg-libx11 1.8.9 h8ee46fc\_0 conda-forge
> xorg-libxau 1.0.11 hd590300\_0 conda-forge
> xorg-libxext 1.3.4 h0b41bf4\_2 conda-forge
> xorg-libxrender 0.9.11 hd590300\_0 conda-forge
> xorg-renderproto 0.11.1 h7f98852\_1002 conda-forge
> xorg-xextproto 7.3.0 h0b41bf4\_1003 conda-forge
> xorg-xf86vidmodeproto 2.3.1 h7f98852\_1002 conda-forge
> xorg-xproto 7.0.31 h27cfd23\_1007  
> xtl 0.7.7 h00ab1b0\_0 conda-forge
> xz 5.4.6 h5eee18b\_0  
> yaml 0.2.5 h7b6447c\_0  
> zeromq 4.3.5 h59595ed\_1 conda-forge
> zipp 3.17.0 pyhd8ed1ab\_0 conda-forge
> zlib 1.2.13 hd590300\_5 conda-forge
> zstd 1.5.5 hc292b87\_0
> 
> conda env:
> name: cling
> channels:
> - conda-forge/label/jupyterlab\_beta
> - conda-forge
> - defaults
> dependencies:
> - \_libgcc\_mutex=0.1=conda\_forge
> - \_openmp\_mutex=4.5=2\_gnu
> - alsa-lib=1.2.11=hd590300\_1
> - anyio=4.2.0=py312h06a4308\_0
> - argon2-cffi=21.3.0=pyhd3eb1b0\_0
> - argon2-cffi-bindings=21.2.0=py312h5eee18b\_0
> - asttokens=2.0.5=pyhd3eb1b0\_0
> - async-lru=2.0.4=py312h06a4308\_0
> - attr=2.5.1=h166bdaf\_1
> - attrs=23.1.0=py312h06a4308\_0
> - babel=2.11.0=py312h06a4308\_0
> - beautifulsoup4=4.12.2=py312h06a4308\_0
> - binutils\_impl\_linux-64=2.39=he00db2b\_1
> - binutils\_linux-64=2.39=h5fc0e48\_13
> - bleach=4.1.0=pyhd3eb1b0\_0
> - brotli-python=1.0.9=py312h6a678d5\_7
> - bzip2=1.0.8=h5eee18b\_5
> - ca-certificates=2024.3.11=h06a4308\_0
> - cairo=1.18.0=h3faef2a\_0
> - certifi=2024.2.2=pyhd8ed1ab\_0
> - cffi=1.16.0=py312h5eee18b\_0
> - charset-normalizer=2.0.4=pyhd3eb1b0\_0
> - clang=9.0.1=cling\_v0.9\_hf01e6bc\_5
> - clang-9=9.0.1=cling\_v0.9\_h6699504\_5
> - clang-tools=9.0.1=cling\_v0.9\_h1e27157\_5
> - clangdev=9.0.1=cling\_v0.9\_h1e27157\_5
> - clangxx=9.0.1=cling\_v0.9\_he14baed\_5
> - cling=0.9=he0ac6c6\_1
> - comm=0.2.1=py312h06a4308\_0
> - cppzmq=4.10.0=h2e2a08d\_1
> - dbus=1.13.18=hb2f20db\_0
> - debugpy=1.6.7=py312h6a678d5\_0
> - decorator=5.1.1=pyhd3eb1b0\_0
> - defusedxml=0.7.1=pyhd3eb1b0\_0
> - executing=0.8.3=pyhd3eb1b0\_0
> - expat=2.6.2=h59595ed\_0
> - font-ttf-dejavu-sans-mono=2.37=hd3eb1b0\_0
> - font-ttf-inconsolata=2.001=hcb22688\_0
> - font-ttf-source-code-pro=2.030=hd3eb1b0\_0
> - font-ttf-ubuntu=0.83=h8b1ccd4\_0
> - fontconfig=2.14.2=h14ed4e7\_0
> - fonts-anaconda=1=h8fa9717\_0
> - fonts-conda-ecosystem=1=hd3eb1b0\_0
> - freetype=2.12.1=h4a9f257\_0
> - gcc\_impl\_linux-64=10.4.0=h5231bdf\_19
> - gcc\_linux-64=10.4.0=h9215b83\_13
> - gettext=0.22.5=h59595ed\_2
> - gettext-tools=0.22.5=h59595ed\_2
> - glib=2.80.0=hf2295e7\_4
> - glib-tools=2.80.0=hde27a5a\_4
> - graphite2=1.3.14=h295c915\_1
> - gst-plugins-base=1.24.1=hfa15dee\_1
> - gstreamer=1.24.1=h98fc4e7\_1
> - gxx\_impl\_linux-64=10.4.0=h5231bdf\_19
> - gxx\_linux-64=10.4.0=h6e491c6\_13
> - h11=0.14.0=pyhd8ed1ab\_0
> - h2=4.1.0=pyhd8ed1ab\_0
> - harfbuzz=8.3.0=h3d44ed6\_0
> - hpack=4.0.0=pyh9f0ad1d\_0
> - httpcore=1.0.5=pyhd8ed1ab\_0
> - httpx=0.27.0=pyhd8ed1ab\_0
> - hyperframe=6.0.1=pyhd8ed1ab\_0
> - icu=73.2=h59595ed\_0
> - idna=3.4=py312h06a4308\_0
> - importlib-metadata=7.1.0=pyha770c72\_0
> - importlib\_metadata=7.1.0=hd8ed1ab\_0
> - importlib\_resources=6.4.0=pyhd8ed1ab\_0
> - ipykernel=6.28.0=py312h06a4308\_0
> - ipython=8.20.0=py312h06a4308\_0
> - ipywidgets=8.1.2=py312h06a4308\_0
> - jedi=0.18.1=py312h06a4308\_1
> - jinja2=3.1.3=py312h06a4308\_0
> - json5=0.9.6=pyhd3eb1b0\_0
> - jsonschema=4.19.2=py312h06a4308\_0
> - jsonschema-specifications=2023.7.1=py312h06a4308\_0
> - jupyter=1.0.0=py312h06a4308\_9
> - jupyter-lsp=2.2.0=py312h06a4308\_0
> - jupyter\_client=8.6.0=py312h06a4308\_0
> - jupyter\_console=6.6.3=py312h06a4308\_1
> - jupyter\_core=5.5.0=py312h06a4308\_0
> - jupyter\_events=0.8.0=py312h06a4308\_0
> - jupyter\_server=2.10.0=py312h06a4308\_0
> - jupyter\_server\_terminals=0.4.4=py312h06a4308\_1
> - jupyterlab=4.2.0b1=pyh62ca5b2\_0
> - jupyterlab\_pygments=0.1.2=py\_0
> - jupyterlab\_server=2.25.1=py312h06a4308\_0
> - jupyterlab\_widgets=3.0.10=py312h06a4308\_0
> - kernel-headers\_linux-64=2.6.32=he073ed8\_17
> - keyutils=1.6.1=h166bdaf\_0
> - krb5=1.21.2=h659d440\_0
> - lame=3.100=h7b6447c\_0
> - ld\_impl\_linux-64=2.39=hcc3a1bd\_1
> - libasprintf=0.22.5=h661eb56\_2
> - libasprintf-devel=0.22.5=h661eb56\_2
> - libcap=2.69=h0f662aa\_0
> - libclang=9.0.1=cling\_v0.9\_h1e27157\_5
> - libclang-cpp=9.0.1=cling\_v0.9\_h6699504\_5
> - libclang-cpp15=15.0.7=default\_h127d8a8\_5
> - libclang-cpp9=9.0.1=cling\_v0.9\_h6699504\_5
> - libclang13=18.1.3=default\_h5d6823c\_0
> - libcups=2.3.3=h4637d8d\_4
> - libedit=3.1.20230828=h5eee18b\_0
> - libevent=2.1.12=hdbd6064\_1
> - libexpat=2.6.2=h59595ed\_0
> - libffi=3.4.4=h6a678d5\_0
> - libflac=1.4.3=h59595ed\_0
> - libgcc-devel\_linux-64=10.4.0=hd38fd1e\_19
> - libgcc-ng=13.2.0=h807b86a\_5
> - libgcrypt=1.10.3=hd590300\_0
> - libgettextpo=0.22.5=h59595ed\_2
> - libgettextpo-devel=0.22.5=h59595ed\_2
> - libglib=2.80.0=hf2295e7\_4
> - libgomp=13.2.0=h807b86a\_5
> - libgpg-error=1.48=h71f35ed\_0
> - libiconv=1.17=hd590300\_2
> - libjpeg-turbo=3.0.0=hd590300\_1
> - libllvm15=15.0.7=hb3ce162\_4
> - libllvm18=18.1.3=h2448989\_0
> - libllvm9=9.0.1=default\_hc23dcda\_7
> - libnsl=2.0.1=hd590300\_0
> - libogg=1.3.5=h27cfd23\_1
> - libopus=1.3.1=h7b6447c\_0
> - libpng=1.6.43=h2797004\_0
> - libpq=16.2=h33b98f1\_1
> - libsanitizer=10.4.0=h5246dfb\_19
> - libsndfile=1.2.2=hc60ed4a\_1
> - libsodium=1.0.18=h36c2ea0\_1
> - libsqlite=3.45.2=h2797004\_0
> - libstdcxx-devel\_linux-64=10.4.0=hd38fd1e\_19
> - libstdcxx-ng=13.2.0=h7e041cc\_5
> - libsystemd0=255=h3516f8a\_1
> - libuuid=2.38.1=h0b41bf4\_0
> - libvorbis=1.3.7=h7b6447c\_0
> - libxcb=1.15=h7f8727e\_0
> - libxcrypt=4.4.36=hd590300\_1
> - libxkbcommon=1.7.0=h662e7e4\_0
> - libxml2=2.12.6=h232c23b\_1
> - libzlib=1.2.13=hd590300\_5
> - llvm-tools=9.0.1=cling\_v0.9\_h2b820e9\_7
> - llvmdev=9.0.1=cling\_v0.9\_h2b820e9\_7
> - lz4-c=1.9.4=h6a678d5\_0
> - markupsafe=2.1.3=py312h5eee18b\_0
> - matplotlib-inline=0.1.6=py312h06a4308\_0
> - mistune=2.0.4=py312h06a4308\_0
> - mpg123=1.32.6=h59595ed\_0
> - mysql-common=8.3.0=hf1915f5\_4
> - mysql-libs=8.3.0=hca2cd23\_4
> - nbclient=0.8.0=py312h06a4308\_0
> - nbconvert=7.10.0=py312h06a4308\_0
> - nbformat=5.9.2=py312h06a4308\_0
> - ncurses=6.4=h6a678d5\_0
> - nest-asyncio=1.6.0=py312h06a4308\_0
> - nlohmann\_json=3.11.3=h59595ed\_0
> - notebook=7.1.2=pyhd8ed1ab\_0
> - notebook-shim=0.2.3=py312h06a4308\_0
> - nspr=4.35=h6a678d5\_0
> - nss=3.98=h1d7d5a4\_0
> - openssl=3.2.1=hd590300\_1
> - overrides=7.4.0=py312h06a4308\_0
> - packaging=23.2=py312h06a4308\_0
> - pandocfilters=1.5.0=pyhd3eb1b0\_0
> - parso=0.8.3=pyhd3eb1b0\_0
> - pcre2=10.43=hcad00b1\_0
> - pexpect=4.8.0=pyhd3eb1b0\_3
> - pip=23.3.1=py312h06a4308\_0
> - pixman=0.43.2=h59595ed\_0
> - platformdirs=3.10.0=py312h06a4308\_0
> - ply=3.11=py312h06a4308\_1
> - prometheus\_client=0.14.1=py312h06a4308\_0
> - prompt-toolkit=3.0.43=py312h06a4308\_0
> - prompt\_toolkit=3.0.43=hd3eb1b0\_0
> - psutil=5.9.0=py312h5eee18b\_0
> - ptyprocess=0.7.0=pyhd3eb1b0\_2
> - pugixml=1.14=h59595ed\_0
> - pulseaudio-client=17.0=hb77b528\_0
> - pure\_eval=0.2.2=pyhd3eb1b0\_0
> - pycparser=2.21=pyhd3eb1b0\_0
> - pygments=2.15.1=py312h06a4308\_1
> - pyqt=5.15.10=py312h6a678d5\_0
> - pyqt5-sip=12.13.0=py312h5eee18b\_0
> - pysocks=1.7.1=py312h06a4308\_0
> - python=3.12.2=hab00c5b\_0\_cpython
> - python-dateutil=2.8.2=pyhd3eb1b0\_0
> - python-fastjsonschema=2.16.2=py312h06a4308\_0
> - python-json-logger=2.0.7=py312h06a4308\_0
> - pytz=2023.3.post1=py312h06a4308\_0
> - pyyaml=6.0.1=py312h5eee18b\_0
> - pyzmq=25.1.2=py312h6a678d5\_0
> - qt-main=5.15.8=hc9dc06e\_21
> - qtconsole=5.5.1=py312h06a4308\_0
> - qtpy=2.4.1=py312h06a4308\_0
> - readline=8.2=h5eee18b\_0
> - referencing=0.30.2=py312h06a4308\_0
> - requests=2.31.0=py312h06a4308\_1
> - rfc3339-validator=0.1.4=py312h06a4308\_0
> - rfc3986-validator=0.1.1=py312h06a4308\_0
> - rpds-py=0.10.6=py312hb02cf49\_0
> - send2trash=1.8.2=py312h06a4308\_0
> - setuptools=68.2.2=py312h06a4308\_0
> - sip=6.7.12=py312h6a678d5\_0
> - six=1.16.0=pyhd3eb1b0\_1
> - sniffio=1.3.0=py312h06a4308\_0
> - soupsieve=2.5=py312h06a4308\_0
> - stack\_data=0.2.0=pyhd3eb1b0\_0
> - sysroot\_linux-64=2.12=he073ed8\_17
> - terminado=0.17.1=py312h06a4308\_0
> - tinycss2=1.2.1=py312h06a4308\_0
> - tk=8.6.13=noxft\_h4845f30\_101
> - tomli=2.0.1=pyhd8ed1ab\_0
> - tornado=6.3.3=py312h5eee18b\_0
> - traitlets=5.7.1=py312h06a4308\_0
> - typing-extensions=4.9.0=py312h06a4308\_1
> - typing\_extensions=4.9.0=py312h06a4308\_1
> - tzdata=2024a=h04d1e81\_0
> - urllib3=2.1.0=py312h06a4308\_1
> - wcwidth=0.2.5=pyhd3eb1b0\_0
> - webencodings=0.5.1=py312h06a4308\_2
> - websocket-client=0.58.0=py312h06a4308\_4
> - wheel=0.41.2=py312h06a4308\_0
> - widgetsnbextension=4.0.10=py312h06a4308\_0
> - xcb-util=0.4.0=hd590300\_1
> - xcb-util-image=0.4.0=h8ee46fc\_1
> - xcb-util-keysyms=0.4.0=h8ee46fc\_1
> - xcb-util-renderutil=0.3.9=hd590300\_1
> - xcb-util-wm=0.4.1=h8ee46fc\_1
> - xeus=3.1.5=h06414e2\_0
> - xeus-cling=0.15.3=he80cb83\_2
> - xeus-zmq=1.1.1=h6b5a882\_1
> - xkeyboard-config=2.41=hd590300\_0
> - xorg-kbproto=1.0.7=h7f98852\_1002
> - xorg-libice=1.1.1=hd590300\_0
> - xorg-libsm=1.2.4=h7391055\_0
> - xorg-libx11=1.8.9=h8ee46fc\_0
> - xorg-libxau=1.0.11=hd590300\_0
> - xorg-libxext=1.3.4=h0b41bf4\_2
> - xorg-libxrender=0.9.11=hd590300\_0
> - xorg-renderproto=0.11.1=h7f98852\_1002
> - xorg-xextproto=7.3.0=h0b41bf4\_1003
> - xorg-xf86vidmodeproto=2.3.1=h7f98852\_1002
> - xorg-xproto=7.0.31=h27cfd23\_1007
> - xtl=0.7.7=h00ab1b0\_0
> - xz=5.4.6=h5eee18b\_0
> - yaml=0.2.5=h7b6447c\_0
> - zeromq=4.3.5=h59595ed\_1
> - zipp=3.17.0=pyhd8ed1ab\_0
> - zlib=1.2.13=hd590300\_5
> - zstd=1.5.5=hc292b87\_0
> prefix: /home/driver/miniconda3/envs/cling
> (cling) 
> 
> \</pre\>
> \</details\>
> 
> \<details\>\<summary\>Command Line Output\</summary\>
> \<pre\>N/A
> \</pre\>
> \</details\>
> 
> \<details\>\<summary\>Browser Output\</summary\>
> \<pre\>N/A
> \</pre\>
> \</details\>

---

<div class="post-metadata">

**Author:** ![mr\_guy99493](https://avatars.discourse-cdn.com/v4/letter/m/8edcca/32.png) [@mr\_guy99493](https://discourse.jupyter.org/u/mr_guy99493)\
**Post date:** [June 16, 2024, 12:17pm UTC](https://discourse.jupyter.org/t/make-tab-key-insert-tabs/25182/6 "2024-06-16T12:17:09Z")

</div>

Has there been any movement on this? Any way I can help?

---

<div class="post-metadata">

**Author:** ![fomightez](https://yyz1.discourse-cdn.com/flex031/user_avatar/discourse.jupyter.org/fomightez/32/495_2.png) [@fomightez](https://discourse.jupyter.org/u/fomightez)\
**Post date:** [June 16, 2024, 2:30pm UTC](https://discourse.jupyter.org/t/make-tab-key-insert-tabs/25182/7 "2024-06-16T14:30:19Z")

</div>

> [@mr\_guy99493](#):
>
> First two lines are tabbed as desired by copy-pasting tab characters, so tabs are possible, but pressing tab on the next line shows this annoying dropdown instead.

Did you try `Shift` + Tab? For a lot of coding text editors that is how you enter an actual tab.
