lino

A command line text editor with notepad like key bindings.

screenshot
[![Crates.io](https://img.shields.io/crates/v/lino)](https://crates.io/crates/lino) [![Crates.io](https://img.shields.io/crates/l/lino)](https://github.com/ahmednooor/lino/blob/main/LICENSE) [![Crates.io](https://img.shields.io/crates/d/lino)](https://crates.io/crates/lino) ## Features - Notepad like keybindings. - Multi-line indentation. - Auto-indented new lines. - Line numbers. - Syntax highlighting. - Copy, Paste. - Undo, Redo. - Find, Replace. ## Usage (Key Bindings) | Key | Function | | --- | --- | | , , , | `Move cursor` | | Ctrl + , | `Move by word` | | Page Up , Page Down | `Move by page (scrolling)` | | Home | `Move to line start` | | End | `Move to line end` | | Shift + , , , | `Select` | | Ctrl + Shift + , | `Select by word` | | Shift + Page Up , Page down | `Select by page` | | Shift + Home | `Select upto line start` | | Shift + End | `Select upto line end` | | Ctrl + A | `Select all` | | Backspace | `Delete backward` | | Delete | `Delete forward` | | Ctrl / Alt + Backspace | `Delete backward by word` | | Ctrl / Alt + Delete | `Delete forward by word` | | Shift + Delete | `Delete current line` | | Ctrl / Alt + | `Move current line up` | | Ctrl / Alt + | `Move current line down` | | Ctrl / Alt + Shift + | `Duplicate current line upward` | | Ctrl / Alt + Shift + , Ctrl + D | `Duplicate current line downward` | | Alt + ] / , Tab | `Increase indentation` | | Alt + [ / , Shift + Tab | `Decrease indentation` | | Enter | `Enter auto-indented new line` | | Ctrl / Shift + Enter | `Enter non-indented new line` | | Ctrl + F | `Find, Replace` | | Ctrl + X | `Cut` | | Ctrl + C | `Copy` | | Ctrl + V | `Paste` | | Ctrl + Z | `Undo` | | Ctrl + Y | `Redo` | | Ctrl + S | `Save` | | Alt + S | `Save as` | | Ctrl + Q , Ctrl + W | `Close` | > Some key-bindings might not work on different terminals. But the most common ones should work on all. ## Install > You will need to have Rust (2018 or higher) installed on your system before proceeding.\ **Install it from [https://www.rust-lang.org/tools/install](https://www.rust-lang.org/tools/install)** **1. Install with Cargo** ```sh cargo install lino ``` **2. Run** ```sh lino ``` **3. Move binary to `/usr/bin/` on Linux (Optional)** ```sh sudo mv `which lino` /usr/bin/ ``` > Tested on `Windows 10` and `WSL (Ubuntu 18.04)` ## Build > You will need to have Rust (2018 or higher) installed on your system before proceeding.\ **Install it from [https://www.rust-lang.org/tools/install](https://www.rust-lang.org/tools/install)** **1. Clone this repo** ```sh git clone https://github.com/ahmednooor/lino.git ``` **2. Go into the cloned repo directory** ```sh cd ./lino/ ``` **3. Build & run with Cargo** ```sh cargo run ``` On `Linux (Debian based)`, if you head into problems, try installing the following libraries and re-run with cargo. ```sh sudo apt install xorg-dev libxcb-present-dev libxcb-composite0-dev libxcb-shape0-dev libxcb-xfixes0-dev ``` If you get an error about something like couldn't link with `cc`, try installing the following. ```sh sudo apt install gcc gcc-multilib binutils ``` > NOTE: If you are unsure about above mentioned Linux libraries, do it on a dev system or a vm instead of your daily driver. ## Rust Dependencies - [**crossterm**](https://crates.io/crates/crossterm) (to interact with the terminal) - [**ctrlc**](https://crates.io/crates/ctrlc) (to prevent close on Ctrl+c) - [**copypasta**](https://crates.io/crates/copypasta) (for clipboard access) - [**syntect**](https://github.com/trishume/syntect) (for syntax highlighting) - [**unicode-width**](https://github.com/unicode-rs/unicode-width) (for multi-width unicode character rendering) > A big Thanks to the authors/maintainers/contributors of these libraries. ## Motivation Imagine you're a mortal who is accustomed to VS Code or some other GUI Text Editor/IDE, and suddenly you have to login to some SSH or fire up a Linux Server Distro with no GUI. You find yourself treading in the territory of immortals where beasts like Vim, Emacs and others reside. You find a friend called Nano, but it doesn't speak your tongue (i.e. key bindings), so you waste your time trying to learn a new way to communicate instead of getting the job done and get the hell out of there. This editor can be your friend that speaks the same-ish tongue and you can take it there with you. It isn't the only one though, there is another one (a better one) called [Micro](https://github.com/zyedidia/micro).