A Tour of Acme (2012)
research.swtch.com
research.swtch.com
- I really like how "unixy" of an editor it is; you can easily add new editing commands by writing a small program that reads from stdin and writes to stdout and use it to manipulate text within Acme. Of course, that program could be a shell script, a Python program or a Java program; Acme only cares that it can give and receive text.
- The editor has a mount point that contains the configuration of the editor and this can also be manipulated by external programs to influence the editor.
- The concept of addresses (e.g. an address into a file, an email address, a URL, etc.) and being able to click on such an address and have the editor DWIM is very powerful.
- I still don't know how to classify Acme: is it a minimal or a kitchen sink editor? You can make it do anything you want, but out of the box it is extremely bare. Is it a programmer's editor or a general purpose editing tool?
I'm not leaving my trusty Emacs, but I'm happy that I took some time to get to know something that was completely different.
But I agree that it's not the best choice for some languages or environments.
The same (or very close) interface was available for unix in 1982 with the Blit graphics terminal. Blit was created by Rob Pike (acme creator) too and it influenced the next Pike's GUIs (rio and 8½).
In Plan9's rio, windows are treated as completely editable text, then the mouse chords for cut-and-paste works for all applications transparently.
Blit promotional video: https://www.youtube.com/watch?v=emh22gT5e9k
Wiki: https://en.wikipedia.org/wiki/Blit_(computer_terminal)
In my current view, the lack of syntax highlighting is a great feature!
For now emacs is only for lisp/scheme languages.
What Atom considers bare minimum is stuff that Acme doesn't even think about: syntax-highlighting, auto-indentation, and auto-complete.
For terminal, acme have support for windows attached to programs (if the program is a shell, you have something like a terminal). From the manpage:
Win creates a new acme window and runs a command (default /bin/rc) in it,
turning the window into something analogous to an rio(1) window.
Executing text in a win window with button 2 is similar to using Send.
Mail client is builtin but only for upas/fs. If you want/need another approach you can extend by external programs.Some other applications of plan9 have taken the advantage of acme UI (like abaco web browser) but they aren't builtin inside acme.
plan9 is meant to have very little "native". Even moving to line number 4 with :4 is not native, it's in the plumber.
[1] https://upload.wikimedia.org/wikipedia/commons/thumb/9/98/Ac...
Yes, plumber is the app behind the scenes that make acme so much integrated with OS and other apps. The same applies for right-click on the text between '<' and '>' in includes (in C source files) for opening header files. That's the kind of programming environment that I miss when using emacs/vi.
In that screenshot I am editing PHP files on an OpenBSD box at the colocation. It is running u9fs tunneled over ssh so I can connect to the filesystem via 9p.
I have three plumbing rules for editing PHP.
One window runs the shell command "tail -f /n/momo/var/log/httpd/error". From there I can plumb
Syntax error in /path/webpage.php on line 56
It extracts the filename part "/path/webpage.php" and line "56". The web server is chrooted.It then checks if /n/momo/var/www/path/webpage.php exists and if it does it opens that file at line 56
If I plumb a file ending in .class or .inc it looks in /n/momo/var/www/php (my include directory) and opens it if it exists. This is so I can plumb file.class in include("file.class") in php files
The final one fires if I plumb "validfunctioname(", it runs a shell script on the server and greps for that function in all my php files.
I use the plan9 method of defining functions with
function
validfunctionname(args)
so that grep -ni '^validfunctionname(' will work.So I had what most people would think a pretty useful PHP ide in twenty lines of code.