jupyter / notebook

Jupyter Interactive Notebook
https://jupyter-notebook.readthedocs.io/
BSD 3-Clause "New" or "Revised" License
11.73k stars 4.96k forks source link

Search function is broken and has questionable defaults #7458

Open soerenwolfers opened 1 month ago

soerenwolfers commented 1 month ago

Description

badv2.webm

The search function that's included in the JupyterLab based Jupyter notebooks (likely also the search function of JupyterLab itself, I never use that) via Ctrl-F is close to unusable. I got into the habit of clicking the top of the notebook, after which Ctrl-F opens the default browser search functionality, and hoped that the issues in the Jupyter search would eventually be ironed out but now that Jupyter started not rendering the entire notebook by default, it's a serious problem:

1: The search defaults to not search in cell outputs, which is way too opinionated for as general a shortcut as Ctrl-F. It has certainly never been my intent when I pressed Ctrl-F. This default currently even needs changing everytime a notebook is opened. See video above.

2: The highlighting of search results is broken for cell outputs. See video above.

3: The rotation of search result highlighting is broken when using the "up" button on the search window. See video above.

4: The latency on even an empty notebook is crazy high. Right here on github, when I use the browser search functionality via Ctrl-F the delay between updating the search term and the new matches being highlighted is non-existent. In a Jupyter notebook, whether I use the Jupyter notebook search window or the standard Browser search window, the delay is close to a second. See video above.

5: After a cell input match has been highlighted, closing the search bar does not put me into insert mode to let me edit the highlight straight away. See video below for how this should work.

Reproduce

Create notebook as in video and start playing around.

Expected behavior

goodv3.webm

Context

Troubleshoot Output

[notice] A new release of pip is available: 23.0.1 -> 24.2
[notice] To update, run: pip install --upgrade pip
$PATH:
    /home/soeren/bad/bin
    /usr/local/src/anaconda3/bin
    /createsubmission
    /home/soeren/.local/bin
    /usr/local/sbin
    /usr/local/bin
    /usr/sbin
    /usr/bin
    /sbin
    /bin
    /usr/games
    /usr/local/games
    /snap/bin

sys.path:
    /home/soeren/bad/bin
    /usr/lib/python39.zip
    /usr/lib/python3.9
    /usr/lib/python3.9/lib-dynload
    /home/soeren/bad/lib/python3.9/site-packages

sys.executable:
    /home/soeren/bad/bin/python3.9

sys.version:
    3.9.20 (main, Sep  7 2024, 18:35:26) 
    [GCC 9.4.0]

platform.platform():
    Linux-5.15.0-117-generic-x86_64-with-glibc2.31

which -a jupyter:
    /home/soeren/bad/bin/jupyter

pip list:
    Package                   Version
    ------------------------- --------------
    anyio                     4.4.0
    argon2-cffi               23.1.0
    argon2-cffi-bindings      21.2.0
    arrow                     1.3.0
    asttokens                 2.4.1
    async-lru                 2.0.4
    attrs                     24.2.0
    babel                     2.16.0
    beautifulsoup4            4.12.3
    bleach                    6.1.0
    certifi                   2024.8.30
    cffi                      1.17.1
    charset-normalizer        3.3.2
    comm                      0.2.2
    debugpy                   1.8.5
    decorator                 5.1.1
    defusedxml                0.7.1
    exceptiongroup            1.2.2
    executing                 2.1.0
    fastjsonschema            2.20.0
    fqdn                      1.5.1
    h11                       0.14.0
    httpcore                  1.0.5
    httpx                     0.27.2
    idna                      3.8
    importlib_metadata        8.4.0
    ipykernel                 6.29.5
    ipython                   8.18.1
    ipywidgets                8.1.5
    isoduration               20.11.0
    jedi                      0.19.1
    Jinja2                    3.1.4
    json5                     0.9.25
    jsonpointer               3.0.0
    jsonschema                4.23.0
    jsonschema-specifications 2023.12.1
    jupyter                   1.1.1
    jupyter_client            8.6.2
    jupyter-console           6.6.3
    jupyter_core              5.7.2
    jupyter-events            0.10.0
    jupyter-lsp               2.2.5
    jupyter_server            2.14.2
    jupyter_server_terminals  0.5.3
    jupyterlab                4.2.5
    jupyterlab_pygments       0.3.0
    jupyterlab_server         2.27.3
    jupyterlab_widgets        3.0.13
    MarkupSafe                2.1.5
    matplotlib-inline         0.1.7
    mistune                   3.0.2
    nbclient                  0.10.0
    nbconvert                 7.16.4
    nbformat                  5.10.4
    nest-asyncio              1.6.0
    notebook                  7.2.2
    notebook_shim             0.2.4
    overrides                 7.7.0
    packaging                 24.1
    pandocfilters             1.5.1
    parso                     0.8.4
    pexpect                   4.9.0
    pip                       23.0.1
    platformdirs              4.3.2
    prometheus_client         0.20.0
    prompt_toolkit            3.0.47
    psutil                    6.0.0
    ptyprocess                0.7.0
    pure_eval                 0.2.3
    pycparser                 2.22
    Pygments                  2.18.0
    python-dateutil           2.9.0.post0
    python-json-logger        2.0.7
    PyYAML                    6.0.2
    pyzmq                     26.2.0
    referencing               0.35.1
    requests                  2.32.3
    rfc3339-validator         0.1.4
    rfc3986-validator         0.1.1
    rpds-py                   0.20.0
    Send2Trash                1.8.3
    setuptools                58.1.0
    six                       1.16.0
    sniffio                   1.3.1
    soupsieve                 2.6
    stack-data                0.6.3
    terminado                 0.18.1
    tinycss2                  1.3.0
    tomli                     2.0.1
    tornado                   6.4.1
    traitlets                 5.14.3
    types-python-dateutil     2.9.0.20240906
    typing_extensions         4.12.2
    uri-template              1.3.0
    urllib3                   2.2.2
    wcwidth                   0.2.13
    webcolors                 24.8.0
    webencodings              0.5.1
    websocket-client          1.8.0
    widgetsnbextension        4.0.13
    zipp                      3.20.1

JasonWeill commented 1 month ago

Related:

We may need to split this into multiple items, to be able to deliver improvements to search in parallel. Thank you @soerenwolfers for opening this issue!

gaulinmp commented 1 month ago

I would add, while on the subject of improving the search function, that the Tab order for find/replace should really be adjusted. Currently, if you put your cursor in the find field, type something to find, then hit tab (to type its replacement) it moves the selection to the next button (which is "match case"). Compare this to any other program with find/replace: tab key will always first send the cursor to the replace field, then to highlight any subsequent buttons.

JasonWeill commented 1 month ago

@gaulinmp Thank you for your feedback! I migrated your request into the JupyterLab issues repo, since this code is primarily maintained in the JupyterLab package: https://github.com/jupyterlab/jupyterlab/issues/16808