Powerful scripting language & versatile interactive shell add sylixos support.
Go to file
2017-12-02 18:52:57 +00:00
daemon daemon: Fix build on Windows. 2017-12-02 18:45:41 +00:00
edit edit/lscolors: Support Windows; minimize dependency on syscall package. 2017-12-02 18:45:45 +00:00
eval edit: All files except external_cmd.go now build on Windows. 2017-12-02 18:52:57 +00:00
getopt Fix go-vet errors. 2017-05-21 23:20:55 +01:00
glob Add a helper function for testing in a tempdir. 2017-05-23 05:40:49 +01:00
parse Support line continuation with backquote. 2017-08-13 18:41:36 +01:00
shell Don't dump stack on SIGQUIT. 2017-11-30 17:17:58 +01:00
store Replace SQLite with BoltDB (#441) 2017-07-19 22:19:42 +02:00
sys Make the sys package build on Windows. 2017-12-02 18:45:45 +00:00
util use proper print in pprinter 2017-11-23 10:28:56 +01:00
vendor Update dependencies. 2017-08-30 20:37:33 +02:00
web Use understore in filenames. 2017-06-26 19:47:10 +02:00
.gitattributes Use .gitattributes to filter go sources through goimports 2014-02-10 12:41:16 +08:00
.gitignore Updated .gitignore (#303) 2017-01-12 00:17:28 +00:00
.travis.yml Drop support for Go 1.7. 2017-11-29 15:57:51 +01:00
build-and-upload.elv Cross-compile correctly by setting GO{ARCH,OS}. 2017-11-29 18:28:27 +01:00
CONTRIBUTING.md Spell "gettable" correctly. 2017-10-15 15:19:45 +02:00
Dockerfile update Dockerfile 2016-02-09 16:43:58 +08:00
Gopkg.lock Use persistent hashmap to implement map. 2017-09-01 01:07:20 +02:00
Gopkg.toml Use the "dep" tool to manage dependencies. 2017-06-12 23:06:30 +01:00
LICENSE Project rename: das -> elvish 2014-01-29 18:44:07 +08:00
main_test.go Add empty tests to get accurate coverage. 2017-06-01 00:17:04 +01:00
main.go daemon/*: Comment and cleanup. 2017-11-11 16:08:45 +00:00
Makefile Makefile: Don't let "upload" depend on "get". 2017-11-29 17:47:57 +01:00
README.md Drop support for Go 1.7. 2017-11-29 15:57:51 +01:00

A friendly and expressive Unix shell

GoDoc Build Status on Travis Coverage Status Go Report Card License Twitter

General discussions: Gitter Telegram Group #elvish on freenode

Development discussions: Gitter Telegram Group #elvish on freenode

logo

Elvish is a cross-platform shell suitable for both interactive use and scripting. It features a full-fledged, non-POSIX-shell programming language with advanced features like namespacing and anonymous functions, and a powerful, fully programmable user interface that works well out of the box.

... which is not 100% true yet. Elvish is already suitable for most daily interactive use, but it is not yet complete. Contributions are more than welcome!

This README documents the development aspect of Elvish. Other information is to be found on the website.

Building Elvish

To build Elvish, you need

  • A Go toolchain >= 1.8.

  • Linux (with x86, x64 or amd64 CPU) or macOS (with reasonably new hardware).

    It's quite likely that Elvish works on BSDs and other POSIX operating systems, or other CPU architectures; this is not guaranteed due to the lack of good CI support and developers who use such OSes. Pull requests are welcome.

    Windows is not supported yet.

The Correct Way

Elvish is a go-gettable package. To build Elvish, first set up your Go workspace according to How To Write Go Code, and then run

go get github.com/elves/elvish

The Lazy Way

Here is something you can copy-paste into your terminal:

export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
mkdir -p $GOPATH

go get github.com/elves/elvish

for f in ~/.bashrc ~/.zshrc; do
    printf 'export %s=%s\n' GOPATH '$HOME/go' PATH '$PATH:$GOPATH/bin' >> $f
done

The scripts sets up the Go workspace and runs go get for you. It assumes that you have a working Go installation and currently use bash or zsh.

The Homebrew Way

Users of macOS can build Elvish using Homebrew:

brew install --HEAD elvish

Name

In roguelikes, items made by the elves have a reputation of high quality. These are usually called elven items, but I chose "elvish" because it ends with "sh", a long tradition of Unix shells. It also rhymes with fish, one of the shells that influenced the philosophy of Elvish.

The word "Elvish" should be capitalized like a proper noun. However, when referring to the elvish command, use it in lower case with fixed-width font.

Whoever practices the Elvish way by either contributing to it or simply using it is called an Elf. (You might have guessed this from the name of the GitHub organization.) The official adjective for Elvish (as in "Pythonic" for Python, "Rubyesque" for Ruby) is Elven.