[9fans] Using the Acme Editor - Plan9

This is a discussion on [9fans] Using the Acme Editor - Plan9 ; Seeking an alternative to vi and emacs, I've been giving Acme a try (acme-sac, actually). After reading the articles and man pages and playing with it for a few days, I'll admit I don't see how Acme could be even ...

+ Reply to Thread
Results 1 to 20 of 20

Thread: [9fans] Using the Acme Editor

  1. [9fans] Using the Acme Editor

    Seeking an alternative to vi and emacs, I've been giving Acme a try (acme-sac, actually). After reading the articles and man pages and playing with it for a few days, I'll admit I don't see how Acme could be even remotely competitive with vim/emacs for editing code.

    Searching the 9fans archive, I found admonitions that you have to learn Acme's very different operating paradigm, but no specific advice. So I'm posting here a list of editor features I miss in Acme. For each item, what is the Acme way of approaching it?

    I hope that the replys in this thread will serve as a reference for others trying to learn Acme.

    01. Toggle on/off line wrapping
    02. Toggle on/off EOL character display
    03. Display line numbers
    04. Display ruler
    05. Rectangluar block selection
    06. Search and replace with confirmation at each item
    07. Automatic insertion of spaces for tabs
    08. Syntax highlighting of code
    09. Code folding
    10. Code clips/completion
    11. Bookmarks
    12. Display file diff with locked parallel windows
    13. Customize the contextual display of commands in the tag line
    14. Customize the color scheme
    15. Change fonts
    16. HTML tag matching
    17. Display (in status bar?) the Unicode ID of glyph at cursor
    18. Display 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.







  2. Re: [9fans] Using the Acme Editor

    On Tue, Aug 19, 2008 at 8:52 AM, Wendell xe wrote:
    > Seeking an alternative to vi and emacs, I've been giving Acme a try (acme-sac, actually). After reading the articles and man pages and playing with it for a few days, I'll admit I don't see how Acme could be even remotely competitive with vim/emacs for editing code.
    >



    You have to learn it.

    If you want emacs and vi, you won't get them with acme -- besides, you
    already had them, remember?

    Acme is a very nice tool. But you have to climb the learning curve,
    and there's no escaping it.

    I don't know how else to put it. Most times, I use acme, but still use
    emacs and vi as well. They are different.

    FWIW, there's lots of people who think emacs and vi are a joke for
    code use, and use the more sophisticated IDEs out there. To each his
    own.

    ron


  3. Re: [9fans] Using the Acme Editor

    > 01. Toggle on/off line wrapping
    > 02. Toggle on/off EOL character display
    > 03. Display line numbers
    > 04. Display ruler
    > 05. Rectangluar block selection
    > 06. Search and replace with confirmation at each item
    > 07. Automatic insertion of spaces for tabs
    > 08. Syntax highlighting of code
    > 09. Code folding
    > 10. Code clips/completion
    > 11. Bookmarks
    > 12. Display file diff with locked parallel windows
    > 13. Customize the contextual display of commands in the tag line
    > 14. Customize the color scheme


    i don't see how any of these would be useful
    to me. in particular, i especially do not want
    a ruler or any ascii-graphical bits. if i want a
    typesetter, i'll use one.

    if you are the type who wants a hammer with
    an lcd temperature display, i would venture
    that plan 9 tools are not for you.

    > 16. HTML tag matching


    this could be a useful addition. it's an easy fix.

    > 15. Change fonts


    B2 "Font $fontname". B2 means select with the
    middle button. for example,
    Font /lib/font/bit/cyberbit/mod14.font

    > 17. Display (in status bar?) the Unicode ID of glyph at cursor


    B2 ">unicode -n `{cat}"

    > 18. Display right-to-left text


    this is a plan 9 "limitation". although it is an
    interesting philisophical question if a text
    editor should get involved in such complications.

    it seems to me that the zero-width combiners and
    directional markers make unicode poor-man's
    metafont masquerading as a character set.

    then again, i'm a well-known luddite.

    - erik



  4. Re: [9fans] Using the Acme Editor

    Going by your list, I would conclude your code is something in the
    vein of Java plus web stuff, maybe even J2EE, or maybe the scourge of
    the editing world, Python.

    If that's the case and you have to deal with other people's code, Acme
    is probably not going to help you very much. In fact Acme will make
    the shortcomings of any code you are looking at a lot more obvious.

    For me, that's a crucial thing. Keeps my code in check purely through
    the text of it.

    Acme's strengths lie in navigating, writing and changing code that is
    of a certain standard.

    Just my thoughts,
    Robby


  5. Re: [9fans] Using the Acme Editor

    This is all as far as I know how to use acme (mind you I haven't
    stretched acme out as far as the other guys might have)...

    On Tue, Aug 19, 2008 at 9:52 AM, Wendell xe wrote:
    > Seeking an alternative to vi and emacs, I've been giving Acme a try (acme-sac, actually). After reading the articles and man pages and playing with it for a few days, I'll admit I don't see how Acme could be even remotely competitive with vim/emacs for editing code.
    >


    Isn't "I don't see how Acme could be even remotely competitive..."
    seem a tad harsh? :-) It is just a little different than what you
    normally use. Acme is pretty powerful. And how I answer your questions
    below might shed light with you on how it is used.

    > Searching the 9fans archive, I found admonitions that you have to learn Acme's very different operating paradigm, but no specific advice. So I'm posting here a list of editor features I miss in Acme. For each item, what is the Acme way of approaching it?
    >
    > I hope that the replys in this thread will serve as a reference for others trying to learn Acme.
    >
    > 01. Toggle on/off line wrapping


    You can't. It always wraps lines around.

    > 02. Toggle on/off EOL character display


    Edit ,x/\n/ c/\n/
    Undo

    :-)

    > 03. Display line numbers


    Edit =

    ....will show the line number where dot is, but to display the line
    number to the side of each line. I have no use for such a thing so I
    haven't even thought about it at all as I use acme.

    > 04. Display ruler


    No such thing in acme.

    > 05. Rectangluar block selection


    No such thing in acme.

    > 06. Search and replace with confirmation at each item


    Place in the tagline your edit line,
    Edit s/oldtext/newtext/

    1. B3-sweep or B3 your text to search
    2. B2 your edit line
    repeat process from 1 till you are happy

    > 07. Automatic insertion of spaces for tabs


    No automatic tab-to-space replacements. Naturally you can do it
    from an Edit command.

    > 08. Syntax highlighting of code


    No such thing in acme.

    > 09. Code folding


    No such thing built-in to acme.

    > 10. Code clips/completion


    Place cursor where you want to insert text and use the '<' command
    and provide the command that outputs your text.

    OR

    B2-sweep your keyword, and use the '|' command, and provide the
    command that will accept the keyword and spit out the corresponding
    text.

    > 11. Bookmarks


    Have a separate bookmark file (or maybe even in the tag line
    before you do a Dump), that uses the filepath:linenumber format and
    just B3 the 'bookmarks'.

    > 12. Display file diff with locked parallel windows


    Acme doesn't have a built-in 'diff mode'

    > 13. Customize the contextual display of commands in the tag line


    If you mean dynamically change available commands in the tag line
    as you move around your code, no there is no such thing. (It might be
    an interesting acme file server exercise).

    If you mean preserve common commands that you use often for the
    current work you are doing you can just place the stuff you want in
    the tag line and Dump/Load it or pre-load a Guide file.

    > 14. Customize the color scheme


    Edit the acme code, recompile and enjoy :-) :-) :-) No color scheme
    changing stuff built-in to acme. I know some people want their baby
    green, polka dot inspired color schemes but acme isn't about that.
    :-)

    > 15. Change fonts


    The Font command does this as well as the command line parameters
    to Acme, please see manual.

    > 16. HTML tag matching


    If you mean automatic tag completion, you can do that using my
    suggestion in 10.

    If you mean just matching the start and end tags, acme does not
    have that built-in or something but you can code (or use Edit?) for
    that

    > 17. Display (in status bar?) the Unicode ID of glyph at cursor


    Eric already answered that.

    > 18. Display right-to-left text


    Eric already answered that.

    >
    > 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.


    I think some of the other guys have made slight code changes so
    that acme will do what you stated, so you'd need to really modify the
    acme code, recompile and enjoy.

    The other guys might have even better suggestions.

    Resistance is futile, you _will_ be assimilated. :-)

    Best Regards,
    Mon


  6. Re: [9fans] Using the Acme Editor

    > 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



  7. Re: [9fans] Using the Acme Editor

    On Aug 19, 2008, at 11:52 AM, Wendell xe wrote:

    > 01. Toggle on/off line wrapping
    > 02. Toggle on/off EOL character display
    > 03. Display line numbers
    > 04. Display ruler
    > 05. Rectangluar block selection
    > 06. Search and replace with confirmation at each item
    > 07. Automatic insertion of spaces for tabs
    > 08. Syntax highlighting of code
    > 09. Code folding
    > 10. Code clips/completion
    > 11. Bookmarks
    > 12. Display file diff with locked parallel windows
    > 13. Customize the contextual display of commands in the tag line
    > 14. Customize the color scheme


    Acme is not an IDE. It is a text editor. If you want these facilities,
    implement them yourself. That's what the source is provided for.

    Some of your ideas can be implemented as external programs.

    3. awk '{ print NR, $0 }' file
    7. sed 's/ / /g' file > file2 && mv file2 file
    12. This is harder. I suggest a program that works like so:
    % pdiff a.c b.c
    #include
    #include

    int a; char a;

    void
    main(void) q(void)
    {
    ...
    What I suggest is to see how idiff(1) works. idiff merges two files
    by allowing you to select which difference to use. The source is /sys/
    src/cmd/idiff.c.



  8. Re: [9fans] Using the Acme Editor

    > For me, that's a crucial thing. Keeps my code in check purely through
    > the text of it.


    If I understand what you are saying I find this is really interesting.
    I many of the prople I work with use syntax highlighting editors and I
    often find their code difficult to read (I use sam).

    In the way that the labs used to keep (I believe) an old alpha system to keep
    the code "honest" (64bit and endian clean), I print out my code from
    time to time to make sure its readable, to keep it honest.

    perhaps its my age.

    -Steve


  9. Re: [9fans] Using the Acme Editor

    > 11. Bookmarks

    Typically handled by 'guide' files. I.e. a file, open in an acme window,
    full of B3-able search strings. E.g.:

    foo.c:/^main

    Also useful with B2-able command strings:

    grep -n 'where_is_this_function_called_from\(' *.c
    slay program | rc

    --lyndon

    Don't force it, use a bigger hammer.


  10. Re: [9fans] Using the Acme Editor

    On Tue, Aug 19, 2008 at 5:22 PM, Pietro Gagliardi wrote:
    > 7. sed 's/ / /g' file > file2 && mv file2 file


    rest in peace file2.

    iru


  11. Re: [9fans] Using the Acme Editor

    On Tue, Aug 19, 2008 at 2:24 PM, Iruata Souza wrote:

    > On Tue, Aug 19, 2008 at 5:22 PM, Pietro Gagliardi
    > wrote:
    > > 7. sed 's/ / /g' file > file2 && mv file2 file

    >
    > rest in peace file2.
    >
    > iru
    >


    We barely knew you?


  12. Re: [9fans] Using the Acme Editor

    Just a few other bits of relevance to the original topic:

    On Aug 19, 2008, at 11:52 AM, Wendell xe wrote:
    > 07. Automatic insertion of spaces for tabs


    style(6) says not to convert tabs to spaces.

    > 11. Bookmarks

    If you know what text the bookmark will point to, make a comment on
    the line above it:
    /* C comment */
    .\" troff comment
    # rc/awk comment
    Set the comment to the text of the bookmark. Then, search for the text
    of the bookmark with the appropriate comment delimiters. Easy enough.

    > 16. HTML tag matching

    An awk program can do this. The idea is to interpret tags as they come
    in the form of a stack:
    code stack
    html
    head
    html
    title<br /> head<br /> html<br /> </b> title error: closing wrong tag<br /> You can also check to see if tags make sense or bad tags are nested.<br /> For example, don't see <body><body></body></body> as normal, nor<br /> <title><b></b>.



  13. Re: [9fans] Using the Acme Editor

    We've seen that, and go to band practice. Tell us all about. Just
    keep up the therapy and the medication.

    brucee

    On Wed, Aug 20, 2008 at 1:54 PM, Pietro Gagliardi wrote:
    > Just a few other bits of relevance to the original topic:
    >
    > On Aug 19, 2008, at 11:52 AM, Wendell xe wrote:
    >>
    >> 07. Automatic insertion of spaces for tabs

    >
    > style(6) says not to convert tabs to spaces.
    >
    >> 11. Bookmarks

    >
    > If you know what text the bookmark will point to, make a comment on the line
    > above it:
    > /* C comment */
    > .\" troff comment
    > # rc/awk comment
    > Set the comment to the text of the bookmark. Then, search for the text of
    > the bookmark with the appropriate comment delimiters. Easy enough.
    >
    >> 16. HTML tag matching

    >
    > An awk program can do this. The idea is to interpret tags as they come in
    > the form of a stack:
    > code stack
    > html
    > head
    > html
    > title<br /> > head<br /> > html<br /> > </b> title error: closing wrong tag<br /> > You can also check to see if tags make sense or bad tags are nested. For<br /> > example, don't see <body><body></body></body> as normal, nor<br /> > <title><b></b>.
    >
    >
    >



  14. Re: [9fans] Using the Acme Editor

    > style(6) says not to convert tabs to spaces.

    I see. People on Plan 9 are "told" which characters they "should" or
    "shouldn't" use in their text. Great!

    > An awk program can do this. The idea is to interpret tags as they come in
    > the form of a stack:
    > code stack
    > html
    > head
    > html
    > title<br /> > head<br /> > html<br /> > </b> title error: closing wrong tag<br /> > You can also check to see if tags make sense or bad tags are nested. For<br /> > example, don't see <body><body></body></body> as normal, nor<br /> > <title><b></b>.


    That stack has been implemented in vim. There're nearly 500 different
    syntax matching and highlighting schemes for vim, and there's a simple
    language for writing your own schemes. Why not use vi?

    --On Tuesday, August 19, 2008 11:54 PM -0400 Pietro Gagliardi
    wrote:

    > Just a few other bits of relevance to the original topic:
    >
    > On Aug 19, 2008, at 11:52 AM, Wendell xe wrote:
    >> 07. Automatic insertion of spaces for tabs

    >
    > style(6) says not to convert tabs to spaces.
    >
    >> 11. Bookmarks

    > If you know what text the bookmark will point to, make a comment on the
    > line above it:
    > /* C comment */
    > .\" troff comment
    > # rc/awk comment
    > Set the comment to the text of the bookmark. Then, search for the text of
    > the bookmark with the appropriate comment delimiters. Easy enough.
    >
    >> 16. HTML tag matching

    > An awk program can do this. The idea is to interpret tags as they come in
    > the form of a stack:
    > code stack
    > html
    > head
    > html
    > title<br /> > head<br /> > html<br /> > </b> title error: closing wrong tag<br /> > You can also check to see if tags make sense or bad tags are nested. For<br /> > example, don't see <body><body></body></body> as normal, nor<br /> > <title><b></b>.
    >
    >



  15. Re: [9fans] Using the Acme Editor


    >
    > That stack has been implemented in vim. There're nearly 500 different
    > syntax matching and highlighting schemes for vim, and there's a simple
    > language for writing your own schemes. Why not use vi?

    To paraphrase Tesla :

    If Mr. Edison thought a bit more, he wouldn't have to sweat so much.


  16. Re: [9fans] Using the Acme Editor

    2008/8/19 Russ Cox :

    >> 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.


    Hello,

    I just needed this and it does not work for me.
    The command really goes through occurences of 'old' and highlights
    them, but it doesn't scroll, so I can't see them... which is somewhat
    crucial for beeing able to confirm/reject the change.
    I also don't quite understand why that .+#0 is there... Actually my
    first attempt would be just 'Edit /old/c/new/', which seems to be
    doing the wanted, but doesn't scroll either (both in sam and acme).
    The command 'Edit /old/' by itself scrolls, though...
    So?

    Thanks
    Ruda


  17. Re: [9fans] Using the Acme Editor

    2008/10/22 Rudolf Sykora :
    > 2008/8/19 Russ Cox :
    >
    >>> 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.

    >
    > Hello,
    >
    > I just needed this and it does not work for me.
    > The command really goes through occurences of 'old' and highlights
    > them, but it doesn't scroll, so I can't see them... which is somewhat
    > crucial for beeing able to confirm/reject the change.
    > I also don't quite understand why that .+#0 is there... Actually my
    > first attempt would be just 'Edit /old/c/new/', which seems to be
    > doing the wanted, but doesn't scroll either (both in sam and acme).
    > The command 'Edit /old/' by itself scrolls, though...
    > So?
    >
    > Thanks
    > Ruda
    >


    Well, since noone helped me I started to play with it to find at least
    some solution. I found that when I write
    /old/c/new/ [ENTER]
    ..
    somewhere, highlight it (2 lines) and 2-1 click on Edit in the window
    with my file, then it works.
    Is there anything simpler?
    Ruda


  18. Re: [9fans] Using the Acme Editor

    > Well, since noone helped me I started to play with it to find at least
    > some solution. I found that when I write
    > /old/c/new/ [ENTER]
    > .
    > somewhere, highlight it (2 lines) and 2-1 click on Edit in the window
    > with my file, then it works.
    > Is there anything simpler?
    > Ruda
    >
    >


    You could also write Edit in front of it, i. e. :
    Edit /old/c/new/ [ENTER]
    ..
    Then highlight the 2 lines, including the Edit, and middle-click. I'm
    sorry I cannot be of more help, but probably there's a better way.

    Regards,


    --


    - yiyus || JGL .


  19. Re: [9fans] Using the Acme Editor

    >> Edit .+#0/old/c/new/

    > The command really goes through occurences of 'old' and highlights
    > them, but it doesn't scroll, so I can't see them... which is somewhat
    > crucial for beeing able to confirm/reject the change.
    > I also don't quite understand why that .+#0 is there...


    The .+#0 is there because if you Undo one of the changes,
    the text that is selected right now will be "old". Starting
    the search at .+#0 skips over that occurrence to go to
    the next one.

    It is true that the /old/c/new/ doesn't scroll, which is
    unfortunate. I haven't looked into why or whether it is
    reasonable to change.

    Russ


  20. Re: [9fans] Using the Acme Editor

    > The .+#0 is there because if you Undo one of the changes,
    > the text that is selected right now will be "old". Starting
    > the search at .+#0 skips over that occurrence to go to
    > the next one.
    > Russ


    the text that is selected right now will be "old" ... that's true BUT
    it doesn't matter. The search always starts BEHIND the current dot.
    Thus I think .+#0 is unnecessary. Try it. Otherwise see 'A tutorial
    for the sam command language' by R. Pike, page 3, almost at the top.

    Ruda


+ Reply to Thread