lua: reap the zombie after io.popen()
[vis.git] / README.md
blob6747c8003d4dc05d1ed4d775ab8235921fad591e
1 Vis a vim-like text editor
2 ==========================
4 [![Linux Build Status](https://travis-ci.org/martanne/vis.svg?branch=master)](https://travis-ci.org/martanne/vis)
5 [![Cygwin Build Status](https://ci.appveyor.com/api/projects/status/61059w4jpdnb77ft/branch/master?svg=true)](https://ci.appveyor.com/project/martanne/vis/branch/master)
6 [![Coverity Scan Build Status](https://scan.coverity.com/projects/3939/badge.svg)](https://scan.coverity.com/projects/3939)
7 [![codecov](https://codecov.io/gh/martanne/vis/branch/master/graph/badge.svg)](https://codecov.io/gh/martanne/vis)
8 [![Documentation Status](https://readthedocs.org/projects/vis/badge/?version=master)](http://vis.readthedocs.io/en/master/?badge=master)
9 [![#vis-editor on freenode](https://img.shields.io/badge/IRC-%23vis--editor-blue.svg)](irc://irc.freenode.net/vis-editor)
11 Vis aims to be a modern, legacy free, simple yet efficient editor
12 combining the strengths of both vi(m) and sam.
14 It extends vi's modal editing with built-in support for multiple
15 cursors/selections and combines it with [sam's](http://sam.cat-v.org/)
16 [structural regular expression](http://doc.cat-v.org/bell_labs/structural_regexps/)
17 based [command language](http://doc.cat-v.org/bell_labs/sam_lang_tutorial/).
19 As an universal editor it has decent Unicode support and should cope with arbitrary files
20 including: large, binary or single-line ones.
22 Efficient syntax highlighting is provided using
23 [Parsing Expression Grammars](https://en.wikipedia.org/wiki/Parsing_expression_grammar)
24 which can be conveniently expressed using [Lua](http://www.lua.org/)
25 in the form of [LPeg](http://www.inf.puc-rio.br/~roberto/lpeg/).
27 The editor core is written in a reasonable amount of clean (your mileage
28 may vary), modern and legacy free C code, enabling it to run in resource
29 constrained environments. The implementation should be easy to hack on
30 and encourage experimentation. There also exists a Lua API for in process
31 extensions.
33 Vis strives to be *simple* and focuses on its core task: efficient text
34 management. Clipboard and digraph handling as well as a fuzzy file open
35 dialog are all provided by independent utilities. There exist plans to use
36 a client/server architecture, delegating window management to your windowing
37 system or favorite terminal multiplexer.
39 The intention is *not* to be bug for bug compatible with vi(m), instead 
40 we aim to provide more powerful editing features based on an elegant design
41 and clean implementation.
43 [![vis demo](https://asciinema.org/a/41361.png)](https://asciinema.org/a/41361)
45 Build instructions
46 ------------------
48 In order to build vis you will need a
49 [C99](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf)
50 compiler, a [POSIX.1-2008](http://pubs.opengroup.org/onlinepubs/9699919799/)
51 compatible environment as well as:
53  * [libtermkey](http://www.leonerd.org.uk/code/libtermkey/)
54  * [curses](https://en.wikipedia.org/wiki/Curses_(programming_library)) (recommended)
55  * [Lua](http://www.lua.org/) >= 5.2 (optional)
56  * [LPeg](http://www.inf.puc-rio.br/~roberto/lpeg/) >= 0.12
57    (optional runtime dependency required for syntax highlighting)
58  * [TRE](http://laurikari.net/tre/) (optional for more memory efficient regex search)
60 Assuming these dependencies are met, execute:
62     $ ./configure && make && sudo make install
64 By default the `configure` script will try to auto detect support for
65 Lua. See `configure --help` for a list of supported options. You can
66 also manually tweak the generated `config.mk` file.
68 Or simply use one of the
69 [distribution provided packages](https://github.com/martanne/vis/wiki/Distribution-Packages).
71 Documentation
72 -------------
74 End user documentation can be found in the
75 [`vis(1)` manual page](http://martanne.github.io/vis/man/vis.1.html)
76 and the [Wiki](https://github.com/martanne/vis/wiki). Read the
77 [FAQ](https://github.com/martanne/vis/wiki/FAQ) for common questions.
78 Learn about some differences compared to
79 [`sam(1)`](https://github.com/martanne/vis/wiki/Differences-from-Sam) and
80 [`vim(1)`](https://github.com/martanne/vis/wiki/Differences-from-Vi(m)),
81 respectively.
83 [C API](https://vis.readthedocs.io/) as well as [Lua API](http://martanne.github.io/vis/doc/)
84 documentation is also available.
86 Non Goals
87 ---------
89   Some features which will *not* be implemented:
91    - tabs / multiple workspaces / advanced window management
92    - file and directory browser
93    - support for file archives (tar, zip, ...)
94    - support for network protocols (ftp, http, ssh ...)
95    - encryption
96    - compression
97    - GUIs (neither x11, motif, gtk, win32 ...) although the codebase
98      should make it easy to add them
99    - VimL
100    - right-to-left text
101    - ex mode, we have more elegant structural regexp
102    - diff mode
103    - vimgrep
104    - internal spell checker
105    - lots of compile time configurable features / `#ifdef` mess
107 How to help?
108 ------------
110 There are plenty of ways to contribute, below are a few ideas:
112  * Artwork
113     - [Color Themes](https://github.com/martanne/vis/wiki/Themes)
114     - [Name](https://github.com/martanne/vis/issues/338) +
115       [Logo](https://github.com/martanne/vis/issues/328)
116     - Homepage?
117  * Documentation
118     - [Manual Pages](https://github.com/martanne/vis/wiki/Developer-Overview#manual-pages)
119     - Improve `:help` output
120  * Lua
121     - [API Documentation](https://github.com/martanne/vis/wiki/Developer-Overview#api-documentation)
122       and Examples
123     - [Unit Tests](https://github.com/martanne/vis-test/tree/master/lua)
124     - [Plugin Development](https://github.com/martanne/vis/wiki/Plugins)
125     - [API Design](https://github.com/martanne/vis/issues/292)
126  * [Testing Infrastructure](https://github.com/martanne/vis-test)
127  * [Distribution Packaging](https://github.com/martanne/vis/wiki/Distribution-Packages)
128  * [Core Editor Design](https://github.com/martanne/vis/issues?q=is%3Aopen+is%3Aissue+label%3Adesign)
130 Checkout the [Developer Overview](https://github.com/martanne/vis/wiki/Developer-Overview)
131 to get started and do not hesitate to ask question in the `#vis-editor`
132 IRC channel on freenode.