✓ Uses Rust 2018 edition
|new 0.1.2||Feb 17, 2020|
|0.1.1||Feb 10, 2020|
#5 in Text editors
A configurable text editor with UTF-8 support, incremental search, syntax highlighting, line numbers and more, written in less than 1024 lines1 of Rust with minimal dependencies.
Contributions are welcome! Be careful to stay below the 1024-line limit...
You can install Kibi with
$ cargo install kibi
Syntax highlighting configuration files are available in the
syntax directory of this repository.
They need to be placed in one of the configuration directories mentioned in the Configuration/Syntax Highlighting section.
$ cd ~/repos $ git clone https://github.com/ilai-deutel/kibi.git $ mkdir -p ~/.config/kibi $ ln -sr ./kibi/syntax ~/.config/kibi/syntax.d
kibi is available on the AUR.
For instance, using
yay -Syu kibi
git clone https://aur.archlinux.org/kibi.git cd kibi makepkg -si
# Start an new text buffer $ kibi # Open a file $ kibi <file path>
|Ctrl-F||Incremental search; use arrows to navigate|
|Ctrl-S||Save the buffer to the current file, or specify the file path|
|Ctrl-D||Duplicate the current row|
Kibi can be configured using:
- A system-wide configuration file, located at
- A user-level configuration file, located at:
$XDG_CONFIG_HOME/kibi/config.iniif environment variable
Example configuration file:
# The size of a tab. Must be > 0. tab_stop=4 # The number of confirmations needed before quitting, when changes have been made since the file. # was last changed. quit_times=2 # The duration for which messages are shown in the status bar, in seconds. message_duration=3 # Whether to show line numbers. show_line_numbers=true
Syntax highlighting can be configured using INI files located at:
/etc/kibi/syntax.d/<file_name>.inifor system-wide availability
- For user-level configuration files:
$XDG_CONFIG_HOME/kibi/syntax.d/<file_name>.iniif environment variable
Syntax highlighting configuration follows this format:
### /etc/kibi/syntax.d/rust.ini ### # Kibi syntax highlighting configuration for Rust name=Rust extensions=rs highlight_numbers=true highlight_strings=true singleline_comment_start=// multiline_comment_delim=/*, */ ; The keyword list is taken from here: https://doc.rust-lang.org/book/appendix-01-keywords.html keywords_1=abstract, as, async, await, become, box, break, const, continue, crate, do, dyn, else, enum, extern, false, final, fn, for, if, impl, in, let, loop, macro, match, mod, move, mut, override, priv, pub, ref, return, self, Self, static, struct, super, trait, true, try, type, typeof, unsafe, unsized, use, virtual, where, while, yield keywords_2=i8, i16, i32, i64, i128, isize, u8, u16, u32, u36, u128, usize, f32, f64, bool, char, str
kibi provides additional features:
- Support for UTF-8 characters
- Command to jump to a given row/column
- Handle window resize
- Parsing configuration files: global editor configuration, language-specific syntax highlighting configuration
- Display line numbers on the left of the screen; display file size in the status bar
- Syntax highlighting: multi-line strings
- "Save as" prompt when no file name has been provided
- Command to duplicate the current row
- Memory safety, thanks to Rust!
- Many bug fixes
These dependencies provide safe wrappers around
libc calls, to avoid using
unsafe code as much as possible:
unicode-width is used to determine the displayed width of Unicode characters.
- Porting the
kilosource code from C to Rust and trying to make it idiomatic was interesting
- Implementing new features while under the 1024-line constraint is a good challenge
- Most importantly, I wanted to learn Rust and this was a great project to start (thanks Reddit for the idea)
Kibi is distributed under the terms of both the MIT license and the Apache License (Version 2.0).