Notepad3/todo/TODO.md

24 KiB
Raw Blame History

Notepad3 TODO

Ideas / New Features (deliberated)

  • Merge/Cleanup all old documentation (Build/Docs/*.txt, etc.) files
  • PCRE2 backward search seems to be slow - ask Claude for analysis

Epics (high effort)

  • (Q3) SVG Toolbar Icons - Resolution-independent toolbar with dark/light mode

    • Auto-adapts to any DPI (100%-300%)
    • Dark/light mode color switching
    • Keep classic bitmap as fallback (ToolBarTheme 0/1)
    • Issues: #5471, #5090, #4631 (DPI scaling), #5316 (dark mode readability), #5390 (encrypted dialog)
    • See research/svg-toolbar.md
  • [/] (Q3) Autosave / Backup - PARTIALLY IMPLEMENTED

    • Implemented:
      • Settings dialog (AutoSaveBackupSettingsDlg) with full UI
      • Timer-based periodic autosave (AutoSaveStart/Stop/DoWork)
      • Options: Periodic save, Save on Suspend, Save on Shutdown
      • Backup options: Enable backup, On AutoSave, Side-by-side
      • Configurable interval (minimum 2 seconds)
    • Remaining:
      • Recovery folder (%APPDATA%\Notepad3\recovery\) not yet implemented
      • Versioned backups (.bak_1, .bak_2) not yet implemented
    • Issues: #1665, #370, #512, #4331, #3652, #5399
    • See research/autosave-backup.md
  • (Q3) EditorConfig Integration - Apply .editorconfig settings on file open

  • (Q3) Windows Spell Checker - Spellcheck via Windows API

  • (Q3) Scrollbar Marks - Highlights in scrollbar (search matches, bookmarks)

  • (Q3) Plugin System - Customizable / loadable plugin support

    • Issue: #5071
    • Architectural: extension API surface, lifetime, sandboxing
  • (Q3) Code Compress/Pretty - Minify/beautify code

    • Issue: #5515 - JSON format, compress, escape/unescape
    • Issue: #1790 - Call external formatter per scheme
    • Issue: #2839 - Tidy HTML/XML
    • (Maybe) Run Scripts: #4045 - Execute Python/Perl
    • Issue: #4126 - Custom Execute Document command

High Priority

  • Scintilla/Lexilla Update - Upgraded to 5.5.8/5.4.6 parity
  • BUG: FileSave() nested call - Fixed in commit 658fb2f19
    • Issue: #5445
    • Code: Notepad3.c:4788 - nested FileSave() returns bool, passed as FileSaveFlags
    • Fix: FileSave((FileWatching.FileWatchingMode <= FWM_DONT_CARE) ? FSF_SaveAlways : FSF_None);
  • (Q2) BUG: Wrong working directory for new files - FIXED
    • Issue: #5306
    • Fix: Added else block in Path_NormalizeEx() to use canonicalized path for non-existent files
  • (Q2) BUG: Encoding detection issue - UTF-8 files detected as DOS-852
    • Issue: #5310
    • Affects German Windows 11, possibly other locales
    • Improve UTF-8 detection for files without BOM
  • (Q1) BUG: Print status message persistent - FIXED
    • Issue: #5313
    • Fix: Added StatusSetText() call to clear status bar after EditPrint() completes
  • (Q1) BUG: /m command line uses last search mode - FIXED
    • Issue: #5060
    • Fix: When /m is used without 'R' flag, explicitly clear SCFIND_REGEXP to force text mode
  • (Q3) Replace GetOpenFileNameW with IFileOpenDialog - Modern file dialog API - IMPLEMENTED
  • (Q1) BUG: Cannot save settings without folder - FIXED
    • Issue: #5075
    • Fix: Changed CreateDirectoryW to SHCreateDirectoryExW to create all intermediate directories
  • (Q2) BUG: Replace dialog full-width caching - Second replace uses wrong character
    • Issue: #4268
    • CJK full-width replacement cached incorrectly
  • (Q2) BUG: Initial window position not working - Position settings ignored - IMPLEMENTED
    • Issue: #4725
    • To be analyzed - works as designed ??? - ⚠ Validation
  • (Q2) BUG: Minipath options don't save - FullRowSelect/TrackSelect broken
  • (Q1) BUG: Monitoring log not saved - FIXED
    • Issue: #5037
    • Fix: Added MonitoringLog to Settings struct with INI load/save in Config.cpp
  • (Q3) BUG: LAN file freeze - Freezes when network host offline
  • (Q1) BUG: Find/Replace patterns not updating - Dropdown not refreshed immediately - FIXED
  • (Q3) BUG: Multiple file positions not saved - Only last file's bookmarks/caret preserved - FIXED
    • Issue: #5151 - DELEGATED (using grepWin orig)
  • (Q3) BUG: grepWinNP3 crash - Right-click search results crashes - ⚠ Validation
  • (Q2) BUG: PHP comment toggle - Ctrl+Q not working in Web Source Code - FIXED
  • [/] (Q2) CHR: Ctrl+LAlt+V is used by NP3 - AltGr+V works - Can't type } @ on non-US keyboards - WON'T CHANGE
  • (Q1) BUG: Mouse scroll settings not updated - FIXED
    • Issue: #5223
    • Fix: Forward WM_SETTINGCHANGE to Scintilla to refresh cached scroll parameters
  • (Q2) BUG: File lock held too long on save - Blocks FileSystemWatcher - IMPLEMENTED
    • Issue: #5301 - ⚠ Validation
  • (Q2) BUG: Folder handle leak - Can't rename/delete folders with opened files - IMPLEMENTED
    • Issue: #5342 - ⚠ Validation
  • (Q1) BUG: Black line in Language menu - FIXED
    • Issue: #5361
    • Fix: Removed WM_UAHNCPAINTMENUPOPUP from message interception - was using wrong window handle
  • (Q1) BUG: Typing causes cursor to flash, disappear and reappear - Regression
  • (Q1) BUG: Holding Ctrl+S inserts DC3 characters - Save shortcut leaks into buffer when repeated
  • (Q1) BUG: Redo button stays active after redo stack exhausted
  • (Q1) BUG: Ctrl+Shift+D redo deletes penultimate line and merges with next
  • (Q1) BUG: "Only One Instance per File" doesn't always work
  • (Q1) BUG: New Empty Window prompts to save when nothing to save
  • (Q1) BUG: New Empty Window button broken when AutoLoadMRUFile=true
  • (Q1) BUG: Close-with-unsaved system dialog disappears on second instance close
  • (Q1) BUG: Screen needs manual refresh after opening file with /g switch
  • (Q2) BUG: Filename starting with "- " opens blank file from CLI
  • (Q2) BUG: Selection (Sel) and Occurrences (Occ) status counts incorrect

Medium Priority

  • DirectWrite Font Variant Bug - Fixed with ResolveFontFace() patch
  • (Q2) Installer testing on various Windows versions
  • AVX2 Build - Added x64_AVX2 to CI matrix
  • (Q2) Language file updates
  • (Q1) Move Beta Page to rizonesoft.com - Host beta downloads on main site
  • (Q2) Improve Temp File Handling - Better UX for files from archives - FIXED
  • (Q1) Force Save Option - FIXED
    • Issue: #5444
    • Fix: Added Settings.FixTrailingBlanks check to early return in FileSave()
  • (Q2) BUG: Korean IME composition box obscures the line of text being edited
  • (Q2) BUG: Mixed tiny menu / huge dialog icons across screens with different DPI
  • (Q2) BUG: AutoCompleteWordCharSet setting has no effect
  • (Q2) BUG: Column Wrap doesn't work on Chinese / CJK text
  • (Q2) BUG: Scrollbar can't reach bottom when processing very large files
  • (Q2) BUG: Accented vowels typed lowercase with Caps Lock on
  • (Q2) BUG: Ctrl+Drag&Drop disabled while multi-cursor active
  • (Q2) BUG: Taskbar window order changes after minimize
  • (Q2) BUG: Menu Bar accelerator keys unreliable in non-English locales
  • (Q2) BUG: Taskbar icon refuses to combine/group
  • (Q2) BUG: Regex {min,max} quantifier not supported by current grammar
  • (Q2) BUG: Color dialog RGB fields accept only 2 of 3 digits when typed

GitHub Actions

  • CI Workflow - Added MSVC builds (Win32/x64 Release)
    • Runs on push/PR to master
  • ARM64 Build - Added to CI matrix (Win32/x64/ARM64)
  • (Q1) Clang-cl Build - Alternative compiler for better warnings
  • (Q1) Debug Build - Catch debug-only assertions
  • (Q1) PR Labeler - Auto-label PRs based on files changed
  • (Q2) Automatic Releases - Create GitHub releases on tags with built artifacts
  • (Q2) Changelog Generator - Auto-generate release notes from commits/PRs
  • (Q2) CodeQL Analysis - Scans C++ code for security vulnerabilities
  • (Q1) Dependency Review - Checks for vulnerable dependencies in PRs
  • (Q2) MSVC Code Analysis - Microsoft's static analyzer (/analyze)
  • (Q3) Nightly Releases - Automated nightly builds via GitHub Actions

Low Priority

  • (Q1) Documentation updates

  • (Q2) Long Path Support - Support paths >260 characters (Win10+) - FIXED

    • Issue: #3580 - ⚠ Validation
  • (Q3) Additional Syntax Highlighting - New language lexers

    • Haskell: #3035 - Lexilla LexHaskell.cxx
    • Racket: #3035 - Could use Lisp/Scheme lexer
    • OpenCL: #5374 - C-like with extra keywords
    • Verilog HDL: #4108 - Lexilla LexVerilog.cxx
    • JSON5: #5411 - ⚠ Validation
    • SourcePawn: #5430 - SourceMod scripting
    • Groovy: #5093
    • Swift, Zig, Scala, F#, WASM, Vim, OCaml, Smali, GraphViz, Rebol
    • (Maybe) CSS in <style> tags: #2061 - Embedded language complexity
    • BUG: CSS keywords: #4214 - Update CSS property list
    • BUG: CSS syntax highlighting incorrect: #3572
    • HTML: #3470 - Expand HTML lexer coverage / "full HTML support"
  • (Q3) BATCH Code Folding - Fold if/for blocks with parentheses

    • Issue: #4484
    • BUG: #4959 - Complex for loops highlighting
  • (Q1) Markdown: Highlight Trailing Double Spaces - Show line break indicators

  • (Q2) Custom Hyperlink Schemes - User-defined URL protocol recognition

    • ed2k:// links: #5405
    • Customizable via INI settings
  • (Q2) Smarter URL Recognition - Improve URL boundary detection - FIXED

    • Issue: #5464
    • Don't include trailing ' when URL is quoted
  • (Q3) Display Hidden Characters - Show invisible/control characters - IMPLEMENTED

    • Issue: #5035 - Non-printing chars like Notepad++ - ⚠ Validation
    • Issue: #5496 - ⚠ Validation
    • Scintilla SCI_SETREPRESENTATION for custom char display
  • (Q2) Trailing Whitespace Highlighting - Distinct style for trailing blanks

  • (Q3) Enhanced Auto-Complete - Language-aware auto-complete triggers

  • (Q3) Auto-Pair Brackets - Auto-close (), [], {}, "", ''

    • Issue: #4149
    • Issue: #5285 - Smart auto-dedent on closing bracket
      • this will be out of scope, if not supported by lexers itself
  • (Q3) Custom Keyboard Shortcuts - User-configurable shortcut keys

    • Issue: #595
    • Workaround: Use Microsoft PowerToys's Keyboard-Manager to redirect

Open Discussions

  • (Q2) BUG: Highlight current line broken - Settings not respected (regression) - WON'T CHANGE
    • Issue: #5270
    • **This is a discussion, about limited line highlite rule language in schema definition **
  • (Q3) QUE: Regex replace issue - Verify if still present - FIXED
    • Issue: #3531
    • Was no Bug but bad RegEx pattern design (expectation vs. what regex really does)

Text Processing

  • (Q1) Strip Leading Blanks - Trim leading whitespace (NP3 only has trailing)
  • (Q1) Right-Click Convert Case - Add case conversion to context menu - IMPLEMENTED
  • (Q2) LaTeX Input Method - LaTeX character insertion (\alphaα)
  • (Q2) Base64 Encode/Decode - IMPLEMENTED via IDM_EDIT_BASE64ENCODE/DECODE
  • (Q1) Insert Unicode Control Characters - LRM, RLM, ZWJ, ZWNJ, etc.
  • (Q2) Number Base Conversion - Binary/Decimal/Octal/Hex - IMPLEMENTED
    • Issue: #5059 - TinyExpr output in hex/binary - ⚠ Validation
  • (Q2) Character Map Conversions - Fullwidth↔Halfwidth, CJK transforms (LCMapStringEx)
  • (Q1) Insert GUID - IMPLEMENTED via IDM_EDIT_INSERT_GUID (Ctrl+Shift+.)
  • (Q1) Insert Shebang - Insert interpreter line
  • (Q1) Insert Timestamps - IMPLEMENTED via IDM_EDIT_INSERT_SHORTDATE/LONGDATE (Ctrl+F5, Shift+F5) and CMD_INSERT_TIMESTAMP
  • (Q2) Time/Date Expressions in TinyExpr - Support time() / date arithmetic in expression evaluator
  • (Q1) Clarify "Remove Duplicate Lines" naming - Two submenu entries have different meanings, confusing UX

Navigation

  • (Q3) Navigate Backward/Forward - VS Code-like history navigation
    • Remark: maybe description of change-history navigation is a start.
  • (Q2) Brace Find Enhancement - Search backward for nearest brace when not at one - IMPLEMENTED
    • Issue: #4863 - ⚠ Validation
  • (Q2) Go to Block Start/End - Jump to enclosing block
    • Fixed by Bracket navigation, incl. Selection
    • No solution for Python-like "Block by Indent" navigation
  • (Q2) Go to Sibling Block - Navigate between sibling code blocks
  • (Q2) Touchpad Horizontal Scroll - Direct touchpad left/right scrolling
  • (Q1) Toggle Focus Find/Main - Shortcut to switch focus

View Options

  • (Q2) Toggle Fullscreen - IMPLEMENTED via SCR_FULL_SCREEN mode
  • (Q3) Split View - View two parts of same document
  • (Q1) Show Unicode Control Characters - Toggle visibility
  • (Q2) Line Selection Modes - VS style, Normal, Old VS
  • (Q1) Disable Multiple Cursors Option - IMPLEMENTED via IDM_SET_MULTIPLE_SELECTION toggle
    • Issue: #4033 - Resolved
  • (Q1) Scroll Past Last Line Options - IMPLEMENTED via Settings.ScrollPastEOF (simple on/off, not multiple options)
  • (Q2) Optimize Syntax Scheme Dialog - Show detected scheme at top of list
  • (Q1) Alphabetical Common Base Settings - Sort scheme settings alphabetically
  • (Q2) Find Dialog Position Persistence - IMPLEMENTED via FindReplaceDlgPosX/Y saved to INI
    • Issue: #3905 - Resolved
  • (Q2) Configurable Font Priority/Fallback List - User-editable preferred Code/Text font chain
  • (Q2) Improve Selection & Convert Panel layout
  • (Q2) Separate Recent Files Menu - Split MRU out of File menu
  • (Q3) Discussion: Gray out menu items when no selection
  • (Q3) Keep current line visible after Word-Wrap toggle
  • (Q2) MiniPath: "Minimize on Close" option

Copy/Clipboard

  • (Q2) Copy as RTF - Rich text copy with syntax highlighting
    • Issue: #5052
    • Reference: Notepad4 implements via IDM_EDIT_COPYRTF
  • (Q2) Copy/Cut/Paste Binary - Binary data handling
  • (Q1) Copy All - IMPLEMENTED via IDM_EDIT_COPYALL (Alt+C)
  • (Q1) Copy Add - IMPLEMENTED via IDM_EDIT_COPYADD (Ctrl+E)
  • (Q1) Copy Filename Options - IMPLEMENTED
    • IDM_EDIT_INSERT_FILENAME - Copy filename (Ctrl+F9)
    • IDM_EDIT_INSERT_DIRNAME - Copy directory
    • IDM_EDIT_INSERT_PATHNAME - Copy full path

Additional Micro Features

  • (Q1) Increment/Decrement Number - Modify number at cursor (Ctrl+Alt++/-)
  • (Q2) Show Hex View - Display hex representation of selection
  • (Q1) CSV Options Dialog - Configure CSV delimiter/qualifier
    • CSV Rainbow Lexer (home-brew) has an auto-detect-delimiter
  • (Q3) Large File Mode - Optimized mode for files >2GB
    • Issue: #4699 - Disable mark occurrences for large files
    • Issue: #4954 - Can't open files >4GB
    • Reference: Notepad4 implements this via SC_DOCUMENTOPTION_TEXT_LARGE and bLargeFileMode flag - disables expensive features, enables reload-in-large-mode option
  • (Q2) Online Search - IMPLEMENTED via WebTemplate1/2 (Google, Wikipedia)
    • Issue: #5096 - Custom templates via INI
    • BUG: #4056 - Caption not in File menu
    • BUG: #4952 - Template vs Action naming inconsistency
  • (Q2) Open Path or Link - Open file path or URL under cursor
    • Issue: #3926 - Support relative file:// paths
  • (Q1) Open Containing Folder - Open the folder containing the current file in Explorer
    • Reference: Notepad4 implements via CMD_OPEN_CONTAINING_FOLDER and EditOpenSelection(OpenSelectionType_ContainingFolder)

Windows Integration

  • (Q3) Explorer Preview Handler - Preview text files in Explorer pane
    • Issue: #5510
    • COM DLL implementing IPreviewHandler interface
    • Optional installer component