When a multi-line paste looks like code, a chip above the composer asks
"That looks like code. Format it as a code block (js)?" with Format as code /
No thanks. It never converts on its own; typing, No, or 8 s dismiss it, and
Settings → Editor → "Offer to Format Pasted Code" turns it off.
- utils/looksLikeCode.ts (pure, tested): ≥ 3 lines and ≥ 2 of indentation
with depth changes, statement terminators, operators + brackets, keywords,
monospace/<pre> clipboard HTML, or SQL clause lines. Prose guards: quoted
replies, URL lists, long sentence-punctuated lines, plain-word lines,
markdown lists. Language guess only when fairly sure (js/ts/python/sql/
rust/c/php).
- Accept rebuilds the pasted paragraphs as one code block from their plain
text (code lines hold text only) and leaves the caret after it.
- Code blocks carry an optional lang → <code class="language-js"> (whitelisted
identifier only).
Verified in Chromium: pasting a JS function shows the chip; Format as code →
sent formatted_body is <pre><code class="language-js"> with indentation intact;
a three-line prose paste shows no chip; typing after a paste dismisses it.
Unit tests: 14 detector fixtures + 2 output tests; chromium e2e 19 passed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PPmy3tPq869XDW4njjVaKA
In markdown mode each paragraph line is serialised before parseBlockMD
joins them, so $x$ inside a ``` fence became data-mx-maths markup
inside the resulting <pre><code> (rendered as math in a code block).
Track fence state across lines and skip math for fenced lines and for
backtick code spans. Unit tests added; verified in the browser.
Also: scripts/dev-homeserver.sh enables MSC4140 delayed events so
scheduled messages work locally.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PPmy3tPq869XDW4njjVaKA
check:prettier was not part of my gate routine, so formatting drift accumulated
across the session's touched files (and a few older ones). Run prettier --write
to bring the repo back to 'All matched files use Prettier code style!'.
Formatting only — no logic changes. tsc/tests/build all green.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Math rendering already shipped (both the $…$ shorthand and the spec
data-mx-maths form render incoming). But the composer emitted no math, so a
Lotus user's $E=mc^2$ went out as raw text — it rendered on Lotus (both sides
parse $…$) but showed as literal text on Element and other clients.
toMatrixCustomHTML now converts $…$/$$…$$ to
<span|div data-mx-maths="LATEX"><code>LATEX</code></span|div>
(spec CS-API §11.5), reusing the existing splitMathSegments parser. Math is
extracted BEFORE markdown so LaTeX (_, *, \, {}) isn't mangled, and the emitted
span survives the block-markdown pass via the existing ignoreHTMLParseInlineMD
HTML-tag guard. A new allowMath opt threads through the top-level call sites;
code-line/code-block paths use empty opts so math is off inside code. The plain
body keeps literal $…$ as the fallback.
Scope: inline $…$ + single-line $$…$$. Multi-line block $$ (spans editor
paragraph nodes) deferred — still renders on Lotus via the plain-body path.
New output.test.ts (8 cases): span/div emission, escaping, markdown-bypass,
currency non-match, code-mark + code-block exclusion. 738 tests pass.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* Remove reply fallbacks & add m.mentions
(WIP) the typing on line 301 and 303 needs fixing but apart from that this is mint
* Less jank typing
* Mention the reply author in m.mentions
* Improve typing
* Fix typing in m.mentions finder
* Correctly iterate through editor children, properly handle @room, ...
..., don't mention the reply author when the reply author is ourself, don't add own user IDs when mentioning intentionally
* Formatting
* Add intentional mentions to edited messages
* refactor reusable code and fix todo
* parse mentions from all nodes
---------
Co-authored-by: Ajay Bura <32841439+ajbura@users.noreply.github.com>
* escape inline markdown character
* fix typo
* improve document around custom markdown plugin and add escape sequence utils
* recover inline escape sequences on edit
* remove escape sequences from plain text body
* use `s` for strike-through instead of del
* escape block markdown sequences
* fix remove escape sequence was not removing all slashes from plain text
* recover block sequences on edit
* support room via server params and eventId
* change copy link to matrix.to links
* display matrix.to links in messages as pill and stop generating url previews for them
* improve editor mention to include viaServers and eventId
* fix mention custom attributes
* always try to open room in current space
* jump to latest remove target eventId from url
* add create direct search options to open/create dm with url
* emojify msg txt find&replace instead of recursion
* move findAndReplace func in its own file
* improve find and replace
* move markdown file to plugins
* make find and replace work without g flag regex
* fix pagination stop on msg arrive
* render blurhash in small size
* remove shift from editor hotkeys
* fix inline markdown not working
* add block md parser - WIP
* emojify and linkify text without react-parser
* no need to sanitize text when emojify
* parse block markdown in editor output - WIP
* add inline parser option in block md parser
* improve codeblock regex
* ignore html tag when parsing inline md in block md
* add list markdown rule in block parser
* re-generate block markdown on edit
* change copy from inline markdown to markdown
* fix trim reply from body regex
* fix jumbo emoji in reply message
* fix broken list regex in block markdown
* enable markdown by defualt
* add commands hook
* add commands in editor
* add command auto complete menu
* add commands in room input
* remove old reply code from room input
* fix video component css
* do not auto focus input on android or ios
* fix crash on enable block after selection
* fix circular deps in editor
* fix autocomplete return focus move editor cursor
* remove unwanted keydown from room input
* fix emoji alignment in editor
* test ipad user agent
* refactor isAndroidOrIOS to mobileOrTablet
* update slate & slate-react
* downgrade slate-react to 0.98.4
0.99.0 has breaking changes with ReactEditor.focus
* add sql to readable ext mimetype
* fix empty editor formatting gets saved as draft
* add option to use enter for newline
* remove empty msg draft from atom family
* prevent msg ctx menu from open on text selection
* add func to parse html to editor input
* add plain to html input function
* re-construct markdown
* fix missing return
* fix falsy condition
* fix reading href instead of src of emoji
* add message editor - WIP
* fix plain to editor input func
* add save edit message functionality
* show edited event source code
* focus message input on after editing message
* use del tag for strike-through instead of s
* prevent autocomplete from re-opening after esc
* scroll out of view msg editor in view
* handle up arrow edit
* handle scroll to message editor without effect
* revert prev commit: effect run after editor render
* ignore relation event from editable
* allow data-md tag for del and em in sanitize html
* prevent edit without changes
* ignore previous reply when replying to msg
* fix up arrow edit not working sometime
* add inline markdown in editor
* send markdown re-generative data in tags
* enable vscode format on save
* fix match italic and diff order
* prevent formatting in code block
* make code md rule highest
* improve inline markdown parsing
* add comment
* improve code logic
* focus editor on reply click
* fix emoji and sticker img object-fit
* fix cursor not moving with autocomplete
* stop sanitizing sending plain text body
* improve autocomplete query parsing
* add escape to turn off active editor toolbar item