Skip to main content

Fix to the jupyterlab terminado issue that when returning to an idle JupyterLab terminal, cursor position report (CPR) escape sequences appear as literal text

Project description

jupyterlab_terminal_cpr_escape_fix

GitHub Actions npm version PyPI version Total PyPI downloads JupyterLab 4 Brought To You By KOLOMOLO Donate PayPal

[!TIP] This fix is part of the stellars_jupyterlab_fixes metapackage. Install all Stellars fixes at once: pip install stellars_jupyterlab_fixes

[!WARNING] This extension provides a workaround for a known JupyterLab/terminado issue. It will be deprecated once JupyterLab addresses this problem in a GA release. Monitor the upstream issue tracker for official fixes.

Fix the JupyterLab terminado issue where returning to an idle terminal causes cursor position report (CPR) escape sequences to appear as literal text. This is particularly noticeable with fish shell, where sequences like [2;2R[3;1R or [?1;2c[>0;276;0c appear at the prompt after reconnecting.

How it works

When a JupyterLab terminal sits idle, the shell (especially fish) periodically queries terminal capabilities. These queries accumulate in terminado's buffer. On reconnect, the buffer drains and the responses appear as literal text because xterm.js can't process them fast enough.

This extension patches TermSocket.on_pty_read() server-side to filter terminal query responses before they reach the browser. It handles both ESC-prefixed sequences and bare remnants where fish shell has stripped the ESC byte.

Filtered sequences (terminal query responses):

  • CPR - Cursor Position Report (ESC[row;colR)
  • DA/DA2 - Device Attributes (ESC[?...c, ESC[>...c)
  • DECRPM - DEC Report Mode (ESC[?mode;value$y)
  • OSC 4/10/11/12 - Color query responses

Preserved sequences (functional terminal output):

  • All SGR color codes, cursor movement, erase, scroll
  • OSC 0 (window/tab title), OSC 7 (cwd), OSC 8 (hyperlinks)
  • OSC 52 (clipboard - used by companion clipboard extension)
  • OSC 133 (shell integration prompt marks)
  • Bracketed paste mode, alternate screen, all DEC private modes

Requirements

  • JupyterLab >= 4.0.0

Installation

pip install jupyterlab_terminal_cpr_escape_fix

Uninstall

pip uninstall jupyterlab_terminal_cpr_escape_fix

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

jupyterlab_terminal_cpr_escape_fix-1.0.6.tar.gz (351.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

File details

Details for the file jupyterlab_terminal_cpr_escape_fix-1.0.6.tar.gz.

File metadata

File hashes

Hashes for jupyterlab_terminal_cpr_escape_fix-1.0.6.tar.gz
Algorithm Hash digest
SHA256 23c57e85d0e327c6e904372ed94e4793d84c2868503a12ca1c8e28e4b2f231c3
MD5 34ae606bbe67994f9c3c853c56aff584
BLAKE2b-256 4f4449296dcc8b4751c07bdea7f8bf947a1c0280ef5de2525fec9e8cbfb4aabe

See more details on using hashes here.

File details

Details for the file jupyterlab_terminal_cpr_escape_fix-1.0.6-py3-none-any.whl.

File metadata

File hashes

Hashes for jupyterlab_terminal_cpr_escape_fix-1.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 4087726602e3e089e575c39d8b8eafc2165b936e32563db7df7c730878ae09b1
MD5 6e1ce8b3f3d7fa3fdd75db2f72acab3e
BLAKE2b-256 d2a20ac3689bca8cc2abbf4689607c986034289c01959a56b0285b391af2e65a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page