# Changelog for Lx

## Aug 6, 2026

- Find and replace handle UTF-8 properly
- Find and replace close with one press of *Escape* and keep last match selected by default
- Added `config.find_escape_clears_text` and `config.find_restore_position_on_exit`
- WAV previews preserve the min/max envelope across every channel
- WAV previews show a smoother FFT spectrum
- 2D plots draw antialiased curves

## Aug 5, 2026

- Browser keeps its current root when returning from a file inside that tree
- Status bar shows one text encoding for each document

## Aug 3, 2026

- Startup errors are saved in `user/error.log`
- Font loading errors name the missing file
- Public packages include the Markdown math font
- 2D plots draw smoother curves and honors stretch point setting
- Binary files with zero-heavy sections no longer open as UTF-16 text
- Improved Markdown math spacing and script symbols

## Aug 2, 2026

- Faster Markdown previews when opening, scrolling, resizing, reflowing, or jumping through large documents
- Markdown tables accept compact alignment markers such as `:-:` and `:--:`
- Markdown links keep linked documents in preview mode
- Markdown edit, preview, reload, and resize keep the nearby source position
- Markdown math with more TeX and KaTeX commands, symbols, fonts, fractions, relations, arrows, links, tables, and diagrams
- Markdown math spacing, accents, roots, limits, rules, boxes, strikeout, and equation tags
- Wrapped text reflows immediately after resizing or zooming and remains visible at the top edge while scrolling
- Minimap updates stay stable while editing, undoing, and redoing
- *Alt+M* cycles read-only tabs through Preview, View, Bytes, and Hex while keeping each position
- *F9* or *Ctrl+Alt+E* switches between editable and read-only modes while `config.toggle_edit_source_position` controls position matching
- Backspace and other command keys work when *Lx* starts from a held keyboard shortcut
- `core:reload-module(name:"module")` reloads one Lua module, while `core:reload-changed` reloads changed Lua source

## Aug 1, 2026

- Markdown math with macros, equation layouts, matrices, diagrams, boxes, colors, text styles, accents, cancellation, and automatically sized delimiters
- Markdown math spacing and alignment for roots, fractions, limits, scripts, brackets, tables, and mixed writing systems
- Incomplete Markdown math remains visible instead of stopping the preview
- C++ numbers with apostrophe digit separators highlight correctly
- `Restart to update` opens the changelog once, with `core:restart` and `core:force-restart` available separately
- WAV preview shows file details, waveform, combined FFT, PCM, and float data. Proof of concept, not anything serious.
- Browser sorts numbered names naturally and keeps double-click pinning on the selected row

## Jul 31, 2026

- Single startup files stay temporary until edited or pinned with `--pin`
- Runtime errors write to `user/error.log` while startup diagnostics stay in `user/boot.log`
- Markdown outline follows headings in a more predictable way
- *Ctrl+Page*, *Alt+Up*, *Alt+Down*, and *Alt+wheel* move between Markdown outline headings
- `config.transparent_background` controls checkerboard, theme, or solid-color backgrounds anywhere
- `Ctrl+Wheel` zooms the preview beneath the pointer without moving focus from Browser or another pane
- ICO and CUR preview with details, every image, cursor hotspots, clickable frames, drag panning, and *L* for display modes
- Slightly faster startup by only loading some code when needed
- `Restart to update` clickable without losing unsaved work or open options
- Open local folder links from Markdown previews via system

## Jul 30, 2026

- Automatic updates with progress, rollback, cleanup, failure messages
- Clickable `Manual update needed` notice when automatic updating is unavailable
- Manual rollback backups for *Lx* and user files
- Update commands and `config.update_check_delay` for controlling automatic checks
- Windows Explorer install and uninstall commands
- Temp files and logs write to user folder
- `--source-format`/`-sf`, with format choices kept after extraction or unpacking
- Clickable heading outline in Markdown previews, toggled with *Ctrl+D*
- *Space* and *Shift+Space* page movement in viewers and previews
- Centered ANSI art with up-and-down auto scrolling on *Space*
- Built-in help on *F1*, command-line help via `--help`, `-h`, `-?`, `/?`
- More user guides throughout the help system
- Reloading unchanged files from disk in viewers while staying anchored
- Improved Markdown list spacing and command-line code blocks
- Let extracted or unpacked results open in edit, view, preview, hex, or bytes mode
- Configurable handlers for Markdown, ANSI art, fonts, and Office files
- *Left* in browser closes a folder before moving to its parent

## Jul 29, 2026

- Clear edit, view, preview, bytes, hex, extract, and unpack choices when opening files
- Short open options: `-e`, `-v`, `-p`, `-b`, `-x`, `-ha`, `-ac`, `-ex`, `-un`, `-en`
- `config.default_modes`, `config.format_modes`, `config.format_handlers`, `config.extension_overrides`, and `config.filename_overrides`
- Faster large text edits, formatting, sorting, and cleanup
- Valid UTF-8 files no longer mistaken for DOS text
- LuaPad scratch tabs with *Ctrl+Enter* execution and a results panel

## Jul 28, 2026

- Faster opening, drawing, scrolling, navigating large files
- Horizontal scrolling now built-in part of text editors and viewers
- Reduced memory use for ZIP files with many entries
- Open files from deeply nested ZIP locations on Windows
- Report damaged or oversized Excel content
- Take into account empty Excel cells during extraction
- Markdown extraction for Office files and TSV extraction for spreadsheets
- Unreadable browser files are shown in an empty locked tab with a clear warning
- Open ALS files editable XML without changing the original file
- Browser returns to active file's folder when switching tabs or drives
- Temporary browser previews and visibly pinned tabs; *Enter* or double-click pins, and double-clicking a tab closes it

## Jul 27, 2026

- Reusable browser preview as the leftmost document tab
- Reusing a clean untitled tab for the first opened or dropped file
- Opened text, binary, and Office files from network and WSL folders
- Browser support for network paths and both common WSL path forms
- Read-only ZIP access, including archives with very large file lists
- `browser:reveal-active-document` for files outside the current browser folder
- Improved popup menus, lists, trees, scrollbars, checkboxes, and radio controls

## Jul 26, 2026

- Smoother mouse-drag panning in previews and image views
- Fixed SQL highlighting in fenced Markdown code
- Selections across empty lines are now visible
- Falling back to read-only view when no preview is available
- Global, text, binary, and per-format open choices
- Markdown opens in preview mode by default

## Jul 25, 2026

- Command-line choices for editing, viewing, previewing, bytes, hex, and extraction
- Opening choice for supported Office files

## Jul 24, 2026

- Keep unquoted YAML values neutral so regex-heavy syntax definitions remain readable
- Independent font scales for inline and separately rendered Markdown math
- Report unknown shortcut commands in the status bar and log
- Fixed Markdown math roots, including nested roots and zooming

## Jul 23, 2026

- Markdown previews with styled headings, lists, quotes, links, images, tables, code, math, automatic local image updates, and adjustable fonts and spacing
- Fixed text box alignment and frames at fractional display scales
- Renamed optional font weights from thin and thick to light and heavy
- Fixed Rust highlighting after escaped character literals
- Kept wrapped rows aligned after minimizing long Unicode JSON
- Fixed valid UTF-8 files sometimes opening with the wrong encoding
- Smooth held-arrow movement and page navigation in ANSI previews
- Improved animation smoothness on high-refresh-rate displays

## Jul 22, 2026

- Move ANSI art viewer out of core into `ansipreview` plugin
- Renamed built-in shortcut layer from `default` to `core`, clearly separating Lx, plugin, and user bindings
- Reworked syntax modules into extensible format modules under `data/formats`
- Syntax remains the name of each format's highlighting rules
- Previewer framework (in addition to viewer + editor)
- Previewer for `.ttf` and `.otf` fonts with font details, size samples, zoom, pan, and errors for files
- Update Markdown preview with rendered headings, preserved line feeds, visual wrapping, zooming, and panning
- Left-mouse image panning alongside middle-mouse panning
- Window keeps maximized state when another process forwards files
- Several new format modules
- Row backgrounds for Markdown fenced code blocks
- Right-aligned line numbers in editor and viewer gutters
- Preserve filesystem letter case of browser folders and filenames

## Jul 21, 2026

- Browser sidebar, `browser:*` and `config.browser_*`
- Kept edited browser previews as normal tabs and focused them again without opening duplicates
- Press *F4* to focus/toggle browser, *Esc* or *Enter* to focus back to editor
- Fixed a XML highlighting rule causing errors
- Alpha defaults now separate from global, computer, and user settings, processed in this order
- Allowed missing Alpha or global settings files without stopping Lx
- `core:edit-global-settings` opens settings that apply to everyone
- `core:edit-computer-settings` opens settings shared by everyone on this computer
- `core:edit-user-settings` opens settings used only for you on this computer
- Auto Surround feature controlled via syntax (Markdown) + separate `format:surround` command
- Auto Surround removes matching wrappers after their repeat limit by default
- Format shortcuts feature controlled via syntax (Markdown): *Ctrl+B*, *Ctrl+I*, *Ctrl+U*

## Jul 19, 2026

- Simpler and more flexible key bindings: replace, add, remove, disable, or swap shortcuts with less repetition
- Move or copy an existing shortcut without looking up its action name
- User shortcuts take priority over plugin and built-in choices
- Improved emoji and international text support throughout Lx
- Displayed emoji, symbols, kaomoji, and other text correctly while you are still choosing or composing it
- Continued work on the qui framework
- Prevented a crash while color emoji were prepared in the background
- Default redo shortcut *Shift+Ctrl+Z*

## Jul 18, 2026

- Arithmetic command with live preview that calculates or transforms selected text with Lua expressions
- Arithmetic processes multiple cursors and multi-line selections one line at a time
- Quick arithmetic commands for numbering from 1 or a chosen starting number and step
- `row`, `col`, and `total` variables in arithmetic expressions
- Commands for selecting between saved positions and inserting a cursor at a given row and column
- `config.enable_multi_cursor` for turning off all multi-cursor features
- Display synchronization through `config.vsync`
- Fixed initial jerk when dragging an image after inactivity
- Large images open faster when fitted to window
- Extended `config.animate_page_scroll` to text viewers and binary viewers
- `config.animate_vertical_edge_scroll` for optional animation when jumping to the top or bottom
- Fixed *Home*/*End* navigation in text and binary viewers
- *Ctrl+End* in text viewer stops at longest visible line
- Word wrap changes keep current text viewer line in place
- Middle-drag pans text, binary, image, and ANSI documents consistently
- Binary files stay at stable byte offset when switching views or changing text or window size
- Binary middle-drag follows pointer smoothly without moving top byte on release
- Fast scrolling works in the binary viewer and stays faster than normal scrolling on shorter documents
- SVG images enlarge to fit window, while raster images only shrink by default
- `config.image_viewer_*` for image sizing, zoom focus, reload behavior, and background style
- Aligned wrapped *Ctrl+End* with *Page Down* at the bottom of files
- Classic Mac text files display with their original line breaks (carriage returns)
- *Left*/*Right* remain responsive on very long lines
- Damaged ANSI files can no longer request unbounded screen operations
- Carriage-return ANSI art redraws from beginning of its current row
- Tabs in ANSI files align to standard 8-column stops
- Syntax colors appear faster after jumping through large files
- Multiline syntax colors continue correctly after very long lines
- Large files remain responsive when opened in unwrapped text viewer
- Invalid `config.fps` values no longer prevent Lx from running
- Broken outline rules no longer disable document outline
- Outline navigation and outline list open without pausing on large files
- Changing a file's codepage cannot discard unsaved edits and completes without a false error
- Saving legacy encodings stops before unsupported characters can be lost
- *Delete*/*Backspace* at document edges no longer mark files as modified
- Fixed build date shown in window caption
- Repeated `--pane-left` and `--pane-up` files open in requested pane
- Missing command-line option values no longer hide next option
- Local plugins load in same order on every start
- Pane grow/shrink stay unavailable until a resizable split exists
- Broken plugin suggestions no longer interrupt editor
- A broken plugin command no longer empties command palette
- Modified documents remain marked as unsaved after undoing and making a different edit
- File read errors no longer open an empty document
- Rename errors identify old file when it could not be removed
- Sparse spreadsheets no longer expand into huge empty text grids
- Failed macro playback no longer leaves input or macro commands stuck
- Tabularize keeps leading, repeated, and trailing empty columns
- Failed external commands no longer replace selected text with incomplete output
- CSV conversion keeps apostrophes as ordinary text
- JSON and basic XML formatting respects disabled indentation and layout options
- Basic XML formatting keeps meaningful spaces around text and nested elements
- Binary file read errors stay visible instead of repeatedly retrying
- File tree previews open binary, image, and ANSI files in the correct view
- In-place CSV and TSV alignment stays unavailable in read-only views
- Bookmarks stay with their original text when splitting a line
- Sorting, deduplicating, reversing, and shuffling lines keeps final newline at end
- 'Find File' remains responsive while scanning large folders
- 'Find Previous' handles an empty search history without an internal error
- 'Find and Replace' use full Unicode word under cursor
- Indent guides stay visible when configured indent size is invalid (`config.indent_size`)
- Autocomplete shows duplicate suggestions only once and keeps their descriptions matched
- Overwrite mode replaces complete Unicode characters without deleting extra text
- Detected indentation no longer affects other documents after a plugin error
- Failed syntax-cache updates no longer discard working cache
- Uppercase, lowercase, title case, and related conversions work with international text
- 'Replace All' keeps redo history when no text changes
- Damaged Office files with invalid character references show a clear error
- Extracted Office text can be edited and saved to a new file
- Oversized or suspiciously compressed Office files are rejected safely
- Damaged content inside modern Office files is detected before it is displayed
- Damaged legacy Word and Excel files with looping allocation tables are rejected quickly
- Large 'Replace All' operations can be undone reliably
- Opening an edited file in binary mode no longer disables editing or saving
- Failed encoding reloads no longer change current document
- Reloading a changed file warns before discarding unsaved edits
- `config.doc_monitor_notify_passive` can hide file-change notices from background tabs
- File monitoring detects repeated changes even when timestamp stays same
- Open binary and image files can be reloaded after they change on disk

## Jul 17, 2026

- Support for multiple selections (multi-cursor)
- *Alt-click* adds extra cursors for typing, pasting, *Enter*, *Backspace*, and *Delete* in several places at once
- *Alt-click* clears any active selections before adding another cursor
- Keyboard movement, *Shift* selection, Copy, and Cut work with all extra cursors
- Typing and pasting replace every selection when using extra cursors
- *Enter*, *Tab*, and *Shift+Tab* work with all extra cursors and selections
- Using *Alt-click* on the primary cursor removes it and activates the next cursor
- Secondary cursors can use a separate theme color (`style.cursor2`)
- `config.multi_cursor_modifier` to choose *Alt*/*Ctrl*/*Command*-click for adding cursors
- Customizable shortcuts for all five standard mouse buttons
- Keyboard shortcuts for placing cursors above, below, or at end of every selected line
- Column selection by dragging with *Shift* and the configured multi-cursor modifier
- Commands for selecting the next matching word, all matches, or skipping one
- *Modifier + middle-click* for toggling complete-word selections
- Fixed *F3* advancing through matches while "Find Text" prompt stays open
- Multiple selections remain active when running commands from command palette
- Line duplication, movement, deletion, joining, and new lines above or below work with all cursors
- Case conversion and overwrite mode work with all cursors
- Autocomplete completes same partial word at every cursor
- Invalid drawing and font values from plugins report an error instead of destabilizing Lx
- Additional fonts (CJK, etc.) are now a separate download (`lx-fontpack`)
- JSON Lines highlighting for `.jsonl` and `.ndjson` files
- JSON Lines files initially open without word wrap
- Automatic or explicit JSON and JSON Lines formatting, including sorted-key variants
- Fixed a crash when closing Lx
- Fixed possible display crashes on Apple Silicon and other strict-alignment systems
- Fixed display corruption on systems that use padded graphics surfaces
- Live window resizing no longer risks intermittent crashes
- Search and command matching handles trailing spaces reliably
- Saved files are more resilient to sudden power loss on Linux and macOS
- Path cleanup keeps root paths such as `/`, `C:\\`, and network shares intact
- Failed tool and process launches report an error instead of failing silently
- Removed a fixed path-length limit when resolving files on Linux and macOS
- Opening another large image no longer shows tiles left from previous image
- Complex views no longer lose drawing when render command buffer grows
- Oversized font glyphs no longer corrupt memory or crash editor
- Failed SVG color glyphs no longer crash editor
- Images that are too large to fit in memory report an error instead of closing editor
- Invalid fallback font settings no longer break already loaded fonts
- Invalid `--scale` values no longer break interface sizing
- Startup reports actual error when graphics initialization fails
- Prevented other users from interfering with file forwarding on Linux and macOS
- Background database work no longer blocks editor when more work is queued
- Large database IDs and whole numbers no longer lose precision
- Tabs keep correct width when switching between documents with different indentation settings

## Jul 16, 2026

- Navigation behaves more consistently when word wrap is on
- *Arrow keys*, *Home*, *End*, *PageUp*, *PageDown*, and *Shift* selection follow displayed rows correctly with word wrap
- Indent guides, matching brackets/words, color previews, end-of-line markers, and outline dividers remain visible with word wrap
- Cursor stays visible at right edge of wrapped lines beside the minimap
- Minimap updates immediately when editing or indenting text
- *Triple-click* line selection keeps cursor at end of selected line

## Jul 13, 2026

- Better save errors for read-only files
- Better hexadecimal number highlighting in SQL files

## Jul 11, 2026

- Fixed crashes when dragging files into Lx
- Fallback encoding for legacy text files (`config.fallback_codepage`)
- SQL statements to document outline
- Fixed save errors incorrectly marking documents as saved
- Fixed binary viewer failing to open with invalid row-width settings
- Prevented invalid plugin delays from hanging editor

## Jun 28, 2026

- First release
