Back to Notepad3

Notepad3 TODO

todo/TODO.md

latest18.4 KB
Original Source

Notepad3 TODO

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
  • (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
    • To be analyzed - works as designed ??? - ⚠ Validation ❗
    • Issue: #4725
  • (Q3) BUG: Regex replace issue - Verify if still present - ✅ FIXED
    • Issue: #3531 - ✅ FIXED
    • Old bug from v5.21 - needs verification - ⚠ 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
  • (Q3) BUG: Multiple file positions not saved - Only last file's bookmarks/caret preserved
  • (Q3) BUG: grepWinNP3 crash - Right-click search results crashes
  • (Q2) BUG: PHP comment toggle - Ctrl+Q not working in Web Source Code
  • (Q2) BUG: AltGr shortcut conflict - Can't type } @ on non-US keyboards
  • (Q1) BUG: Mouse scroll settings not updated - ✅ FIXED
    • Issue: #5223
    • Fix: Forward WM_SETTINGCHANGE to Scintilla to refresh cached scroll parameters
  • (Q2) BUG: Highlight current line broken - Settings not respected (regression)
    • Issue: #5270
    • **This is a discussion, about limited line highlite rule language in schema definition **
  • (Q2) BUG: File lock held too long on save - Blocks FileSystemWatcher - ✅ FIXED
    • Needs validation
    • Issue: #5301
  • (Q2) BUG: Folder handle leak - Can't rename/delete folders with opened files
    • Needs testing - ⚠ Validation❗
    • Issue: #5342
  • (Q1) BUG: Black line in Language menu - ✅ FIXED
    • Issue: #5361
    • Fix: Removed WM_UAHNCPAINTMENUPOPUP from message interception - was using wrong window handle

Medium Priority

  • DirectWrite Font Variant Bug - ✅ Fixed with ResolveFontFace() patch
  • (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) EditorConfig Integration - Apply .editorconfig settings on file open
  • [/] (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
  • (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
  • (Q1) Force Save Option - ✅ FIXED
    • Issue: #5444
    • Fix: Added Settings.FixTrailingBlanks check to early return in FileSave()

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+)
  • (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 - Extend JSON lexer
    • 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
  • (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
    • Issue: #5464
    • Don't include trailing ' when URL is quoted
  • (Q3) Display Hidden Characters - Show invisible/control characters
    • Issue: #5496
    • Scintilla SCI_SETREPRESENTATION for custom char display
    • Issue: #5035 - Non-printing chars like Notepad++
  • (Q2) Trailing Whitespace Highlighting - Distinct style for trailing blanks
  • (Q3) Scrollbar Marks - Highlights in scrollbar (search matches, bookmarks)
  • (Q3) Windows Spell Checker - Spellcheck via Windows API
  • (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
  • (Q3) Custom Keyboard Shortcuts - User-configurable shortcut keys

Feature Ideas

Text Processing

  • (Q1) Strip Leading Blanks - Trim leading whitespace (NP3 only has trailing)
  • (Q1) Right-Click Convert Case - Add case conversion to context menu
  • (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
    • Issue: #5059 - TinyExpr output in hex/binary
  • (Q2) Character Map Conversions - Fullwidth↔Halfwidth, CJK transforms (LCMapStringEx)
  • (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
  • (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
  • (Q3) Navigate Backward/Forward - VS Code-like history navigation
  • (Q2) Go to Block Start/End - Jump to enclosing block
  • (Q2) Brace Find Enhancement - Search backward for nearest brace when not at one
  • (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

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
  • (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