All Projects → ChrisPenner → Rasa

ChrisPenner / Rasa

Licence: gpl-3.0
Extremely modular text editor built in Haskell

Programming Languages

haskell
3896 projects

Projects that are alternatives of or similar to Rasa

Atom Modular Snippets
:atom: A modular solution to snippets in @Atom.
Stars: ✭ 8 (-98.66%)
Mutual labels:  modular, editor
Python Markdown Editor
Standalone editor for your markdown files
Stars: ✭ 164 (-72.53%)
Mutual labels:  modular, editor
Litegraph.js
A graph node engine and editor written in Javascript similar to PD or UDK Blueprints, comes with its own editor in HTML5 Canvas2D. The engine can run client side or server side using Node. It allows to export graphs as JSONs to be included in applications independently.
Stars: ✭ 2,735 (+358.12%)
Mutual labels:  modular, editor
Diagram
☊ Tool for making node graphs. Inspired by dependency graph. Used mainly for automation services 📈
Stars: ✭ 510 (-14.57%)
Mutual labels:  editor
Zikrouter
Interface-oriented router for discovering modules, and injecting dependencies with protocol in Objective-C and Swift.
Stars: ✭ 516 (-13.57%)
Mutual labels:  modular
Remote Ftp
FTP/FTPS/SFTP client for Atom.io
Stars: ✭ 549 (-8.04%)
Mutual labels:  editor
Pyscripter
Pyscripter is a feature-rich but lightweight Python IDE
Stars: ✭ 584 (-2.18%)
Mutual labels:  editor
Pxt Microbit
A Blocks / JavaScript code editor for the micro:bit built on Microsoft MakeCode
Stars: ✭ 501 (-16.08%)
Mutual labels:  editor
Pptist
基于 Vue3.x + TypeScript 的在线演示文稿应用。实现PPT幻灯片的在线编辑、演示。
Stars: ✭ 559 (-6.37%)
Mutual labels:  editor
Xcodeway
⛵️ An Xcode Source Editor Extension that helps navigating to many places easier
Stars: ✭ 530 (-11.22%)
Mutual labels:  editor
Vim.wasm
Vim editor ported to WebAssembly
Stars: ✭ 4,915 (+723.28%)
Mutual labels:  editor
Subplayer
📝 SubPlayer is a online subtitle editor
Stars: ✭ 517 (-13.4%)
Mutual labels:  editor
React Markdown Editor Lite
a light-weight Markdown editor based on React. 一款轻量的基于React的markdown编辑器
Stars: ✭ 553 (-7.37%)
Mutual labels:  editor
Mavoneditor
mavonEditor - A markdown editor based on Vue that supports a variety of personalized features
Stars: ✭ 5,203 (+771.52%)
Mutual labels:  editor
Howl
The Howl Editor
Stars: ✭ 577 (-3.35%)
Mutual labels:  editor
Sceditor
A lightweight HTML and BBCode WYSIWYG editor
Stars: ✭ 503 (-15.75%)
Mutual labels:  editor
Gf
GoFrame is a modular, powerful, high-performance and enterprise-class application development framework of Golang.
Stars: ✭ 6,501 (+988.94%)
Mutual labels:  modular
Pen
enjoy live editing (+markdown)
Stars: ✭ 4,740 (+693.97%)
Mutual labels:  editor
Azteceditor Android
A reusable native Android rich text editor component.
Stars: ✭ 518 (-13.23%)
Mutual labels:  editor
Tabler
Tabler is free and open-source HTML Dashboard UI Kit built on Bootstrap
Stars: ✭ 24,611 (+4022.45%)
Mutual labels:  modular

Rasa (Rah-zah)

Join the chat at https://gitter.im/rasa-editor/Lobby Hackage

Embarrassingly modular customizable text editor built in Haskell.

Rasa Editor

A Rasa editing session with multiple cursors & viewports.

Documentation

You can find hackage documentation for rasa and some extensions here:

What people are saying

Excessively Modular! - some bald guy

I'm glad I'm unemployed so I have time to configure it! - my mate Steve

You should go outside one of these days. - Mother

Getting started

Configuring Rasa

Rasa is designed to be easy to configure and script, both when adding extensions provided by the community, and when writing your own user-scripts.

Rasa is written in Haskell, and the configuration is done in the Haskell language, don't let that scare you though, you can script Rasa and add extensions without knowing much haskell!

Building Your First Extension

^ That guide will walk you through installation and getting running! Once you're running rasa you can experiment with creating your own adaptations. You should customize your keymap to add a few mappings you like. It's a short step from here to developing your own extensions. Actions like you'd use in an extension can be registered to listeners in your Main.hs. You can build and experiment with entire extensions in your config file and extract them as a package when you're ready, kind of like a vimrc file. Again, just read the extension guide, it covers what you need to know!

If you have any issues (and I'm sure there'll be a few; it's a new project!) please report them here.

Core Principles

Rasa is meant to be about as modular as an editor can be. The goal is for as much code as possible to be extracted into composable extensions. If the core editing facilities can't be implemented as extensions, then the extension interface isn't powerful enough. I've taken this to its extreme, for instance the following features are implemented as rasa extensions that anyone in the community could have written.

  • Loading and saving files
  • Key bindings
  • Listening for keyboard events
  • Multiple cursors
  • Rendering the editor to the terminal

This approach has some unique pros and cons:

Pros

  • Implementing most core functionality as extensions ensures a powerful and elegant extension interface.
  • Flexibility; don't like the default cursor implementation? Write your own!
  • Adaptability; the core of Rasa is miniscule, you can mix and match extensions to build any editor you want.

Cons

  • Module cross-dependencies makes the community infrastructure more fragile; We'll likely develop a solution to this as a community as time goes on.
  • Fragmentation; Not having a single implementation for a given feature means extensions that depend on a feature have to pick a specific implementation to augment. Over time data-structures and types will be standardized into Rasa's core to help alleviate this.

Core Features

As stated above, the editor itself focuses primarily on easy extensibility, so it doesn't have a lot of editing features built in, instead it focuses on standardizing a good extension API. We focus on creating a simple system so people can pick it up quickly.

Here are some features of that API:

Event Listener System

All actions in the editor are triggered via an event/listener system. Extensions may subscribe to events from the editor, or from another extension and perform an action in response. The Event which triggered the listener is available as an argument). Extensions may also dispatch any kind of event at any time which other extensions may listen for.

Actions/BufActions

Extensions define things that they'd like to do using a powerful set of functions which they can embed in an Action. Within an action an extension may perform IO, access the available buffers, store and access extension state, and edit text.

Running Tests

Run all tests:

  • stack test

Run only tests for core editor:

  • stack test rasa

Installation

At the moment you must build Rasa from source;

To provide reproducible builds, Rasa uses Stack & Nix.

  1. Install stack
  2. Install nix
  3. Clone this repo and cd into the directory
  4. Run stack build && stack exec rasa (you may want to alias this to rasa)

Installation without nix (not-recommended)

  1. Install stack
  2. Clone this repo and cd into the directory
  3. Run stack build --no-nix && stack exec rasa --no-nix (you may want to alias this to rasa)

Troubleshooting

If you have issues with nix; you may try running rasa without it with stack build --no-nix && stack exec rasa; You'll likely have to consider the following:

  • You may need to install icu4c (brew install icu4c), it's a dependency of the rope library rasa uses.
  • On linux, when the error message Missing C libraries: icuuc, icui18n, icudata appears, install libicu-dev (e.g. with sudo apt install libicu-dev).
  • You'll need to point to the icu4c lib in your stack.yaml wherever it's stored on your system. If you install using brew on your Mac, then you can add the following to your stack.yaml:
extra-lib-dirs:
- /usr/local/opt/icu4c/lib 
extra-include-dirs:
- /usr/local/opt/icu4c/include
  • Depending on which LTS you're on, you'll likely also have to add each rasa package you use to your stack.yaml as extra-deps, here's an example:
# in stack.yaml
extra-deps:
- rasa-0.1.0.0
- rasa-ext-cursors-0.1.0.0
- rasa-ext-logger-0.1.0.0
- rasa-ext-vim-0.1.0.0
- text-lens-0.1.0.0
- rasa-ext-files-0.1.0.0
- rasa-ext-cmd-0.1.0.0
- rasa-ext-slate-0.1.0.0
- vty-5.14

Contributing

Things are moving quickly, but I'd love a hand! You can get a rough idea of where you can help out at the Roadmap, feel free to leave a comment there asking any questions.

Chatting about features is a key part of Rasa's development; come join us in the Chat Room!

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].