• This repository has been archived on 03/Nov/2023
  • Stars
    star
    234
  • Rank 171,630 (Top 4 %)
  • Language
    C#
  • License
    MIT License
  • Created about 7 years ago
  • Updated over 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

LineEditor is an interactive line editor for Command Line applications in .NET

LineEditor

LineEditor is an interative line editor for .NET applications that provides editing capabilities for an input line with common editing capabilities and navigation expected in modern application as well as history, incremental search over the history, completion (both textual or visual) and various Emacs-like commands.

The code was originally developed for Mono's interactive C# shell:

Screenshot of csharp with a completion window

When you create your line editor, you can pass the name of your application, which will be used to load and save the history of commands entered by the user for this particular application.

Installation

Use NuGet or Paket to install the Mono.Terminal NuGet package.

Example

The following example shows how you can instantiate a line editor that can provide code completion for some words when the user presses TAB and how the user can edit them.

using Mono.Terminal;
using System;

class Demo {
    static void Main ()
    {
        // Creates a line editor, and sets the name of the editing session to
        // "foo".  This is used to save the history of input entered
        LineEditor le = new LineEditor ("foo") {
            HeuristicsMode = "csharp"
        };

        // Configures auto-completion, in this example, the result
        // is always to offer the numbers as completions
        le.AutoCompleteEvent += delegate (string text, int pos){
            string prefix = "";
            var completions = new string [] { 
                "One", "Two", "Three", "Four", "Five", 
                "Six", "Seven", "Eight", "Nine", "Ten" };
            return new Mono.Terminal.LineEditor.Completion (prefix, completions);
        };

        string s;

        // Prompts the user for input
        while ((s = le.Edit ("shell> ", "")) != null){
            Console.WriteLine ("Your Input: [{0}]", s);
        }
    }
}

Editing

Users can use the cursor keys to navigate both the text on the current line, or move back and forward through the history of commands that have been entered.

The interactive commands and keybindings are inspired by the GNU bash and GNU readline capabilities and follow the same concepts found there.

Kill Buffer: Copy and Paste

Copy and pasting works like bash, deleted words or regions are added to the kill buffer. Repeated invocations of the same deleting operation will append to the kill buffer (for example, repeatedly deleting words) and to paste the results you would use the Control-y command (yank).

History and searching

The history search capability is triggered when you press Control-r to start a reverse interactive-search and start typing the text you are looking for, the edited line will be updated with matches.Typing control-r again will go to the next match in history and so on.

Shortcuts

Shortcut Action performed
Left cursor, Control-b Moves the editing point left
Alt-b Moves one word back.
Alt-f Moves one word forward.
↑, Control-p Selects the previous item in the editing history.
↓, Control-n Selects the next item in the editing history.
Home key, Control-a Moves the cursor to the beginning of the line.
End key, Control-e Moves the cursor to the end of the line.
Delete, Control-d Deletes the character in front of the cursor.
Backspace Deletes the character behind the cursor.
Tab Triggers the completion and invokes the AutoCompleteEvent which gets both the line contents and the position where the cursor is.
Control-k Deletes the text until the end of the line and replaces the kill buffer with the deleted text. You can paste this text in a different place by using Control-y.
Control-l Clears the screen and forces a refresh of the line editor, useful when a background process writes to the console and garbles the contents of the screen.
Control-r Initiates the reverse search in history.
Alt-backspace Deletes the word behind the cursor and adds it to the kill ring. You can paste the contents of the kill ring with Control-y.
Alt-d Deletes the word above the cursor and adds it to the kill ring. You can paste the contents of the kill ring with Control-y.
Control-q Quotes the next input character, to prevent the normal processing of keyhandling to take place
Control-c Interrupts editing

More Repositories

1

mono

Mono open source ECMA CLI, C# and .NET implementation.
C#
11,128
star
2

SkiaSharp

SkiaSharp is a cross-platform 2D graphics API for .NET platforms based on Google's Skia Graphics Library. It provides a comprehensive 2D API that can be used across mobile, server and desktop models to render images.
C#
4,475
star
3

CppSharp

Tools and libraries to glue C/C++ APIs to high-level languages
C#
3,120
star
4

monodevelop

MonoDevelop is a cross platform .NET IDE
C#
2,821
star
5

xwt

A cross-platform UI toolkit for creating desktop applications with .NET and Mono
C#
1,363
star
6

taglib-sharp

Library for reading and writing metadata in media files
C#
1,278
star
7

Embeddinator-4000

Tools to turn .NET libraries into native libraries that can be consumed on Android, iOS, Mac, Linux and other platforms.
C#
758
star
8

VulkanSharp

Open source .NET binding for the Vulkan API
C#
537
star
9

CocosSharp

CocosSharp is a C# implementation of the Cocos2D and Cocos3D APIs that runs on any platform where MonoGame runs.
C#
493
star
10

monotouch-bindings

A collection of third party bindings for MonoTouch
C#
450
star
11

gtk-sharp

Gtk# is a Mono/.NET binding to the cross platform Gtk+ GUI toolkit and the foundation of most GUI apps built with Mono
C#
428
star
12

t4

T4 text templating engine
C#
393
star
13

sharpen

Sharpen is an Eclipse plugin created by db4o that allows you to convert your Java project into c#
Java
382
star
14

website

Mono's web site.
HTML
354
star
15

libgdiplus

C-based implementation of the GDI+ API
C
311
star
16

ngit

Automated jgit port to c#
C#
261
star
17

monomac

Bindings to create MacOS X applications with Mono.
C#
259
star
18

SkiaSharp.Extended

SkiaSharp is a cross-platform, comprehensive 2D graphics API for all .NET platforms. And, here is where you will find all sorts of extras that you can use with it.
C#
230
star
19

cxxi

C++ interop framework
C#
199
star
20

xsp

Mono's ASP.NET hosting server. This module includes an Apache Module, a FastCGI module that can be hooked to other web servers as well as a standalone server used for testing (similar to Microsoft's Cassini)
C#
195
star
21

roslyn

Roslyn Compiler - Tracks Mono Patches
C#
185
star
22

docker

Docker images, for the Docker container system
Dockerfile
166
star
23

mono-tools

The mono-tools package contains a series of extra tools for Mono users.
C#
163
star
24

mono-addins

Mono.Addins is a generic framework for creating extensible applications, and for creating add-ins which extend those applications.
C#
163
star
25

moon

Moonlight, an open source implementation of Silverlight for Unix systems
C#
160
star
26

mono-curses

Mono/.NET bindings to the Unix Curses as well as GUI framework for creating text applications with Curses
C#
138
star
27

winforms

Winforms samples for use with Mono's implementation of System.Windows.Forms
C#
133
star
28

aspnetwebstack

Mono branch of Microsoft's ASP.NET WebStack
C#
118
star
29

sdb

A command line client for the Mono soft debugger.
C#
116
star
30

opentk

OpenTK is a set of bindings to OpenGL, OpenCL and OpenAL. This is not the main repository, just a temporary import to allow Mono developers to make changes to this module. Please do not contribute changes here, contribute them to the upstream maintainers at http://www.opentk.com
C#
115
star
31

cocos-sharp-samples

CocosSharp samples
C#
113
star
32

ikvm-fork

A fork of the original cvs based IKVM repository
C#
102
star
33

mono-basic

Visual Basic Compiler and Runtime
Visual Basic .NET
101
star
34

TsToCSharp

Emit C# strongly typed interface code from TypeScript definition files.
TypeScript
92
star
35

mono-upnp

UPNP binding for Mono/.NET
C#
86
star
36

debugger-libs

Debugger libraries
C#
80
star
37

md-website

MonoDevelop WebSite
HTML
79
star
38

dbus-sharp

DBus Sharp
C#
77
star
39

api-doc-tools

.NET Reference API Toolchain
C#
68
star
40

webkit-sharp

C#/CLI bindings to WebKit/Gtk+
C#
68
star
41

sysdrawing-coregraphics

System.Drawing implementation using CoreGraphics.
C#
67
star
42

maccore

MacCore contains the shared code between MonoTouch and MonoMac
C#
63
star
43

Mono.Zeroconf

Cross platform ZeroConf client that works with the underlying ZeroConf stack on the platform for Mono and .NET
C#
60
star
44

mwf-designer

Windows.Forms designer for Mono. Work in progress
C#
44
star
45

heap-shot

C#
43
star
46

cecil-old

ECMA CIL Manipulation Library
C#
42
star
47

mono.posix

POSIX/Unix interface for Mono, .NET and .NET Core. Provides functionality for managed code to access POSIX/Unix features not accessible via the BCL. This repository supersedes the older code in https://github.com/mono/mono
C#
41
star
48

tao

The Tao OpenGL, OpenAL, GLU, FreeGlut bindings for .NET and Mono
C#
38
star
49

monodroid-bindings

Mono for Android Jar Bindings
C#
36
star
50

entityframework

C#
33
star
51

monkeywrench

Continuous build system used by Mono and Moonlight.
C#
33
star
52

linux-packaging-mono

Packaging metadata for mono-project.com packages
32
star
53

reference-assemblies

Binary reference assemblies
C#
32
star
54

mod_mono

Apache module to host the XSP ASP.NET host
C
30
star
55

jurassic

Mono port of the Jurassic JS Engine (http://jurassic.codeplex.com/).
C#
27
star
56

mono-tls

New TLS implementation for Mono.
C#
27
star
57

bockbuild

Build & packaging system, responsible for the Mono project distribution for Mac
Python
26
star
58

xamarin-gtk-theme

C
25
star
59

linux-packaging-msbuild

C#
23
star
60

SkiaSharp-API-docs

SkiaSharp and HarfBuzzSharp API reference docs
PowerShell
22
star
61

uia2atk

Accessibility bridge between UIA and Gnome's ATK
C#
21
star
62

csvorbis

C#
20
star
63

mono-webbrowser

Browser backends for Mono.WebBrowser
C#
18
star
64

moma

Mono Migration Analyzer. A tool to scan compiled assemblies and determine their compatibility with Mono.
C#
18
star
65

olive

Olive is an incubation module used to host new Mono code under development based on Microsoft's APIs. Olive code eventually graduates and is moved into the Mono distribution.
C#
16
star
66

monocov

Mono Code Coverage profiler module
C#
15
star
67

debugger

Mono Hard Debugger
C
15
star
68

monodevelop-flatpak

Makefile
14
star
69

gtk-sharp-ribbon

C#
14
star
70

guiunit

A unit test runner which interoperates with any Gui main loop
C#
13
star
71

repo

This is the mono repo - we'll put everything here
13
star
72

monologue

Monologue is Mono's blog aggregation software for the Mono community
C#
12
star
73

gir-sharp

C# binding generator for GIR format
C#
12
star
74

lb

Lame Blog, the lamest blog engine in the world
C#
12
star
75

WindowsAPICodePack

WindowsAPICodePack as imported from MonoDevelop
C#
11
star
76

gluezilla

C
10
star
77

roslyn-binaries

Pre-built binaries of Roslyn
C#
10
star
78

stetic

The Gtk# GUI designer
C#
10
star
79

pty-sharp

API for managing Unix pseudo-terminals from managed code
C
9
star
80

mono-microthreads

Microthreads implementation built on top of Mono.Tasklets library
C#
9
star
81

gnome-keyring-sharp

Bindings to Gnome's KeyRing APIs
C#
8
star
82

nuget-binary

Temporary repo to hold nuget binaries for use with MonoDevelop
8
star
83

winforms-tools

Open source Windows.Forms tools.
C#
8
star
84

old-code

Old mono code that has not been developed in years
C#
8
star
85

gio-sharp

Bindings to Glib's libgio
C#
8
star
86

gnome-sharp

Bindings to the core Gnome APIs
C#
8
star
87

crimson

C#
8
star
88

mooncodecs

open source codecs that can be plugged into Moonlight or Silverlight applications
C#
7
star
89

rocks

Mono.Rocks is a library of utility functions
C#
7
star
90

release

(Deprecated, no longer used) Tools to manage Mono's releases (scripts, web pages, build files)
HTML
7
star
91

WebAssembly.JSInterop

WebAssembly JSInterop library
JavaScript
7
star
92

linux-packaging-fsharp

Packaging metadata for mono-project.com packages
F#
7
star
93

nuget

Nuget
C#
6
star
94

monohotdraw

Vector drawing program
C#
6
star
95

dbus-sharp-glib

Managed dbus
C#
6
star
96

Mono.Simd.Math

Math library that uses Mono's accelerated Mono.Simd library
C#
6
star
97

eglib

C
6
star
98

heap-buddy

C#
6
star
99

boringssl

Custom version of Boring SSL used by Mono
C
6
star
100

google-sharp

C#
6
star