To:
wendellxe@yahoo.com,
9fans@9fans.net
Subject: Re: [9fans] Using the Acme Editor
From: "Russ Cox" <
rsc@swtch.com>
Date: Tue, 19 Aug 2008 10:58:50 -0700
In-Reply-To: <
382936.47212.qm@web57610.mail.re1.yahoo.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="US-ASCII"
Content-Transfer-Encoding: 7bit
Message-Id: <
20080819175641.3B7301E8C54@holo.morphisms.net>
Topicbox-Message-UUID: ff1fc8fa-ead3-11e9-9d60-3106f5b1d025
> what is the Acme way of approaching it?
> 01. Toggle on/off line wrapping
> 02. Toggle on/off EOL character display
Write shorter lines.
> 03. Display line numbers
You can go to a specific line with :n and
find out the current line with Edit =
> 04. Display ruler
If you really care, you can make a little file called ruler
that contains the text you want and then just open the
file in a window above the one you are editing.
But the Acme way is not to care what column you're on.
Just say no.
> 05. Rectangluar block selection
Someone posted a C program once that interpreted
the current selection as a rectangular block (starting
in the column where the selection began, ending
in the column where it ended, and spanning the lines
that it spans) and replaced each subline with a given
piece of text. But again, just say no.
> 06. Search and replace with confirmation at each item
Put the cursor at the top of the file.
In the tag, type and select
Edit .+#0/old/c/new/
and middle click it. That will search for old, replace it
with new, and scroll the file to highlight and show the
replacement. If you don't like that change, you middle
click Undo. Either way, middle clicking the Edit command
will find and change the next occurrence. So you can
just sit there middle clicking the Edit command until
you find one that you didn't mean to change, Undo,
and then go back to middle clicking Edit. Selecting
the command in the tag keeps acme from moving the
mouse to the changed selection, so that it is easier
to repeat the command.
> 07. Automatic insertion of spaces for tabs
Just say no. If you are forced to use spaces,
acme -a makes them a bit more bearable
by filling in the previous line's indentation
when you type Enter.
> 08. Syntax highlighting of code
Just say no.
> 09. Code folding
This is interesting but doesn't fit easily into the model.
I do wish there were a way to do this, and not just for
folding code. But it would probably break the very deep
assumption in acme that window contents are ordinary
text streams. Acme gets a lot of benefit from that one
decision, but this might be one of the drawbacks.
On the other hand, not having code folding means that
you have to write good code to begin with. Code folding
might be the C++ equivalent of Emacs paren matching for Lisp:
The various ML dialects share the same flaw in their
syntax. They lack a simple property I call editor
friendliness. An editor friendly language has the property
that a simple calculation is all that is needed to locate the
beginning of an expression when one is at the end of an
expression.
As you can guess, Lisp is a very editor friendly language.
Because of this fact, an experienced Emacs user realizes
nearly all of the benefits of structure based editing
without suffering from its restrictions.
--- John D. Ramsdell
The various Lisp dialects share the same flaw in their
syntax. They lack a simple property I call human
friendliness. A human friendly language has the property
that syntactic constructs are different enough from one
another that a simple visual inspection is all that is
needed to locate the beginning of an expression when one
is at the end of an expression.
As you can guess, Lisp is a very human unfriendly
language. Because of this fact, an experienced Lisp user
realizes that it is virtually impossible to write Lisp
programs of any size without substantial mechanical
assistance.
--- Andrew Koenig
You're better off writing code that doesn't need folding
to be read.
> 10. Code clips/completion
Just say no.
> 11. Bookmarks
Make a file with things like
/sys/src/cmd/acme/scrl.c
/sys/src/cmd/acme/scrl.c:100
/sys/src/cmd/acme/scrl.c:/^mousethread
and open it.
> 12. Display file diff with locked parallel windows
Personally, I'm happy with running diff -n and
right-clicking the headers to display a particular
section in context. This is actually better than the
locked windows because at any point you can go
do something else and then come back to it.
> 13. Customize the contextual display of commands in the tag line
Just say no.
> 14. Customize the color scheme
Just say no.
> 15. Change fonts
As Erik pointed out, there is a Font command that applies
to the whole window. Changing fonts inside the text
would break the text model.
> 16. HTML tag matching
Easy external program.
> 17. Display (in status bar?) the Unicode ID of glyph at cursor
As Erik pointed out, you can always cut and paste a character
and feed it to the "unicode" program. You don't even need
Erik's > command. Just type the word unicode (or "unicode -n")
in a tag somewhere, highlight the letter you want,
and then 2-1 click unicode.
> 18. Display right-to-left text
This is essentially left as an exercise to the interested user.
There are a lot of difficult issues here, and none of the
developers use right-to-left text.
> Also, regarding Acme's use as a file browser:
>
> 19. Open new directories in the same window,
> so that you don't get a desktop full of windows
> as you drill down through a directory tree.
Easy external program, but why not just type
the whole path to the directory you want, perhaps
with help from ^F?
Russ