Skip to content

Monster0506/rift

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

430 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Rift

This is a vim-like text editor.

I use this daily and primarily.

Implemented:

  • Quite a lot more than the below items, I just haven't updated this in a while due to actually working on it.
  • Command-line completion engine (commands, subcommands, settings, setting values, file paths)
  • vertical and horizontal splits (:split, :vsplit)
  • split navigation (Ctrl+W h/j/k/l), resize (<, >), freeze
  • terminal emulator (:terminal, via alacritty_terminal)
  • change command (c, C)
  • dot repeat (.)
  • smart dirty indicator (tracks saved state in undotree)
  • capital insert commands (I, A)
  • Undotree preview with change-focused scrolling
  • Fancy undotree (with colors and syntax highlighting)
  • persistent buffer state across file switches (dirty, undotree, etc.)
  • command and search history (with up/down navigation)
  • File explorer (ranger-style: open, new, delete, rename, copy, toggle hidden, metadata, bulk ops)
  • ^W to delete back a word in insert/command/search
  • benchmarking infrastructure (buffer, render, search, movement, syntax, history, screen, job, input)
  • Treesitter (bash, c, c++, c#, css, go, html, java, js, json, lua, markdown, php, python, ruby, rust, typescript, yaml, zig)
  • Async treesitter highlighting on background thread
  • threaded job manager for async operations
  • smartcase search
  • search index warming (background cache)
  • streaming search with multiple engines
  • granular movement (word, sentence, paragraph, big word)
  • Character abstraction for proper unicode handling (not just u8/char)
  • O(log N) byte/char length synchronization
  • interval trees for syntax metadata
  • input box component
  • select view with scrolling
  • operator pending mode (d, c, y with motions)
  • search + replace
  • Custom regex engine (monster-regex)
  • Polling instead of blocking input
  • Resizing
  • Buffer next/previous/ls
  • Notify clear and clear all
  • setting and command descriptions
  • make command pattern more like settings design pattern (this took way too long)
  • Not a gap buffer anymore! We now use a rope with a piece table
  • dirty rectangles
  • :edit filename to open a new document (:e to reload from disk)
  • Multi-document support
  • setlocal for document-level settings
  • dumb gutter to avoid recalcing unless total lines changes significantly
  • crlf and lf support
  • add redraw command
  • component level dirty flags to avoid clearing and repopulating full layers
  • line indexing improvements
  • line numbers
  • colorizing and themes
  • status bar to indicate filename, dirty
  • notification system
  • parse bang commands and pass the number of bangs
  • hook notifications up to actual errors and warnings
  • buffer composition
  • double buffer rendering
  • layer system for rendering
  • various settings
  • command mode
  • insert mode
  • basic cursor movement
  • Save File (async)
  • Save As
  • Open File
  • Syntax highlighting
  • Undo and redo with hybrid delta+checkpointing approach
  • debug mode toggle

Todo:

  • LSP
  • registers + unified yank/paste/delete
  • visual selection
  • macros
  • help manual
  • marks and jumps
  • animations
  • operator pending improvements (indent, format, case, etc.)
  • plugin system

Known issues:

  • 4 byte unicode characters are not able to be inserted on windows (this is a crossterm issue on windows, idk man)

Fixed stuff (lightly tracked):

  • TOCTOU Race Condition between file check and file open
  • Gap Buffer uses a lot of unsafe. Write more debug asserts
  • inefficient string construction wrap_text in render loop
  • Ascii only operation
    • Renderer does not handle multibyte characters
    • cursor calculation does not account for multibyte characters
    • fix by using String instead of u8
    • Use unicode-width instead of assuming everything is a single char
  • Allow multiline notifications
  • Ensure all components use the theme system
  • search doesn't close on successful search
  • :e to reload a file clears highlights
  • floating window components not matching theme bg/fg
  • searching for non existent text is really slow
  • undo preview does not autoload
  • syntax highlighting not updated as typing occurs
  • scroll fails on select_view beyond window
  • commandline commands do not properly close commandline
  • insert operations not grouped as undo transactions
  • delete operations not grouped as undo transactions
  • undotree initial position wrong
  • terminal crashes when running interactive programs
  • terminal open in split causes flicker
  • notification padding wrong
  • cursor does not move after typing a space in the terminal
  • input boxes for file explorer not accepting input

About

This is a minimal vim-like text editor.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages