https://github.com/apainintheneck/crystal-linenoise
Crystal bindings for the Linenoise library
https://github.com/apainintheneck/crystal-linenoise
crystal library linenoise
Last synced: about 1 month ago
JSON representation
Crystal bindings for the Linenoise library
- Host: GitHub
- URL: https://github.com/apainintheneck/crystal-linenoise
- Owner: apainintheneck
- License: mit
- Created: 2024-01-07T08:33:25.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-05-06T02:36:07.000Z (about 1 year ago)
- Last Synced: 2025-02-13T11:32:28.484Z (3 months ago)
- Topics: crystal, library, linenoise
- Language: C
- Homepage: https://apainintheneck.github.io/crystal-linenoise/
- Size: 147 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# linenoise
Crystal bindings for the lightweight [Linenoise](https://github.com/antirez/linenoise) line editor library written in C. It is a minimal alternative to readline and libedit.
Linenoise is written in C code that supports most distributions of the Linux, macOS and BSD operating systems. We compile the library on install so linking should not be a problem and the library is lightwieght (less than 1500 lines of code) so the resulting binary should be small.
As of `v0.4.0`, UTF-8 support has been added. This means that the cursor won't have problems when writing in languages with non-Latin alphabets or emoji.
## Installation
1. Add the dependency to your `shard.yml`:
```yaml
dependencies:
linenoise:
github: apainintheneck/crystal-linenoise
```2. Run `shards install`
## Usage
```crystal
require "linenoise"COMPLETIONS = [
...
]# Enable tab completions.
Linenoise::Completion.add(COMPLETIONS)# Enable completion hints to the right of the cursor.
Linenoise::Completion.enable_hints!HISTORY_FILE = "..."
Linenoise.load_history(HISTORY_FILE)
# A simple REPL.
loop do
line = Linenoise.prompt("> ")
break if line.nil?# Process line here.
Linenoise.add_history(line)
Linenoise.save_history(HISTORY_FILE)
end
```For more information look at the files in the `example/` directory and the [documentation website](https://apainintheneck.github.io/crystal-linenoise/).
## Example Projects
These projects use this library as a dependency and can be used as a guide when setting things up. Let me know if you'd like your project to be added to the list.
- [gitsh](https://github.com/apainintheneck/gitsh) : a simple shell for `git`
## Missing Features & Known Bugs
There is no high-level wrapper around the multiplexing API but the Crystal bindings have been added for it. See `src/lib/lib_linenoise.cr` for more details.
## Alternatives
There are a few other line editing libraries available for Crystal.
- [reply](https://github.com/I3oris/reply)
- [fancyline](https://github.com/Papierkorb/fancyline)
- [crystal-readline](https://github.com/crystal-lang/crystal-readline)## Development
Development setup is mostly managed by the Makefile.
Other than that there is the Linenoise extension in `ext/` that can be built with `make extension`. Keep in mind that this also gets installed automatically in a postinstall step when this shard is included as a dependency and `shard install` is run.
Interactive testing is available using the `example/example.cr` program which allows you to check on different line editing features. It can be run with `make example`. The `make specs` command runs the Crystal specs. The `make expect` command runs tests on this example program using an `expect` script so `expect` will need to be installed to run them.
The `make lint` command checks for linting errors and the `make fix` command fixes them automatically.
The `crystal docs` command can be used to build the docs locally or you can visit the [documentation website](https://apainintheneck.github.io/crystal-linenoise/) that gets generated automatically by the `.github/workflows/docs.yml` workflow.
## Contributing
1. Fork it ()
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create a new Pull Request## Contributors
- [apainintheneck](https://github.com/apainintheneck) - creator and maintainer
## Acknowledgments
I have pulled in a few PRs from upstream that haven't been merged into the main Linenoise project yet.
Check out the [extension changes](ext/CHANGES.md) file for more information.
## License
This library is released under the [MIT license](LICENSE).
The Linenoise library is included in this shard and uses the [BSD-2-Clause license](ext/LICENSE)
which allows code to be used freely as long as the license is included in derivative works.