Files
crib/TODO.md
2026-07-01 18:53:49 +01:00

12 KiB

Copyright 2025 Syed Daanish

TODO

  • Fix bug where scroll up at top of screen first line jumps to bottom

  • Make completions work with new system

  • And factorize renderer into its own class

    • which is just managed by the renderer
    • and adjusment.cc will call it
  • which is reused by scrollers/ensurers too (for knowing screen wrapped end)

  • this will then allow inlay hints to be possible

  • and also make VAI easier to implement (probably as inlay hints)

  • and also allow code lens to work too

  • and an api to allow line skipping / virtual text which allows for folding logic as extention

  • Also time extentions and disable if they take too long / for larger files with options to force

  • Allow keybinds to be set in ruby

  • ruby file for project specific runs alongside any system wide ones

  • Seperate system functions into a class that branches to support local / ssh / server modes.
  • Even lsp shouldnt be directly controlled because it can branch on local and server modes
    • check libssh2 or child process stuff for remote editing (remote mode)
    • Thick and thin mode (server mode) (through ssh or port) (for website only port + webhook)
      • thin mode only shares screen diffing over the network - uses server settings / themes / shell
        • only one user connects at a time
        • provides data as a websocket with tui or gui/online modes where tui shares diffing as is (can be connected to by gui or website)
        • and gui/online modes try to (if not then render onto a canvas) forward window.render_gui() and dedicated windowing system (i.e windowing is html divs)
        • and window.render_gui() returns a markup code (custom markup)
          • and for events i could either leave tui as-is and for markup have special event handling or i
          • implement the widget system in both and have the same event handling then
        • actually for true cross platform i need to make a ui lib with widgets etc. so it is workable on all platforms (so they all need only a single ui lib)
      • thick only shared fileio and lsp data with local used for all else - uses local settings / themes
        • multiple users connect at once but maybe either make them not be allowed to open same file or make vscode like multiediting (unsure how exactly)
        • they all share same lsp instances
        • they all have the same shell access
      • allow having an instance that forwards thick mode to thin mode (to connect online mode to a thick server for code collaboration)
  • Then allow ruby code to create and handle windows as extentions

  • Then 3 inbuilt extentions being file manager, theme picker, tab selector

  • make another tile type called tile tabbed that has a tab switcher and shows only one of its children at once

  • it takes focus and takes some keybinds for switching and forwards the rest (it also forwards the info and adds one for itself - the selected/total tabs)

  • also implement info strings for all the stuff that take focus

  • Mode is a feild on a editor and there is no global "mode system" except in editors (enxtentions do their own thing)

    • make mode normal and not atomic if it is truly unused across threads
    • this means keybinds can be set to use the editor as insert mode only and so behave like vscode
  • split lsp stuff into multiple files (not a monolithic class as it is now)

  • Extentions can also be used as file openers (for like databases . diffing . images . audio etc)

  • Local cache for state management (like undo history, cursor positions etc) (location can be set in config)

  • make sure to write inbuilt extentions in cpp and not ruby

  • also move default bar and clipboard back into cpp

  • all lsp popups are no longer their own classes but instead windows (extention like) in popup mode

  • also fix click handling to send mouse unclick to the same focus window as the click And also for drag to be same as the starter

  • skip opening binary files

  • apply themeing in bg log bar lsp popus etc. to keep visual consistency

  • searching/replace/Multi-Cursor (for just one lsp command for all) with pcre2 with regex (started by a slash) (disabled for large files)

  • add links support in xterm (kitty like clickable links)

  • And preprocess markdown in popups to be more like styled than just highlighted

  • In the ruby libcrib populate toplevel binding and file and dir and rubybuild stuff and other similar constants

  • in require_relative allow requiring without appending .rb if possible.

  • Possibly in the future limit memory usage by parser for larger files

  • Add a file picker suggestion while typing a path (including stuff like ~ and .. and $HOME etc)

  • allow opening directory after filemanger is sorted out.

  • commands to: change pwd load a rb file run a ruby command close a window etc.

  • Add mgems for most common things and a ruby library to allow combining true ruby with mruby

  • add command to set and use a file type at runtime

  • color alpha in ini files

  • Make warning before ctrl+q for saving

  • LSP Bug: Check why fish-lsp is behaving so off with completions filtering.

  • Line move: fix the move line functions to work without the calculations from folds as folds are removed.

  • Editor Indentation Fix: - Main : merger indentation with the parser for more accurate results.

    • Ignore comments/strings from parser when auto-indenting.
    • Support for stuff like bash \ and math operators in other languages and comma and line starting with a dot (like in ruby) etc.
  • Readme: Update readme to show ruby based config in detail.

  • UI Refinement:

    • Finish autocomplete box style functions.
  • Documentation UI: Capture Ctrl+h / Ctrl+l for scrolling documentation windows.

  • Cap line_tree data limit for large files and just store about a thousand previous lines maybe? (lazily loaded)

  • add :j<n> command to jump to line <n> in the current file

  • and give warning for invalid commands

  • and upon escape clear the current command

  • allow multiline logging which captures the input entirely and y will copy the log and anything else will exit

  • it will then collapse to being the first line from the log only

  • allow flushing functions in ruby to tell c++ to refresh keybinds/themes etc.

  • LSP: support snippets in completion properly check:: pull diagnostics for ruby-lsp lsp selection range - use to highlight start / end of range maybe? goto definiton signature help document symbol for the top bar maybe? (or workspace symbol) also setup workspaces Semantic highlighting Quick fixes Rename symbols

  • Allow ruby to config lsp capabilities

  • also try to fix why solargraph is the only one breaking on edits near emojis

  • ruby-lsp also supports erb so thats a plus

  • the ruby should have an api to be able to draw windows and add mappings to them

  • Syntax highlighting

  • ruby done!!

  • finish bash then do all the directive-like ones like jsonc (first to help with theme files) / toml / yaml / ini / nginx

  • then ch? then gdscript and python then erb then php

  • then markdown / html

  • then gitignore / gitattributes

  • then fish then sql then css and [jt]sx? then lua (make with type annotations for lsp results)

  • then haskell then gomod then go then rust

  • Undo/Redo: Add support for undo/redo history.

  • Auto brace selection: Add support for auto brace selection.

UX

  • Completion Filtering:

    • Stop filtering case-sensitive.
    • Normalize completion edits if local filtering is used.
  • Basic Autocomplete: Keep a list of words in the current buffer for non-LSP fallback.

Features

  • Search & Replace:

    • Add Search/Replace UI.
    • Support capture groups ($1, $2) or allow Perl regex directly.
    • Ensure virtual cursors are included in search positions.
  • Multi-Cursor:

    • Add virtual cursor support (edits apply to all locations).
    • Add Alt+Click to set multiple cursors.
    • Allow search and place cursor at all matches.
  • Block Selection:

    • Double-clicking a bracket selects the whole block and sets mode to WORD.

Visuals, UI & Extensions?

  • Add color picker/palette (as a floating extention).

  • Git: Add Git integration (status, diffs).

  • AI/Snippets:

    • Add snippets support (LuaSnip/VSnip style).
    • Add Codeium/Copilot support (using VAI virtual text) as a test phase.
  • SQL: Add SQL support (Viewer and Basic Editor) (as ruby extension).

  • Prolly?: Add Splash Screen / Minigame.

Unimportant optimizations

  • Performance:
    • Switch JSON parser to RapidJSON (or similar high-performance lib).
    • Decrease usage of std::string in UI, LSP, warnings etc.
    • Also for vectors into managed memory especially for completions/lsp-stuff.

whyy is visible returnint x1,y2 and x2, 2y2 instead of x1,y1 and x2,y2

Render H: 1, Cursor: 0,0, Visible: 0,26 - 0,52 Render H: 2, Cursor: 0,0, Visible: 1,0 - 1,0 Render H: 3, Cursor: 0,0, Visible: 2,30 - 2,60 Render H: 4, Cursor: 0,0, Visible: 3,36 - 3,72 Render H: 5, Cursor: 0,0, Visible: 4,32 - 4,64 Render H: 6, Cursor: 0,0, Visible: 5,40 - 5,80 Render H: 7, Cursor: 0,0, Visible: 6,11 - 6,22 Render H: 8, Cursor: 0,0, Visible: 7,3 - 7,6 Render H: 9, Cursor: 0,0, Visible: 8,19 - 8,38 Render H: 10, Cursor: 0,0, Visible: 9,76 - 9,152 Render H: 11, Cursor: 0,0, Visible: 10,50 - 10,100 Render H: 12, Cursor: 0,0, Visible: 11,29 - 11,58 Render H: 13, Cursor: 0,0, Visible: 12,49 - 12,98 Render H: 14, Cursor: 0,0, Visible: 13,32 - 13,64 Render H: 15, Cursor: 0,0, Visible: 14,30 - 14,60 Render H: 16, Cursor: 0,0, Visible: 15,56 - 15,112 Render H: 17, Cursor: 0,0, Visible: 16,42 - 16,84 Render H: 18, Cursor: 0,0, Visible: 17,20 - 17,40 Render H: 19, Cursor: 0,0, Visible: 18,31 - 18,62 Render H: 20, Cursor: 0,0, Visible: 19,77 - 19,154 Render H: 21, Cursor: 0,0, Visible: 20,77 - 20,154 Render H: 22, Cursor: 0,0, Visible: 21,44 - 21,88 Render H: 23, Cursor: 0,0, Visible: 22,56 - 22,112 Render H: 24, Cursor: 0,0, Visible: 23,13 - 23,26 Render H: 25, Cursor: 0,0, Visible: 24,3 - 24,6 Render H: 26, Cursor: 0,0, Visible: 25,24 - 25,48 Render H: 27, Cursor: 0,0, Visible: 26,32 - 26,64 Render H: 28, Cursor: 0,0, Visible: 27,38 - 27,76 Render H: 29, Cursor: 0,0, Visible: 28,1 - 28,2 Render H: 30, Cursor: 0,0, Visible: 29,0 - 29,0 Render H: 31, Cursor: 0,0, Visible: 30,30 - 30,60 Render H: 32, Cursor: 0,0, Visible: 31,19 - 31,38 Render H: 33, Cursor: 0,0, Visible: 32,76 - 32,152 Render H: 34, Cursor: 0,0, Visible: 33,50 - 33,100 Render H: 35, Cursor: 0,0, Visible: 34,36 - 34,72 Render H: 36, Cursor: 0,0, Visible: 35,66 - 35,132 Render H: 37, Cursor: 0,0, Visible: 36,12 - 36,24 Render H: 38, Cursor: 0,0, Visible: 37,13 - 37,26 Render H: 39, Cursor: 0,0, Visible: 38,17 - 38,34 Render H: 40, Cursor: 0,0, Visible: 39,37 - 39,74 Render H: 41, Cursor: 0,0, Visible: 40,16 - 40,32 Render H: 42, Cursor: 0,0, Visible: 41,23 - 41,46 Render H: 43, Cursor: 0,0, Visible: 42,15 - 42,30 Render H: 44, Cursor: 0,0, Visible: 43,13 - 43,26 Render H: 45, Cursor: 0,0, Visible: 44,5 - 44,10 Render H: 46, Cursor: 0,0, Visible: 45,41 - 45,82 Render H: 47, Cursor: 0,0, Visible: 46,12 - 46,24 Render H: 48, Cursor: 0,0, Visible: 47,22 - 47,44 Render H: 49, Cursor: 0,0, Visible: 48,24 - 48,48 Render H: 50, Cursor: 0,0, Visible: 49,28 - 49,56 Render H: 51, Cursor: 0,0, Visible: 50,26 - 50,52 Render H: 52, Cursor: 0,0, Visible: 51,20 - 51,40 Render H: 53, Cursor: 0,0, Visible: 52,74 - 52,148