acme/README.md

190 lines
5.9 KiB
Markdown
Raw Normal View History

2017-01-26 19:29:57 +03:00
# Acme text editor
![Acme text editor](./acme.png)
Acme is a Zen-style text editor.
Using Acme you sacrifice:
- configuration files
- themes
- syntax highlighting
- autocompletion
- specific language support
- *your favourite Vim/Emacs/Sublime feature* :trollface:
What you gain is that instead of spending too much time configuring your editor, you will focus on actual working.
The killer feature of Acme is how it integrates into surrounding system. Acme is not trying to be a complete environment by itself. Acme acts as a glue which links together other programs and tools. With Acme the OS becomes your IDE.
## Install
### FreeBSD
```
pkg install plan9port
```
### macOS
```
brew install plan9port
```
### Debian
```
sudo apt-get install gcc libx11-dev libxt-dev libxext-dev libfontconfig1-dev
git clone https://github.com/9fans/plan9port $HOME/plan9
cd $HOME/plan9/plan9port
./INSTALL -r $HOME/plan9
```
## Environment setup
### Bash
```
export PLAN9="/path/to/plan9port"
export PATH="$PATH:$PLAN9/bin"
```
### Tcsh
```
setenv PLAN9 /path/to/plan9port
set path = ($path $PLAN9/bin)
```
## Font
Run font server:
```
fontsrv
```
In case it's not installed:
```
cd /path/to/plan9port/src/cmd/fontsrv/
9 mk install
```
Have a look at all available fonts:
```
9p ls font
```
Try one of them:
```
acme -f /mnt/font/'Droid Sans Mono'/13a/font
```
## Run
I spawn Acme by running `a` script.
## Scripts
Who is who in **bin** directory:
- `+ EXP` lisp-style polish notation calculator; example: `+ '(+ 1 2 3)'`
- `F`, `lne`, `lpe`, `ne`, `pe` perl one-liners shortcuts
- `a` start Acme
- `a+ SYMBOL` alignment (default is fat comma: `|a+ '=>'`, erlang proplist: `|a+ ' '`)
- `c+ SYMBOL` add comment (perl: `|c+` or `|c+ '#'`, erlang: `|c+ %`, js: `|c+ //`)
- `c- SYMBOL` delete comment (perl/erlang: `|c-`, js: `|c- //`)
- `cc+` snake_case to CamelCase
- `cc-` CamelCase to snake_case
- `d` works like `Edit , d`
- `eman MODULE` shortcut for `erl -man MODULE` (displays the manual page for the Erlang module MODULE)
2017-02-17 22:02:01 +03:00
- `erun MODULE ARG1 ... ARGN` erlangish `go run`
2017-01-26 19:29:57 +03:00
- `g+ WHAT` recursively grep current directory
2017-02-18 21:50:50 +03:00
- `gen WHAT` generate some code for me (html boilerplate, perl/go snippets, etc)
2017-01-26 19:29:57 +03:00
- `git+ MESSAGE` git: commit and push to master
- `h+` transform line to heading
- `hg+ MESSAGE` hg: commit and push to master
- `lc+` to lowercase
- `nobs+` is taken from plan9 `nobs` (it removes all backspace characters and the characters that precede them)
- `put+ BROWSER` regular `Put` plus reload active tab in browser: `ff` | `ch` | `sa`
- `s-` remove leading whitespace
- `s2t N_SPACES` spaces to tabs (default: 4 spaces to 1 tab)
- `t2s N_SPACES` tabs to spaces (default: 1 tab to 4 spaces)
- `t+` add tab
- `t-` delete tab
- `uc+` to uppercase
- `w+ WIDTH` (hello, `fmt -w WIDTH`)
Put these guys in your **$path**.
## Random notes
- `Edit =` find out the current line number
- `:13` goto 13th line
- `:0` goto file beginning
- `:$` goto file end
- `:0,$` or `:,` or `Edit ,` select the whole file
- `:1,5` select lines 1..5
- `Edit , d` clear window
- `Edit , < echo hello world` replace window body with some text
- `Edit , < erl -man maps` replace window body with erlang manual
- `Edit , s/text/TEXT/g` or `Edit , | perl -pe 's/text/TEXT/g'` global replace
- `$%` or `$samfile` current file name
- `$winid` current window id
- `echo some text | 9p write acme/$winid/body` append to the end of current window
- keyboard shortcuts:
- `ctrl-u` delete from cursor to start of line
- `ctrl-w` delete word before the cursor
- `ctrl-h` delete character before the cursor
- `ctrl-a` move cursor to start of the line
- `ctrl-e` move cursor to end of the line
- `ctrl-i` tab
- `ctrl-j` enter
- `ctrl-f` filepath autocompletion
- `fn-*left arrow*` go home (macOS)
- `fn-*right arrow*` go end (macOS)
- `:foobar` search forward
- `:-/foobar` search backwards
- press `esc` to select the last typed text
- press `esc` again to delete any selected text
- `Font` switch between fonts
- `:/^hel` regexp match: lines starting with 'hel'
- `:/lo\n/` regexp match: lines ending with 'lo'
- `:/^b/,/^e/` regexp match: lines between starting with 'b' and starting with 'e'
- `Dump` write the state of acme to the file
- `Load` restore from the dump
- `Edit , > perl` pipe window body through perl interpreter (better than `perl -e ...`)
## Sam commands
- `Edit +/hello/` search 'hello' forward
- `Edit -/hello/` search 'hello' backward
- `Edit , > wc -l` count lines in file
- `Edit , | sort` sort lines
- `Edit 3,5p` print lines 3..5 in new window
- `Edit 3,5 |uc+` lines 3..5 upper cased
- `Edit 3,5 s/HE/he/g` replace on 3..5 lines only
- `Edit 2 d` delete second line
- `Edit 2 a/new\n/` append text after 2nd line
- `Edit 2 i/new\n/` insert text before 2nd line
## Cut / Copy selection to a file
- select some text
- cut: `| sed '' > file.txt`
- copy: `> sed '' > file.txt`
- pipe selection to a file: `> awk '{ print(toupper($1)) }' | sort | nl > file.txt`
## Other Plan9 goodies
- `win` start shell in a new window
- `page FILE` view graphics files
- `web URL` open url in your browser
## Resources
- [Acme homepage](http://acme.cat-v.org/)
- [A Tour of the Acme Editor](http://www.youtube.com/watch?v=dP1xVpMPn8M)
- [Plan 9 Acme Intro](http://www.youtube.com/watch?v=dopu3ZtdCsg)
- [On using Acme as a day-to-day text editor](http://jlouisramblings.blogspot.ru/2013/04/acme-as-editor_20.html)
- [Lets Try Acme](http://echosa.github.io/blog/categories/acme/)
- [Plan 9 configuration](https://github.com/jlouis/plan9-setup)
- [Extensibility in the Acme text editor](http://www.mostlymaths.net/2013/03/extensibility-programming-acme-text-editor.html)
- [Plan 9 from User Space](https://github.com/9fans/plan9port)
- [Community: 9fans](http://plan9.bell-labs.com/wiki/plan9/9fans/index.html)
- [Google group: plan9port-dev](https://groups.google.com/forum/#forum/plan9port-dev)
- [Plan 9 and FreeBSD](https://forums.freebsd.org/threads/rio.29736/)