diff options
author | Brian Cully <bjc@kublai.com> | 2008-04-02 19:20:20 -0400 |
---|---|---|
committer | Brian Cully <bjc@kublai.com> | 2008-04-02 19:20:20 -0400 |
commit | ab10720260e2c184b319026da89f4dfd338500bb (patch) | |
tree | a692a27435da0296972e43b21b2f35762e720bfd /English.lproj/Moxie Help/pages | |
download | moxie-ab10720260e2c184b319026da89f4dfd338500bb.tar.gz moxie-ab10720260e2c184b319026da89f4dfd338500bb.zip |
Initial commit
Diffstat (limited to 'English.lproj/Moxie Help/pages')
48 files changed, 3311 insertions, 0 deletions
diff --git a/English.lproj/Moxie Help/pages/.svn/README.txt b/English.lproj/Moxie Help/pages/.svn/README.txt new file mode 100644 index 0000000..271a8ce --- /dev/null +++ b/English.lproj/Moxie Help/pages/.svn/README.txt @@ -0,0 +1,2 @@ +This is a Subversion working copy administrative directory. +Visit http://subversion.tigris.org/ for more information. diff --git a/English.lproj/Moxie Help/pages/.svn/empty-file b/English.lproj/Moxie Help/pages/.svn/empty-file new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/English.lproj/Moxie Help/pages/.svn/empty-file diff --git a/English.lproj/Moxie Help/pages/.svn/entries b/English.lproj/Moxie Help/pages/.svn/entries new file mode 100644 index 0000000..564dfc4 --- /dev/null +++ b/English.lproj/Moxie Help/pages/.svn/entries @@ -0,0 +1,112 @@ +<?xml version="1.0" encoding="utf-8"?> +<wc-entries + xmlns="svn:"> +<entry + committed-rev="20" + name="" + committed-date="2005-12-27T15:21:23.068810Z" + url="svn+ssh://coleridge/svn/Moxie/trunk/English.lproj/Moxie%20Help/pages" + last-author="bjc" + kind="dir" + uuid="2641c99b-6c07-0410-920d-927397d2d5d0" + revision="47"/> +<entry + committed-rev="20" + name="lisp-functions.html" + text-time="2005-12-23T23:28:43.000000Z" + committed-date="2005-12-27T15:21:23.068810Z" + checksum="a485095a82d3c831b544e09263f0e4bf" + last-author="bjc" + kind="file" + prop-time="2005-12-27T01:33:58.000000Z"/> +<entry + committed-rev="20" + name="function-template.html" + text-time="2005-12-23T23:28:43.000000Z" + committed-date="2005-12-27T15:21:23.068810Z" + checksum="9eabe834fd9ad991f07290d4724b3142" + last-author="bjc" + kind="file" + prop-time="2005-12-27T01:33:57.000000Z"/> +<entry + committed-rev="20" + name="plugin.html" + text-time="2005-12-23T23:28:43.000000Z" + committed-date="2005-12-27T15:21:23.068810Z" + checksum="688de8c0ce9d8eaa504fb5cc8b61cb50" + last-author="bjc" + kind="file" + prop-time="2005-12-27T01:33:59.000000Z"/> +<entry + committed-rev="20" + name="navigation.html" + text-time="2005-12-23T23:28:43.000000Z" + committed-date="2005-12-27T15:21:23.068810Z" + checksum="4f4a317129a3ffd61e77f96e9492de72" + last-author="bjc" + kind="file" + prop-time="2005-12-27T01:33:58.000000Z"/> +<entry + committed-rev="20" + name="bugs.html" + text-time="2005-12-23T23:28:43.000000Z" + committed-date="2005-12-27T15:21:23.068810Z" + checksum="d19c3585914c47587f83a4b6f4021401" + last-author="bjc" + kind="file" + prop-time="2005-12-27T01:33:57.000000Z"/> +<entry + committed-rev="20" + name="whatsnew.html" + text-time="2005-12-23T23:28:43.000000Z" + committed-date="2005-12-27T15:21:23.068810Z" + checksum="96e631076fccdba18a44a07552e08bbe" + last-author="bjc" + kind="file" + prop-time="2005-12-27T01:33:59.000000Z"/> +<entry + committed-rev="20" + name="glossary.html" + text-time="2005-12-23T23:28:43.000000Z" + committed-date="2005-12-27T15:21:23.068810Z" + checksum="acc70845ae51c8e3184bbde79cf33e93" + last-author="bjc" + kind="file" + prop-time="2005-12-27T01:33:58.000000Z"/> +<entry + committed-rev="20" + name="todo.html" + text-time="2005-12-23T23:28:44.000000Z" + committed-date="2005-12-27T15:21:23.068810Z" + checksum="916a1c9889586af828188b6cc51de553" + last-author="bjc" + kind="file" + prop-time="2005-12-27T01:33:59.000000Z"/> +<entry + committed-rev="20" + name="overview.html" + text-time="2005-12-23T23:28:44.000000Z" + committed-date="2005-12-27T15:21:23.068810Z" + checksum="8ff95b2bf74010bfd59bd13830a60799" + last-author="bjc" + kind="file" + prop-time="2005-12-27T01:33:59.000000Z"/> +<entry + committed-rev="20" + name="faq.html" + text-time="2005-12-23T23:28:44.000000Z" + committed-date="2005-12-27T15:21:23.068810Z" + checksum="27624749cefddd3be4ebf30ef4e2697a" + last-author="bjc" + kind="file" + prop-time="2005-12-27T01:33:57.000000Z"/> +<entry + committed-rev="20" + name="lisp-glossary.html" + text-time="2005-12-23T23:28:44.000000Z" + committed-date="2005-12-27T15:21:23.068810Z" + checksum="255c92563ea1a439ffdf37bc48987d17" + last-author="bjc" + kind="file" + prop-time="2005-12-27T01:33:58.000000Z"/> +</wc-entries> diff --git a/English.lproj/Moxie Help/pages/.svn/format b/English.lproj/Moxie Help/pages/.svn/format new file mode 100644 index 0000000..b8626c4 --- /dev/null +++ b/English.lproj/Moxie Help/pages/.svn/format @@ -0,0 +1 @@ +4 diff --git a/English.lproj/Moxie Help/pages/.svn/prop-base/bugs.html.svn-base b/English.lproj/Moxie Help/pages/.svn/prop-base/bugs.html.svn-base new file mode 100644 index 0000000..92c8ad7 --- /dev/null +++ b/English.lproj/Moxie Help/pages/.svn/prop-base/bugs.html.svn-base @@ -0,0 +1,5 @@ +K 12 +svn:keywords +V 2 +Id +END diff --git a/English.lproj/Moxie Help/pages/.svn/prop-base/faq.html.svn-base b/English.lproj/Moxie Help/pages/.svn/prop-base/faq.html.svn-base new file mode 100644 index 0000000..92c8ad7 --- /dev/null +++ b/English.lproj/Moxie Help/pages/.svn/prop-base/faq.html.svn-base @@ -0,0 +1,5 @@ +K 12 +svn:keywords +V 2 +Id +END diff --git a/English.lproj/Moxie Help/pages/.svn/prop-base/function-template.html.svn-base b/English.lproj/Moxie Help/pages/.svn/prop-base/function-template.html.svn-base new file mode 100644 index 0000000..92c8ad7 --- /dev/null +++ b/English.lproj/Moxie Help/pages/.svn/prop-base/function-template.html.svn-base @@ -0,0 +1,5 @@ +K 12 +svn:keywords +V 2 +Id +END diff --git a/English.lproj/Moxie Help/pages/.svn/prop-base/glossary.html.svn-base b/English.lproj/Moxie Help/pages/.svn/prop-base/glossary.html.svn-base new file mode 100644 index 0000000..92c8ad7 --- /dev/null +++ b/English.lproj/Moxie Help/pages/.svn/prop-base/glossary.html.svn-base @@ -0,0 +1,5 @@ +K 12 +svn:keywords +V 2 +Id +END diff --git a/English.lproj/Moxie Help/pages/.svn/prop-base/lisp-functions.html.svn-base b/English.lproj/Moxie Help/pages/.svn/prop-base/lisp-functions.html.svn-base new file mode 100644 index 0000000..92c8ad7 --- /dev/null +++ b/English.lproj/Moxie Help/pages/.svn/prop-base/lisp-functions.html.svn-base @@ -0,0 +1,5 @@ +K 12 +svn:keywords +V 2 +Id +END diff --git a/English.lproj/Moxie Help/pages/.svn/prop-base/lisp-glossary.html.svn-base b/English.lproj/Moxie Help/pages/.svn/prop-base/lisp-glossary.html.svn-base new file mode 100644 index 0000000..92c8ad7 --- /dev/null +++ b/English.lproj/Moxie Help/pages/.svn/prop-base/lisp-glossary.html.svn-base @@ -0,0 +1,5 @@ +K 12 +svn:keywords +V 2 +Id +END diff --git a/English.lproj/Moxie Help/pages/.svn/prop-base/navigation.html.svn-base b/English.lproj/Moxie Help/pages/.svn/prop-base/navigation.html.svn-base new file mode 100644 index 0000000..92c8ad7 --- /dev/null +++ b/English.lproj/Moxie Help/pages/.svn/prop-base/navigation.html.svn-base @@ -0,0 +1,5 @@ +K 12 +svn:keywords +V 2 +Id +END diff --git a/English.lproj/Moxie Help/pages/.svn/prop-base/overview.html.svn-base b/English.lproj/Moxie Help/pages/.svn/prop-base/overview.html.svn-base new file mode 100644 index 0000000..92c8ad7 --- /dev/null +++ b/English.lproj/Moxie Help/pages/.svn/prop-base/overview.html.svn-base @@ -0,0 +1,5 @@ +K 12 +svn:keywords +V 2 +Id +END diff --git a/English.lproj/Moxie Help/pages/.svn/prop-base/plugin.html.svn-base b/English.lproj/Moxie Help/pages/.svn/prop-base/plugin.html.svn-base new file mode 100644 index 0000000..92c8ad7 --- /dev/null +++ b/English.lproj/Moxie Help/pages/.svn/prop-base/plugin.html.svn-base @@ -0,0 +1,5 @@ +K 12 +svn:keywords +V 2 +Id +END diff --git a/English.lproj/Moxie Help/pages/.svn/prop-base/todo.html.svn-base b/English.lproj/Moxie Help/pages/.svn/prop-base/todo.html.svn-base new file mode 100644 index 0000000..92c8ad7 --- /dev/null +++ b/English.lproj/Moxie Help/pages/.svn/prop-base/todo.html.svn-base @@ -0,0 +1,5 @@ +K 12 +svn:keywords +V 2 +Id +END diff --git a/English.lproj/Moxie Help/pages/.svn/prop-base/whatsnew.html.svn-base b/English.lproj/Moxie Help/pages/.svn/prop-base/whatsnew.html.svn-base new file mode 100644 index 0000000..92c8ad7 --- /dev/null +++ b/English.lproj/Moxie Help/pages/.svn/prop-base/whatsnew.html.svn-base @@ -0,0 +1,5 @@ +K 12 +svn:keywords +V 2 +Id +END diff --git a/English.lproj/Moxie Help/pages/.svn/props/bugs.html.svn-work b/English.lproj/Moxie Help/pages/.svn/props/bugs.html.svn-work new file mode 100644 index 0000000..92c8ad7 --- /dev/null +++ b/English.lproj/Moxie Help/pages/.svn/props/bugs.html.svn-work @@ -0,0 +1,5 @@ +K 12 +svn:keywords +V 2 +Id +END diff --git a/English.lproj/Moxie Help/pages/.svn/props/faq.html.svn-work b/English.lproj/Moxie Help/pages/.svn/props/faq.html.svn-work new file mode 100644 index 0000000..92c8ad7 --- /dev/null +++ b/English.lproj/Moxie Help/pages/.svn/props/faq.html.svn-work @@ -0,0 +1,5 @@ +K 12 +svn:keywords +V 2 +Id +END diff --git a/English.lproj/Moxie Help/pages/.svn/props/function-template.html.svn-work b/English.lproj/Moxie Help/pages/.svn/props/function-template.html.svn-work new file mode 100644 index 0000000..92c8ad7 --- /dev/null +++ b/English.lproj/Moxie Help/pages/.svn/props/function-template.html.svn-work @@ -0,0 +1,5 @@ +K 12 +svn:keywords +V 2 +Id +END diff --git a/English.lproj/Moxie Help/pages/.svn/props/glossary.html.svn-work b/English.lproj/Moxie Help/pages/.svn/props/glossary.html.svn-work new file mode 100644 index 0000000..92c8ad7 --- /dev/null +++ b/English.lproj/Moxie Help/pages/.svn/props/glossary.html.svn-work @@ -0,0 +1,5 @@ +K 12 +svn:keywords +V 2 +Id +END diff --git a/English.lproj/Moxie Help/pages/.svn/props/lisp-functions.html.svn-work b/English.lproj/Moxie Help/pages/.svn/props/lisp-functions.html.svn-work new file mode 100644 index 0000000..92c8ad7 --- /dev/null +++ b/English.lproj/Moxie Help/pages/.svn/props/lisp-functions.html.svn-work @@ -0,0 +1,5 @@ +K 12 +svn:keywords +V 2 +Id +END diff --git a/English.lproj/Moxie Help/pages/.svn/props/lisp-glossary.html.svn-work b/English.lproj/Moxie Help/pages/.svn/props/lisp-glossary.html.svn-work new file mode 100644 index 0000000..92c8ad7 --- /dev/null +++ b/English.lproj/Moxie Help/pages/.svn/props/lisp-glossary.html.svn-work @@ -0,0 +1,5 @@ +K 12 +svn:keywords +V 2 +Id +END diff --git a/English.lproj/Moxie Help/pages/.svn/props/navigation.html.svn-work b/English.lproj/Moxie Help/pages/.svn/props/navigation.html.svn-work new file mode 100644 index 0000000..92c8ad7 --- /dev/null +++ b/English.lproj/Moxie Help/pages/.svn/props/navigation.html.svn-work @@ -0,0 +1,5 @@ +K 12 +svn:keywords +V 2 +Id +END diff --git a/English.lproj/Moxie Help/pages/.svn/props/overview.html.svn-work b/English.lproj/Moxie Help/pages/.svn/props/overview.html.svn-work new file mode 100644 index 0000000..92c8ad7 --- /dev/null +++ b/English.lproj/Moxie Help/pages/.svn/props/overview.html.svn-work @@ -0,0 +1,5 @@ +K 12 +svn:keywords +V 2 +Id +END diff --git a/English.lproj/Moxie Help/pages/.svn/props/plugin.html.svn-work b/English.lproj/Moxie Help/pages/.svn/props/plugin.html.svn-work new file mode 100644 index 0000000..92c8ad7 --- /dev/null +++ b/English.lproj/Moxie Help/pages/.svn/props/plugin.html.svn-work @@ -0,0 +1,5 @@ +K 12 +svn:keywords +V 2 +Id +END diff --git a/English.lproj/Moxie Help/pages/.svn/props/todo.html.svn-work b/English.lproj/Moxie Help/pages/.svn/props/todo.html.svn-work new file mode 100644 index 0000000..92c8ad7 --- /dev/null +++ b/English.lproj/Moxie Help/pages/.svn/props/todo.html.svn-work @@ -0,0 +1,5 @@ +K 12 +svn:keywords +V 2 +Id +END diff --git a/English.lproj/Moxie Help/pages/.svn/props/whatsnew.html.svn-work b/English.lproj/Moxie Help/pages/.svn/props/whatsnew.html.svn-work new file mode 100644 index 0000000..92c8ad7 --- /dev/null +++ b/English.lproj/Moxie Help/pages/.svn/props/whatsnew.html.svn-work @@ -0,0 +1,5 @@ +K 12 +svn:keywords +V 2 +Id +END diff --git a/English.lproj/Moxie Help/pages/.svn/text-base/bugs.html.svn-base b/English.lproj/Moxie Help/pages/.svn/text-base/bugs.html.svn-base new file mode 100644 index 0000000..b2a5fd5 --- /dev/null +++ b/English.lproj/Moxie Help/pages/.svn/text-base/bugs.html.svn-base @@ -0,0 +1,20 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" + "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> +<html lang="en"> + <head> + <title>Known Bugs</title> + <meta name="generator" content="Emacs!"> + </head> + + <body> + <h1>Known Bugs</h1> + <ul> + <li>The world selector will not raise the window you select if it's already the frontmost + Moxie window, even if Moxie is in the background (it comes next-to-top, for reasons I don't + at all understand).</li> + <li>Fonts get screwed up fairly frequently, especially when trying to set them via the font panel.</li> + <li>The "Choose" button for choosing the REPL font doesn't work at all.</li> + <li>Reading from standard-input in Lisp will hang Moxie.</li> + </ul> + </body> +</html> diff --git a/English.lproj/Moxie Help/pages/.svn/text-base/faq.html.svn-base b/English.lproj/Moxie Help/pages/.svn/text-base/faq.html.svn-base new file mode 100644 index 0000000..a80cde3 --- /dev/null +++ b/English.lproj/Moxie Help/pages/.svn/text-base/faq.html.svn-base @@ -0,0 +1,81 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" + "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> +<html lang="en"> + <head> + <title>Frequently Asked Questions</title> + <meta name="generator" content="Emacs!"> + </head> + + <body> + <h1>Frequently Asked Questions</h1> + + <dt><strong>How do I write a trigger, alias, or macro?</strong></dt> + <dd> + <p>First of all, Moxie makes no distinction between triggers, aliases, and macros. We + treat all of these things in the same way: as a <a href="plugin.html">plugin</a>.</p> + + <p>All plugins are written in Common Lisp, so you'll have to have some grounding in + Lisp to do anything serious at the moment (although I have some ideas for simpler + interfaces for the non-programming-minded in the future). There are a few support + routines included in the MOXIE <a href="lisp-glossary.html#package">package</a> to + simplify common plugin tasks, such as triggers and aliases.</p> + </dd> + + <dt><strong>LISP?! Why would you do that?</strong></dt> + <dd> + <p>Because I didn't want to have to write my own language for triggers, aliases, and + macros. No matter how much I worked on it, I wasn't going to get the kind of + programmability I wanted without embedding a full programming language. + I also think it's something of a waste of time to learn a new language just for the + purpose of programming a trigger in your MUX client. + </p> + <p>I could have just used AppleScript as the language of choice, and came very + close to doing so a number of times, but I had too much trouble trying to get + AS and ObjC talking as well as I'd liked, and, frankly, I don't consider it to + be full-featured enough.</p> + <p>So I chose to embed a language. There are, theoretically, a fair number + of popular languages I could have embedded, however, I chose Lisp for the + following reasons: + <ul> + <li>Real-time development. I feel that, in the scope of Moxie, having a fully + interactive development style is extremely useful. As far as I know, this + excludes PERL as a possibility.</li> + <li>Lisp has been ratified by ANSI, and is one of the few languages to do so. It + has a very large "library" that is standard from one lisp implementation to the + next, so as long as you've found code that's "Common Lisp" you've found code that + will work with Moxie.</li> + <li>Lisp is the second-oldest language still in use, after FORTRAN. While not + the largest consideration, it does guarantee that there's a fair amount of code + available for free in the world. Emacs, for example, has a huge amount of contributed + Emacs-Lisp code (which, while not common-lisp, is often easily ported).</li> + <li>And finally, because I can. I like Lisp, and I'm writing Moxie, so I get to pick. + "Give me real macros, or give me death!"</li> + </ul> + </p> + </dd> + + <dt><strong>Where can I find more information on Lisp programming?</strong></dt> + <dd> + <p>There are a number of web sites devoted to Lisp programming. Below, I'll list a few + resources that should get you pointed in the right direction: + <ul> + <li><a href="lisp-glossary.html#cliki">CLiki's</a> + <a href="http://www.cliki.net/Online%20Tutorial" target="new">Online Tutorial</a> page + can get you started if you're completely new.</li> + <li><a href="http://www.paulgraham.com" target="new">Paul Graham</a> has a lot of + information on Lisp, including a free book for the more serious programmers.</li> + </ul> + </p> + </dd> + + <dt><strong>What is the REPL?</strong></dt> + <dd> + <p>The <a href="lisp-glossary.html#repl">REPL</a> is your direct + interface to the Lisp sub-system. It is the key to fully interactive programming. Via + the REPL you can input Lisp commands directly and see the results - any Lisp will work + here, including function definitions. This allows you to write a function, test it, and + debug it, all without leaving the REPL, and with a much finer grain of control than with + a compile cycle.</p> + </dd> + </body> +</html> diff --git a/English.lproj/Moxie Help/pages/.svn/text-base/function-template.html.svn-base b/English.lproj/Moxie Help/pages/.svn/text-base/function-template.html.svn-base new file mode 100644 index 0000000..da624de --- /dev/null +++ b/English.lproj/Moxie Help/pages/.svn/text-base/function-template.html.svn-base @@ -0,0 +1,30 @@ + <hr> + <p><a id="NAME"><i>Function</i> <b>NAME</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>NAME</b> <i>ARG</i> => <i>RETURN-VALUE</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>ARG</i>---A <i>TYPE</i>.</p> + <p><i>RETURN-VALUE</i>---An <i>TYPE</i>.</p> + </p> + + <p><b>Description:</b> None.</p> + + <p><b>Examples:</b></p> + <p><pre>CODE</pre></p> + + <p><b>Side Effects:</b> None.</p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#function">FUNCTION</a></b> + </p> + + <p><b>Notes:</b> None</p> diff --git a/English.lproj/Moxie Help/pages/.svn/text-base/glossary.html.svn-base b/English.lproj/Moxie Help/pages/.svn/text-base/glossary.html.svn-base new file mode 100644 index 0000000..3606388 --- /dev/null +++ b/English.lproj/Moxie Help/pages/.svn/text-base/glossary.html.svn-base @@ -0,0 +1,27 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" + "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> +<html lang="en"> + <head> + <title> + Glossary + </title> + <meta name="generator" content="Emacs!"> + </head> + + <body> + <h1> + Glossary + </h1> + <ul> + <li> + <dt> <a id="mux">MUX</a> </dt> + <dd> A generic term meaning any of the variety of multi-user environments: + MUSH, MUD, MOO, etc.,.</dd> + </li> + <li> + <dt><a id="world">World</a></dt> + <dd>The file containing the preferences for a particular connection.</dd> + </li> + </ul> + </body> +</html> diff --git a/English.lproj/Moxie Help/pages/.svn/text-base/lisp-functions.html.svn-base b/English.lproj/Moxie Help/pages/.svn/text-base/lisp-functions.html.svn-base new file mode 100644 index 0000000..a6091c7 --- /dev/null +++ b/English.lproj/Moxie Help/pages/.svn/text-base/lisp-functions.html.svn-base @@ -0,0 +1,947 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" + "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> + + +<html lang="en"> + <head> + <title>Lisp Functions</title> + <meta name="generator" content="Emacs!"> + </head> + + <body> + <h1>Moxie plugin functions</h1> + <p>These functions are all exported from the <code>MOXIE</code> + <a href="lisp-glossary.html#package">package</a>. + </p> + <p> + Contents: + <ul> + <li><a href="#world-var">world-var</a></li> + <li><a href="#add-hook">add-hook</a></li> + <li><a href="#remove-hook">remove-hook</a></li> + <li><a href="#run-hook">run-hook</a></li> + <li><a href="#add-keyword">add-keyword</a></li> + <li><a href="#remove-keyword">remove-keyword</a></li> + <li><a href="#add-keystroke-macro">add-keystroke-macro</a></li> + <li><a href="#remove-keystroke-macro">remove-keystroke-macro</a></li> + <li><a href="#send-to-mux">send-to-mux</a></li> + <li><a href="#print-to-world">print-to-world</a></li> + <li><a href="#set-status-buffer">set-status-buffer</a></li> + <li><a href="#enable-logging">enable-logging</a></li> + <li><a href="#disable-logging">disable-logging</a></li> + <li><a href="#make-attributed-string">make-attributed-string</a></li> +<!-- + We're going to lose these functions, in preference to a key/value + system. + + <li><a href="#make-range">make-range</a></li> + <li><a href="#make-font">make-font</a></li> + <li><a href="#make-color">make-color</a></li> + <li><a href="#make-super">make-super</a></li> + <li><a href="#make-underline">make-underline</a></li> + <li><a href="#make-link">make-link</a></li> --> + + <li><a href="#escape-mux-string">escape-mux-string</a></li> + <li><a href="#map-variables">map-variables</a></li> + </ul> + </p> + + <hr> + <p><a id="world-var"><i>Function</i> <b>WORLD-VAR</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>world-var</b> <i>name</i> <code>&optional</code> (<i>world-id</i> <i>*world*</i>) => <i>result</i> + </p> + <p> + (setf (<b>world-var</b> <i>name</i> <code>&optional</code> (<i>world-id</i> *world*)) <i>new-value</i>) + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>name</i>---an <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_o.htm#object">object</a></i>.</p> + <p><i>world-id</i>---an <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_o.htm#object">object</a></i>.</p> + <p><i>result</i>---an <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_o.htm#object">object</a></i>.</p> + </p> + + <p><b>Description:</b></p> + <p> + <b>world-var</b> is used to associate <a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_v.htm#value">values</a></i>, which are persistent throughout the application's lifetime, with <i>name</i> for a particular Moxie world, which has the unique identifier, <i>world-id</i>. + </p> + <p> + <b><a href="http://www.lispworks.com/reference/HyperSpec/Body/m_setf_.htm#setf">setf</a></b> may be used with <b><a href="#world-var">world-var</a></b> to modify the <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_v.htm#value">values</a></i> associated with a given <i>name</i>, or to add a new entry. + </p> + + <p><b>Examples:</b></p> + <p><pre> (setf (world-var :foo 0) 'bar) => BAR + (world-var :foo 0) => BAR + (world-var :foo 1) => NIL + (setf (world-var :foo 1) 'YOW) => YOW + (world-var :foo 1) => YOW + (world-var :foo 0) => BAR</pre></p> + + <p><b>Side Effects:</b> None.</p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>Notes:</b></p> + <p> + <i>world-id</i> is available as the <code>*world*</code> special variable. + </p> + + <hr> + <p><a id="add-hook"><i>Function</i> <b>ADD-HOOK</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>add-hook</b> <i>function</i> <i>mode</i> => <i>hook-list</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>function</i>--a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_f.htm#function_designator">function designator</a></i>. + <p><i>mode</i>---A <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_k.htm#keyword">keyword</a></i>.</p> + <p><i>hook-list</i>---A <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_l.htm#list">list</a></i> containing the active <i>functions</i> for <i>mode</i>.</p> + </p> + + <p><b>Description:</b></p> + <p><b>add-hook</b> adds <i>function</i> to the list of functions to be run when + the hook <i>mode</i> is executed via <b>run-hook</b>.</p> + + <p><b>Examples:</b></p> + <p><pre> + (defun my-printer (string) + (let ((string (if (stringp string) string (car string)))) + (concatenate 'string "TEST: " string))) => MY-PRINTER + (add-hook 'my-printer :output-from-server-hook) => (MY-PRINTER) + (run-hook :output-from-server-hook "foo") => "TEST: foo" + (defun 'do-nothing (&rest args) nil) => DO-NOTHING + (add-hook 'do-nothing :output-from-server-hook) => (MY-PRINTER DO-NOTHING) + (run-hook :output-from-server-hook "foo") => "TEST: foo"</pre> + </p> + + <p><b>Side Effects:</b></p> + <p><i>function</i> will be run by <b>run-hook</b> for <i>mode</i>.</p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#remove-hook">remove-hook</a></b> + <b><a href="#run-hook">run-hook</a></b> + </p> + + <p><b>Notes:</b> + <p>If <i>function</i> is already on the hook list for <i>mode</i>, it will + not be added again.</p> + + <hr> + <p><a id="remove-hook"><i>Function</i> <b>REMOVE-HOOK</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>remove-hook</b> <i>function</i> <i>mode</i> => <i>hook-list</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>function</i>--a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_f.htm#function_designator">function designator</a></i>. + <p><i>mode</i>---A <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_k.htm#keyword">keyword</a></i>.</p> + <p><i>hook-list</i>---A <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_l.htm#list">list</a></i> containing the active <i>functions</i> for <i>mode</i>.</p> + </p> + + <p><b>Description:</b> None.</p> + + <p><b>Examples:</b></p> + <p><pre> + (remove-hook 'my-printer :output-from-server-hook) => NIL</pre></p> + + <p><b>Side Effects:</b></p> + <p><i>function</i> is no longer called by <code>run-hook</code>.</p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#add-hook">add-hook</a></b> + <b><a href="#run-hook">run-hook</a></b> + </p> + + <p><b>Notes:</b></p> + <p> + If <i>function</i> is not on the hook list for <i>mode</i>, the hook list is + returned without change. You can use this facility to get the current list + of <i>functions</i> for <i>mode</i> by removing <a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_n.htm#nil">NIL</a> from the hook list. + </p> + + <hr> + <p><a id="run-hook"><i>Function</i> <b>RUN-HOOK</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>run-hook</b> <i>mode</i> <code><i>&optional</i></code> <i>arg</i> + => <i>result*</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>mode</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_k.htm#keyword">keyword</a></i>.</p> + <p><i>arg</i>---an <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_o.htm#object">object</a></i>.</p> + <p><i>results</i>---the <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_v.htm#value">values</a></i> returned by the last non-NIL terminating function.</p> + </p> + + <p><b>Description:</b></p> + <p> + <a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_a.htm#apply">Applies</a> the + <i>functions</i> for <i>mode</i> to the <i>args</i>. + </p> + <p> + A hook-list acts as a filter, passing the output of one filter into the input of + the next. If a function on the hook-list returns <b>NIL</b>, it is treated in this iteration + as if it hadn't been on the hook-list in the first place. Thus, the only time + <b>run-hook</b> returns <b>NIL</b> is when every function on the hook-list returns + <b>NIL</b>. + </p> + + <p><b>Examples:</b></p> + <p><pre> + (run-hook :output-from-server-hook "Foobar!") => "TEST: Foobar!"</pre></p> + + <p><b>Side Effects:</b> None.</p> + + <p><b>Affected By:</b></p> + <p> + The hook list for <i>mode</i>. All the functions on the list are called, in + order. The last function which returns a non-nil value is used as the result + function. + </p> + + <p><b>Exceptional Situations:</b></p> + <p> + If a <i>function</i> on the hook list for <i>mode</i> is not a function + designator, an error will be raised. + </p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#add-hook">add-hook</a></b> + <b><a href="#remove-hook">remove-hook</a></b> + </p> + + <p><b>Notes:</b> None.</p> + + <hr> + <p><a id="add-keyword"><i>Function</i> <b>ADD-KEYWORD</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>add-keyword</b> <i>function</i> <i>keyword</i> => <i>result</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>function</i>--a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_f.htm#function_designator">function designator</a></i>. + <p><i>keyword</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_s.htm#string">string</a></i>.</p> + <p><i>result</i>---the <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_f.htm#function_designator">function designator</a></i> for <i>keyword</i>.</p> + </p> + + <p><b>Description:</b> None.</p> + + <p><b>Examples:</b></p> + <p><pre> (defun my-keyword (args) + (format t "Keyword expander: ~S~%" args)) => MY-KEYWORD + (add-keyword 'my-keyword "foo") => MY-KEYWORD</pre></p> + + <p><b>Side Effects:</b></p> + <p> + <i>keyword</i> is registered for keyword expansion. + </p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#remove-keyword">remove-keyword</a></b> + </p> + + <p><b>Notes:</b></p> + <p> + The keyword expander compares keywords in a case insensitive fashion. So "FOO" and + "foo" are equivalent. + </p> + + <hr> + <p><a id="remove-keyword"><i>Function</i> <b>REMOVE-KEYWORD</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>remove-keyword</b> <i>keyword</i> => <i>result</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>keyword</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_s.htm#string">string</a></i>.</p> + <p><i>result</i>---the <a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_t.htm#t">T</a> on successful removal. <a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_n.htm#nil">NIL</a> otherwise. + </p> + + <p><b>Description:</b> None.</p> + + <p><b>Examples:</b></p> + <p><pre> (remove-keyword "foo") => T + (remove-keyword "foo") => NIL</pre></p> + + <p><b>Side Effects:</b></p> + <p> + <i>keyword</i> is no longer expanded by the keyword expander. + </p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#add-keyword">add-keyword</a></b> + </p> + + <p><b>Notes:</b></p> + <p> + The keyword expander compares keywords in a case insensitive fashion. So "FOO" and + "foo" are equivalent. + </p> + + <hr> + <p><a id="add-keystroke-macro"><i>Function</i> <b>ADD-KEYSTROKE-MACRO</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>add-keystroke-macro</b> <i>function</i> <i>keystroke</i> => <i>result</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>function</i>--a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_f.htm#function_designator">function designator</a></i>. + <p><i>keystroke</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_k.htm#keyword">keyword</a></i>.</p> + <p><i>result</i>---the <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_f.htm#function_designator">function designator</a></i> for <i>keyword</i>.</p> + </p> + + <p><b>Description:</b> None.</p> + + <p><b>Examples:</b></p> + <p><pre> (defun my-keystroke-macro (keystroke) + (format t "Should expand keystroke ~S here.~%" keystroke)) => MY-KEYSTROKE-MACRO + (add-keystroke-macro 'my-keystroke-macro :f1) => MY-KEYSTROKE-MACRO</pre></p> + + <p><b>Side Effects:</b></p> + <p> + <i>function</i> is called when <i>keystroke</i> is pressed. + </p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#remove-keystroke-macro">remove-keystroke-macro</a></b> + </p> + + <p><b>Notes:</b></p> + <p> + Unlike most other functions defined here, keystrokes don't do anything by default. + This means that in order to achieve some user-visible result, you'll have to use + the lower level functions <b>print-to-world</b>, or <b>send-to-mux</b>.. + </p> + <p><b>This format is likely to change very soon!</b></p> + <p> + Keystrokes, currently, are <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_k.htm#keyword">keywords</a></i> with the following format: + <pre> + keystroke := :[<modifier>-]*<keycode> + modifier := cmd|opt|ctrl|shift|numpad + keycode := <fkey>|character + fkey := f1 .. fn .. f35</pre> + So, hitting 8 on the number pad, while the command key is down yields the keyword: <code>:cmd-numpad-8</code> + </p> + + <hr> + <p><a id="remove-keystroke-macro"><i>Function</i> <b>REMOVE-KEYSTROKE-MACRO</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>remove-keystroke-macro</b> <i>keystroke</i> => <i>result</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>keystroke</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_k.htm#keyword">keyword</a></i>.</p> + <p><i>result</i>---<a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_t.htm#t">T</a>, if the keystroke was previously registered, <a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_t.htm#nil">NIL</a> otherwise.</p> + </p> + + <p><b>Description:</b> None.</p> + + <p><b>Examples:</b></p> + <p><pre> (remove-keystroke-macro :f1) => T + (remove-keystroke-macro :f1) => NIL</pre></p> + + <p><b>Side Effects:</b></p> + <p> + <i>keystroke</i> no longer triggers a function call. + </p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#add-keystroke-macro">add-keystroke-macro</a></b> + </p> + + <p><b>Notes:</b></p> + <p><b>This format is likely to change very soon!</b></p> + <p> + Keystrokes, currently, are <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_k.htm#keyword">keywords</a></i> with the following format: + <pre> + keystroke := :[<modifier>-]*<keycode> + modifier := cmd|opt|ctrl|shift|numpad + keycode := <fkey>|character + fkey := f1 .. fn .. f35</pre> + So, hitting 8 on the number pad, while the command key is down yields the keyword: <code>:cmd-numpad-8</code> + </p> + + <hr> + <p><a id="send-to-mux"><i>Function</i> <b>SEND-TO-MUX</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>send-to-mux</b> <i>world-id</i> <i>string</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>world-id</i>---an <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_o.htm#object">object</a></i>.</p> + <p><i>string</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_s.htm#string">string</a></i>.</p> + </p> + + <p><b>Description:</b></p> + <p> + This is the low-level function to send data to the MUX server associated with + <i>world-id</i>. Currently, you can only send a string command, which will be + interpreted by the MUX directly. This may change in the future to allow for + attributed strings. + </p> + + <p><b>Examples:</b></p> + <p><pre> (send-to-mux *world* (format nil "Wauug!~%"))</pre></p> + + <p><b>Side Effects:</b> None.</p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#print-to-world">print-to-world</a></b> + <b><a href="#set-status-buffer">set-status-buffer</a></b> + </p> + + <p><b>Notes:</b></p> + <p> + <i>world-id</i> is available as the <code>*world*</code> special variable. + </p> + + <hr> + <p><a id="print-to-world"><i>Function</i> <b>PRINT-TO-WORLD</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>print-to-world</b> <i>world-id</i> <i>arg</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>world-id</i>---an <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_o.htm#object">object</a></i>.</p> + <p><i>string</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_s.htm#string">string</a></i>.</p> + </p> + + <p><b>Description:</b></p> + <p> + This is the low-level function to send data to the Moxie's world output view + associated with <i>world-id</i>. You can send either a normal string or an + attributed string for printing. + </p> + + <p><b>Examples:</b></p> + <p><pre> (print-to-world *world* (format nil "Wauug!~%"))</pre></p> + + <p><b>Side Effects:</b> None.</p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#send-to-mux">send-to-mux</a></b> + <b><a href="#set-status-buffer">set-status-buffer</a></b> + <b><a href="#make-attributed-string">make-attributed-string</a></b> + </p> + + <p><b>Notes:</b></p> + <p> + <i>world-id</i> is available as the <code>*world*</code> special variable. + </p> + + <hr> + <p><a id="set-status-buffer"><i>Function</i> <b>SET-STATUS-BUFFER</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>set-status-buffer</b> <i>world-id</i> <i>string</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>world-id</i>---an <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_o.htm#object">object</a></i>.</p> + <p><i>string</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_s.htm#string">string</a></i>.</p> + </p> + + <p><b>Description:</b></p> + <p> + Sets the status buffer of the window associated with <i>world-id</i> to <i>string</i>. + </p> + + <p><b>Examples:</b></p> + <p><pre> (set-status-buffer *world* "Hello, world!")</pre></p> + + <p><b>Side Effects:</b> None.</p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#send-to-mux">send-to-mux</a></b> + <b><a href="#print-to-world">print-to-world</a></b> + </p> + + <p><b>Notes:</b></p> + <p> + <i>world-id</i> is available as the <code>*world*</code> special variable. + </p> + + <hr> + <p><a id="enable-logging"><i>Function</i> <b>ENABLE-LOGGING</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>enable-logging</b> <i>world-id</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>world-id</i>---an <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_o.htm#object">object</a></i>.</p> + </p> + + <p><b>Description:</b></p> + <p> + Enables logging for the world associated with <i>world-id</i>. + </p> + + <p><b>Examples:</b></p> + <p><pre> (enable-logging *world*)</pre></p> + + <p><b>Side Effects:</b> None.</p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#disable-logging">disable-logging</a></b> + </p> + + <p><b>Notes:</b></p> + <p> + <i>world-id</i> is available as the <code>*world*</code> special variable. + </p> + + <hr> + <p><a id="disable-logging"><i>Function</i> <b>DISABLE-LOGGING</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>disable-logging</b> <i>world-id</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>world-id</i>---an <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_o.htm#object">object</a></i>.</p> + </p> + + <p><b>Description:</b></p> + <p> + Disables logging for the world associated with <i>world-id</i>. + </p> + + <p><b>Examples:</b></p> + <p><pre> (disable-logging *world*)</pre></p> + + <p><b>Side Effects:</b> None.</p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#enable-logging">enable-logging</a></b> + </p> + + <p><b>Notes:</b></p> + <p> + <i>world-id</i> is available as the <code>*world*</code> special variable. + </p> + + <hr> + <p><a id="make-attributed-string"><i>Function</i> <b>MAKE-ATTRIBUTED-STRING</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>make-attributed-string</b> <i>string</i> <code>&rest</code> <i>attribute*</i> => <i>result</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>string</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_s.htm#string">string</a></i>.</p> + <p><i>attributes</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_l.htm#list">list</a></i>.</p> + <p><i>result</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_l.htm#list">list</a></i>.</p> + </p> + + <p><b>Description:</b></p> + <p> + Creates a string with attributes applied to it. This allows you to change various display properties of the string, such as the color, font, and style. + </p> + + <p><b>Examples:</b></p> + <p><pre> + (make-attributed-string "Wauug!" (make-range 0 (length "Wauug!")) + (make-color 100 100 100) + (make-underline 1)) => ("Wauug!" ((:RANGE 0 6) + (:COLOR 100 100 100) + (:UNDERLINE 1)))</pre></p> + + <p><b>Side Effects:</b> None.</p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#make-range">make-range</a></b> + <b><a href="#make-font">make-font</a></b> + <b><a href="#make-color">make-color</a></b> + <b><a href="#make-super">make-super</a></b> + <b><a href="#make-underline">make-underline</a></b> + <b><a href="#make-link">make-link</a></b> + </p> + + <p><b>Notes:</b></p> + <p> + The only hook, currently, which can use attributed strings is <code>:output-from-server-hook</code>, which calls on <code>print-to-world</code> to display results. Those are the only places within Moxie to which you should be sending attributed strings. + </p> + + <hr> + <p><a id="make-range"><i>Function</i> <b>MAKE-RANGE</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>make-range</b> <i>index</i> <i>length</i> => <i>result</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>index</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_b.htm#bounding_index_designator">bounding index designator</a></i>. + <p><i>length</i>---a non-negative <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_i.htm#integer">integer</a></i>. + <p><i>result</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_l.htm#list">list</a></i>.</p> + </p> + + <p><b>Description:</b></p> + <p> + Creates a <i>range</i> object from <i>index</i> for a <i>length</i>. + </p> + + <p><b>Examples:</b></p> + <p><pre> (make-range 0 (length "Wauug!")) => (:RANGE 0 6)</pre></p> + + <p><b>Side Effects:</b> None.</p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#make-attributed-string">make-attributed-string</a></b> + <b><a href="#make-font">make-font</a></b> + <b><a href="#make-color">make-color</a></b> + <b><a href="#make-super">make-super</a></b> + <b><a href="#make-underline">make-underline</a></b> + <b><a href="#make-link">make-link</a></b> + </p> + + <p><b>Notes:</b></p> + <p> + This function is likely to go away in the future as the attributed string mechansism gets cleaned up. + </p> + + <hr> + <p><a id="make-font"><i>Function</i> <b>MAKE-FONT</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>make-font</b> <i>name</i> <i>size</i> => <i>result</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>name</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_s.htm#string">string</a></i>.</p> + <p><i>size</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/t_real.htm#real">real</a></i>. + </p> + <p><i>result</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_l.htm#list">list</a></i>.</p> + </p> + + <p><b>Description:</b></p> + <p> + Creates a <i>font</i> object. The font is located by <i>name</i> and is <i>size</i> points high. + </p> + + <p><b>Examples:</b></p> + <p><pre> (make-font "apple-monaco" 12.0) => (:FONT "apple-monaco" 12.0)</pre></p> + + <p><b>Side Effects:</b> None.</p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#make-attributed-string">make-attributed-string</a></b> + <b><a href="#make-range">make-range</a></b> + <b><a href="#make-color">make-color</a></b> + <b><a href="#make-super">make-super</a></b> + <b><a href="#make-underline">make-underline</a></b> + <b><a href="#make-link">make-link</a></b> + </p> + + <hr> + <p><a id="make-color"><i>Function</i> <b>MAKE-COLOR</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>make-color</b> <i>red-value</i> <i>green-value</i> <i>blue-value</i> => <i>result</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>red-value</i>---an <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_i.htm#integer">integer</a></i> between 0 and 255. + <p><i>green-value</i>---an <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_i.htm#integer">integer</a></i> between 0 and 255. + <p><i>blue-value</i>---an <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_i.htm#integer">integer</a></i> between 0 and 255. + <p><i>result</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_l.htm#list">list</a></i>.</p> + </p> + + <p><b>Description:</b></p> + <p> + Creates a <i>color</i> object with the specified values for red, green, and blue. + </p> + + <p><b>Examples:</b></p> + <p><pre> (make-color 100 100 100) => (:COLOR 100 100 100)</pre></p> + + <p><b>Side Effects:</b> None.</p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#make-attributed-string">make-attributed-string</a></b> + <b><a href="#make-range">make-range</a></b> + <b><a href="#make-font">make-font</a></b> + <b><a href="#make-super">make-super</a></b> + <b><a href="#make-underline">make-underline</a></b> + <b><a href="#make-link">make-link</a></b> + </p> + + <hr> + <p><a id="make-super"><i>Function</i> <b>MAKE-SUPER</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>make-super</b> <i>level</i> => <i>result</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>level</i>---a non-negative <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_i.htm#integer">integer</a></i>. + <p><i>result</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_l.htm#list">list</a></i>.</p> + </p> + + <p><b>Description:</b></p> + <p> + Creates a <i>superscript</i> attribute at the specified <i>level</i>. At level 0, the text is inline with normally attributed text, at each level above 0, the text moves higher and becomes smaller, denoting a superscript. + </p> + + <p><b>Examples:</b></p> + <p><pre> (make-super 1) => (:SUPER 1)</pre></p> + + <p><b>Side Effects:</b> None.</p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#make-attributed-string">make-attributed-string</a></b> + <b><a href="#make-range">make-range</a></b> + <b><a href="#make-font">make-font</a></b> + <b><a href="#make-color">make-color</a></b> + <b><a href="#make-underline">make-underline</a></b> + <b><a href="#make-link">make-link</a></b> + </p> + + <hr> + <p><a id="make-underline"><i>Function</i> <b>MAKE-UNDERLINE</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>make-underline</b> <i>level</i> => <i>result</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>level</i>---a non-negative <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_i.htm#integer">integer</a></i>. + <p><i>result</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_l.htm#list">list</a></i>.</p> + </p> + + <p><b>Description:</b></p> + <p> + Creates an <i>underline</i> attribute with <i>level</i> number of underline strokes. + </p> + + <p><b>Examples:</b></p> + <p><pre> (make-underline 1) => (:UNDERLINE 1)</pre></p> + + <p><b>Side Effects:</b> None.</p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#make-attributed-string">make-attributed-string</a></b> + <b><a href="#make-range">make-range</a></b> + <b><a href="#make-font">make-font</a></b> + <b><a href="#make-color">make-color</a></b> + <b><a href="#make-super">make-super</a></b> + <b><a href="#make-link">make-link</a></b> + </p> + + <hr> + <p><a id="make-link"><i>Function</i> <b>MAKE-LINK</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>make-link</b> <i>url</i> => <i>result</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>url</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_s.htm#string">string</a></i>.</p> + <p><i>result</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_l.htm#list">list</a></i>.</p> + </p> + + <p><b>Description:</b></p> + <p> + Creates a <i>link</i> attribute, pointing to <i>url</i>. + </p> + + <p><b>Examples:</b></p> + <p><pre> (make-link "http://www.spork.org/") => (:LINK "http://www.spork.org/")</pre></p> + + <p><b>Side Effects:</b> None.</p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#make-attributed-string">make-attributed-string</a></b> + <b><a href="#make-range">make-range</a></b> + <b><a href="#make-font">make-font</a></b> + <b><a href="#make-color">make-color</a></b> + <b><a href="#make-super">make-super</a></b> + <b><a href="#make-underline">make-underline</a></b> + </p> + + <hr> + <p><a id="escape-mux-string"><i>Function</i> <b>ESCAPE-MUX-STRING</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>escape-mux-string</b> <i>string</i> => <i>result</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>string</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_s.htm#string">string</a></i>.</p> + <p><i>result</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_s.htm#string">string</a></i>.</p> + </p> + + <p><b>Description:</b></p> + <p> + This function is used to create pre-formatted strings for a MUX. MUXes normally ignore sequences of white space, and error on newlines, ignoring tab markins except as their capacity for white space. You can get around this by injecting %r, %t, and %b for newlines, tab characters, and white space, respectively. This function does that for you. + </p> + + <p><b>Examples:</b></p> + <p><pre> (escape-mux-string "xyzzy plugh") => "xyzzy%bplugh"</pre></p> + + <p><b>Side Effects:</b> None.</p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>Notes:</b></p> + <p> + This function may only be useful for MUSHes. If your MUX escapes strings differently than a MUSH, then you will need a new function. + </p> + + <hr> + <p><a id="map-variables"><i>Function</i> <b>MAP-VARIABLES</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>map-variables</b> <i>string</i> <i>variable-list</i>=> <i>result-string</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>string</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_s.htm#string">string</a></i>.</p> + <p><i>variable-list</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_l.htm#list">list</a></i> containing the variable substitutions for <i>string</i>. + <p><i>result-string</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_s.htm#string">string</a></i>.</p> + </p> + + <p><b>Description:</b></p> + <p> + <b>map-variables</b> returns a <i>string</i> composed by substituting patterns of + the form $<i>number</i>$ from <i>string</i> with those places in <i>variable-list</i>. + So, <code>$1$</code> refers to the first position (<i>i.e., car</i>) of the list + <i>variable-list</i>. + </p> + + <p><b>Examples:</b></p> + <p><pre> + (map-variables "one: $1$ two: $2$ three: $3$" '(1 2 3)) => "one: 1 two: 2 three: 3"</pre></p> + <p><b>Side Effects:</b> None.</p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + </body> +</html> diff --git a/English.lproj/Moxie Help/pages/.svn/text-base/lisp-glossary.html.svn-base b/English.lproj/Moxie Help/pages/.svn/text-base/lisp-glossary.html.svn-base new file mode 100644 index 0000000..6f64434 --- /dev/null +++ b/English.lproj/Moxie Help/pages/.svn/text-base/lisp-glossary.html.svn-base @@ -0,0 +1,68 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" + "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> +<html lang="en"> + <head> + <title>Lisp Glossary</title> + <meta name="generator" content="Emacs!"> + </head> + + <body> + <h1>Lisp Glossary</h1> + + <dt><strong><a id="asdf">ASDF</a></strong></dt> + <dd><p><em>(abbrev, "Another System Definition Facility"</em> A way to + package a lisp bundle together. See the <a href="#cliki">CLiki</a> + <a href="http://www.cliki.net/asdf" target="new">page</a> for further + details.</p></dd> + + <dt><strong><a id="bjc-utils">bjc-utils</a></strong></dt> + <dd><p>A collection of utilities the author (bjc) finds useful, and so, + in order to facilitate his hacking, he has also included within + Moxie.</p></dd> + + <dt><strong><a id="clhs">CLHS</a></strong></dt> + <dd><p><em>(abbrev, "Common Lisp HyperSpec")</em> The authoritative + reference for the ANSI ratified Common Lisp.<p> + + <p>You may find a version of the HyperSpec online at: + <a href="http://www.lispworks.com/reference/HyperSpec/index.html" + target="new"> + LispWorks</a></p></dd> + + <dt><strong><a id="cliki">CLiki</a></strong></dt> + <dd><p><em>(from "Common Lisp" and "Wiki")</em> A Wiki devoted to + Common Lisp.</p> + + <p>See <a href="http://www.cliki.net/" target="new">http://www.cliki.net/</a></p></dd> + + <dt><strong><a id="cl-ppcre">CL-PPCRE</a></strong></dt> + <dd><p><em>(abbrev, "Common Lisp Portable Perl Compatible Regular Expression")</em> + A Lisp <a href="#package">package</a> with functions to parse and match + with PERL-style Regular Expressions.</p> + + <p>See the <a href="#cliki">CLiki</a> + <a href="http://www.cliki.net/cl-ppcre" target="new">page</a> for + further details.</p></dd> + + <dt><strong><a id="ecl">ECL</a></strong></dt> + <dd><p><em>(abbrev, "Embeddable Common Lisp")</em> Moxie uses ECL for + its lisp sub-system. More information on ECL can be found on the + <a href="http://ecls.sourceforge.net/" target="new">SourceForge + project page</a></p></dd> + + <dt><strong><a id="package">package</a></strong></dt> + <dd><p>Packages are a kind of lisp "library". See the <a href="#clhs">CLHS</a> + <a href="http://www.lispworks.com/reference/HyperSpec/Body/11_.htm" + target="new">Chapter 11.</a></p></dd> + + <dt><strong><a id="repl">REPL</a></strong></dt> + <dd><p><em>(abbrev, "Read, Eval, Print Loop")</em> The main loop responsible + for accepting user input, evaluating the input, and printing the results + of that evaluation. The REPL is often used synonymously with + <a href="#toplevel">"top level."</a></p></dd> + + <dt><strong><a id="toplevel">Top Level</a></strong></dt> + <dd><p>The top-most <a href="#repl">REPL</a>. It is the first loop instantiated + by the lisp sub-system, from which everything else is evaluated.</p></dd> + </body> +</html> diff --git a/English.lproj/Moxie Help/pages/.svn/text-base/navigation.html.svn-base b/English.lproj/Moxie Help/pages/.svn/text-base/navigation.html.svn-base new file mode 100644 index 0000000..b639388 --- /dev/null +++ b/English.lproj/Moxie Help/pages/.svn/text-base/navigation.html.svn-base @@ -0,0 +1,24 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" + "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> +<html lang="en"> +<head> + <title>Navigation</title> + <meta name="generator" content="Emacs!"> +</head> + +<body> + <center><img src="../images/Moxie.png" alt="" width="128" height="128"></center> + <ul> + <li><a href="overview.html" target="contentsFrame">Overview</a></li> + <li><a href="faq.html" target="contentsFrame">Frequently Asked Questions</a></li> + <li><a href="plugin.html" target="contentsFrame">Plugin System</a></li> + <ul> + <li><a href="lisp-functions.html" target="contentsFrame">Plugin Dictionary</a></li> + </ul> + <li><a href="whatsnew.html" target="contentsFrame">What's new</a></li> + <li><a href="bugs.html" target="contentsFrame">Known Bugs</a></li> + <li><a href="todo.html" target="contentsFrame">To Do</a></li> + <li><a href="http://www.kublai.com/~shmit/software/Moxie/" target="new">Website</a></li> + </ul> +</body> +</html> diff --git a/English.lproj/Moxie Help/pages/.svn/text-base/overview.html.svn-base b/English.lproj/Moxie Help/pages/.svn/text-base/overview.html.svn-base new file mode 100644 index 0000000..a32bb6c --- /dev/null +++ b/English.lproj/Moxie Help/pages/.svn/text-base/overview.html.svn-base @@ -0,0 +1,36 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" + "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> +<html lang="en"> + <head> + <title>Overview</title> + <meta name="generator" content="Emacs!"> + </head> + + <body> + <h1>Overview</h1> + <p>Moxie is a client for <a href="glossary.html#mux">MUX</a> systems. Some of its + notable features are:</p> + + <ul> + <li>ANSI color support is supplied via a plug in.</li> + <li>It has trigger, alias, and macro support via the <a href="plugin.html">plugin</a> sub-system.</li> + <li>Lisp-based plugin system, instead of a custom scripting language, so you can write + any kind of plug in you can imagine.</li> + <li>Transparent windows.</li> + <li>Command History via the CMD-Up/Down arrows. This also works in the Lisp REPL.</li> + <li>MUX-formatted pasting, which translates whitespace to %r, %t, %b as appropriate.</li> + <li>Auto-login to servers.</li> + <li>Startup worlds allow you to auto-open worlds when Moxie starts up.</li> + <li>Logging of sessions to plain-text files.</li> + <li>An innovative "World Selector" which allows you to switch between worlds very + quickly, shows status (New Activity, Connected, Disconnected), allowing for:</li> + <li>Clean and simple tab-less design, hearkening back to older MacOS days.</li> + </ul> + + <p>You can create sessions ("<a href="glossary.html#world">Worlds</a>" in Moxie) + which contain all your preferences for a given world, as well as configure + global preferences (such as what worlds to start up when Moxie launches).</p> + + <p>If you want to learn more about any of this, click a topic on the left.</p> + </body> +</html> diff --git a/English.lproj/Moxie Help/pages/.svn/text-base/plugin.html.svn-base b/English.lproj/Moxie Help/pages/.svn/text-base/plugin.html.svn-base new file mode 100644 index 0000000..1f048c1 --- /dev/null +++ b/English.lproj/Moxie Help/pages/.svn/text-base/plugin.html.svn-base @@ -0,0 +1,203 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" + "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> +<html lang="en"> + <head> + <title>Plugin Lifestyle</title> + <meta name="generator" content="BBEdit 6.5"> + </head> + + <body> + <h1><a id="intro">Introduction</a></h1> + <h2>Or: The worlds of MUXing are varied, so why shouldn't my viewer be?</h2> + <p> + Most MUXes are built off very similar codebases and design patters, but + within those similar roots are an infinite and varied number of worlds. + </p> + <p> + In order to cope with the almost maddening variety in MUXing, + programmatically, you have to develop some kind of programming language. + For instance, TinyFugue's trigger's are a simple programming language. + </p> + <p> + So, to allow for the largest amount of flexibility in Moxie, Moxie + includes a full programming language. While inventing one specifically + for Moxie would certainly be the norm, it is not something that should + be valued highly. In fact, by using a standard language, you get a lot + of benefits of useably free code-base. + </p> + <p> + So, Moxie includes an <a href="http://clisp.cons.org/">embedded lisp + interpreter</a>. This gives you the full power of the Lisp language from + within your plugin code. What kind of things you write, and how you want to + interact with Moxie and your MUX are limited only by your imagination. + </p> + <p> + This does mean you'll have to learn Lisp - at least a little - in order + to write any plugins for Moxie, although I will endeavour to keep things + as simple as possible throughout this document. + </p> + + <h1><a id="quickstart">Quick Start</a></h1> + <h2>Or: Just Gimme the Code, and I'll Come Back When I Need You.</h2> + <p> + The simplest plugins are keyword expansions: when you type + "/foobar baz" into Moxie, it will try to trigger keyword expansion for + the keyword "foobar". + </p> + <p> + To register a keyword expander, you first have to write the code + for the expander, then register it with the keyword expansion hook. + all the functions referenced here are exported from the MOXIE + <a href="lisp-glossary.html#package">package</a>. + </p> + <p> + First, we'll create a package for our test plugin, and use the moxie + <a href="lisp-glossary.html#package">package</a>, as well as the + <a href="lisp-glossary.html#bjc-utils">bjc-utils</a> package. + </p> + <pre> + (defpackage test-plugin + (:use :cl :cl-user :moxie :bjc-utils)) + (in-package :test-plugin) + </pre> + <p> + Then we define our expander function. We just want to take a name off + of the argument line, and page them with "hello!". For the sake of + debugging, we also want to print out what we got as the argument + to the lisp <a href="lisp-glossary.html#repl">REPL</a>: + </p> + <pre> + (defun foobar-handler (string) + (format t "foobar-handler got: ~A~%" string) + (map-variables "page $1$ = hello!" + (split string #\Space))) + </pre> + <p> + The function we've defined returns the string from the map-variables + command. This return value is what's sent to the MUX. If we don't want + to send anything to the MUX you can return an empty string ("") or + nil. + </p> + <p> + Now that we have the function defined, we want to register it with + the keyword expansion hook: + </p> + <pre> + (add-keyword 'foobar-handler "foobar") + </pre> + <p> + To test this, first bring up the REPL window so we can see what's + being printed out by the function as it runs. To do this, select + "Lisp REPL" from the "Window" menu. + </p> + <p> + Now, in Moxie, type "/foobar me", and, assuming you're connected + to a MUX, you should get a page from yourself saying, "hello!". + In the REPL window, however, you'll see: + </p> + <pre> + foobar-handler got: me + </pre> + <p> + Which means the handler received the string "me" as the argument + string. + </p> + <p> + If you're curious how the functions map-variables and split work, + in the REPL, type "(documentation 'map-variables 'function)" to view + their documentation. + </p> + <p> + There are other pre-defined triggers that work in a similar fashion. + There is a list of them in the moxie.lisp file in the + <a href="#app-source">resources directory</a>. + </p> + + <h1><a id="app-predefs">Appendix: Pre-defined variables and triggers</a></h1> + <p> + Moxie uses a set of pre-defined symbols to communicate with the lisp + sub-system. Below is a table of symbols, what type they are, and what + they do. + </p> + <table border=1> + <tr> + <td>Name</td> + <td>Type</td> + <td>Description</td> + </tr> + <tr> + <td>moxie::*moxie-result-stream*</td> + <td>stream</td> + <td>The stream for communicating with Moxie.</td> + </tr> + <tr> + <td>moxie::*world*</td> + <td>object</td> + <td>The currently active world-id. This may be 0, if a world hasn't called into + the plugin system.</td> + </tr> + <tr> + <td>moxie::eval-hook</td> + <td>function</td> + <td>Used by Moxie to send data from the REPL window to the + lisp plugin system.</td> + </tr> + <tr> + <td>moxie::input-to-server-hook</td> + <td>function</td> + <td>Used by Moxie to send data to the lisp plugins after receiving + something from the input line.</td> + </tr> + <tr> + <td>moxie::output-from-server-hook</td> + <td>function</td> + <td>Used by Moxie when data is received from the MUX for display + on the screen.</td> + </tr> + <tr> + <td>moxie::keystroke-hook</td> + <td>function</td> + <td>Used by Moxie when a registered keystroke is pressed to call into its + function</td> + </tr> + <tr> + <td>moxie::world-opened-hook</td> + <td>function</td> + <td>Used by Moxie to tell the plugin system a new world has opened.</td> + </tr> + <tr> + <td>moxie::world-closed-hook</td> + <td>function</td> + <td>Used by Moxie to tell the plugin system a world has closed.</td> + </tr> + <tr> + <td>moxie::start-logging-hook</td> + <td>function</td> + <td>Used by Moxie to tell the plugin system it wishes to log transcripts.</td> + </tr> + <tr> + <td>moxie::stop-logging-hook</td> + <td>function</td> + <td>Used by Moxie to tell the plugin system it no longer wishes to log.</td> + </tr> + </table> + + <h1><a id="app-source">Appendix: Sample source code</a></h1> + <p> + You can find definitions for all the built in functions in the Application + bundle: <code>Contents/Resources/*.lisp</code>. The file <code>startlisp</code> + parses the file <code>init-template.lisp</code> and starts the lisp with the parsed + file, loading the rest of the plug in system with it. + </p> + <p> + There are certain hooks in <code>tpl.lisp</code> which the application calls. You + can have a look at them, and even change them if you want, but don't + rename them or Moxie won't work anymore. + </p> + <p> + Also included in the Application Plug-Ins directory are a few pre-supplied plug ins + which you can use as an example. This includes the default logger, numpad movement macros, + and ANSI color support. + </p> + </body> +</html diff --git a/English.lproj/Moxie Help/pages/.svn/text-base/todo.html.svn-base b/English.lproj/Moxie Help/pages/.svn/text-base/todo.html.svn-base new file mode 100644 index 0000000..4a413de --- /dev/null +++ b/English.lproj/Moxie Help/pages/.svn/text-base/todo.html.svn-base @@ -0,0 +1,24 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" + "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> +<html lang="en"> + <head> + <title>To Do</title> + <meta name="generator" content="Emacs!"> + </head> + + <body> + <h1>To Do</h1> + + <ul> + <li>Parenthesis highlighting in the REPL. Programming lisp without this is a + complete pain for larger functions.</li> + <li>Create a better attributed string mechanism for Plug Ins. The current system + works, but is ugly.</li> + <li>Tab completion and indentation in the REPL.</li> + <li>Symbol lookup in the CLHS from the REPL.</li> + <li>Complete documentation.</li> + <li>Clean up the attributed string interface w/regards to hooks. Having to + conditionally extract the string is very annoying.</li> + </ul> + </body> +</html> diff --git a/English.lproj/Moxie Help/pages/.svn/text-base/whatsnew.html.svn-base b/English.lproj/Moxie Help/pages/.svn/text-base/whatsnew.html.svn-base new file mode 100644 index 0000000..b990505 --- /dev/null +++ b/English.lproj/Moxie Help/pages/.svn/text-base/whatsnew.html.svn-base @@ -0,0 +1,83 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" + "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> +<html lang="en"> + <head> + <title>What's New</title> + <meta name="generator" content="Emacs!"> + </head> + + <body> + <h1>What's new</h1> + <h3>Since 0.4</h3> + <ul> + <li>A timer hook now fires every second. You can attach to it by adding + a function to <code>:timer-hook</code>.</li> + <li>Telnet DONT and WONT are handled properly now.</li> + <li>The lisp image includes ASDF and CL-PPCRE, so startup times should be faster + if you use CL-PPCRE in your plugins.</li> + </ul> + + <h3>Since 0.3</h3> + <ul> + <li>ANSI color support is now supplied via a built-in plug in.</li> + <li>You can send a lone enter key press.</li> + <li>Telnet protocol support.</li> + <li>You can clear your screen from the plug in interface now. For convenience, + the command "/clear" will clear your screen, as well as the <code>clear</code> + key on the numeric keypad.</li> + <li>Numpad keybindings have been added via a plug in.</li> + <li>Hooks use the results of the previous hook in a mode if applicable now, to + allow for multiple levels of filter feeding off of each other. This does complicate + things a little more, but it also allows hooks to play nice with each other.</li> + <li>Hooks no longer set arbitrary keywords. Those have been replaced by special + variables which will do the right thing, and greatly simplify plugin code.</li> + <li>Attributed strings changed. You can now set multiple attributes across multiple + ranges of the string.</li> + </ul> + + <h3>Since 0.2:</h3> + <ul> + <li>Moxie now scans for plugins in ~/Library/Moxie, and the usual variations + thereof for Network, Local, and System directories.</li> + <li>There's a new package, CLHS-LOOKUP, which will lookup symbols in the CLHS.</li> + <li>The world view is no longer cleared when reconnecting.</li> + <li>Lisp is now initialized at startup time.</li> + <li>The Lisp system is no longer embedded. You can use any CL system you wish + now. The communications channels have become asynchronous, as well. The lisp + system should never hang Moxie again, although it is still required for its + functioning. You can now also use the built-in debugging features of whichever + lisp you choose.</li> + <li>CLISP is now included as the default lisp implementation. You can get more + information on CLISP at <a href="http://clisp.cons.org/">the website.</a></li> + <li>Logging has been moved into a plugin. You can now enable and disable it + from within plugins, and for convenience, the command "/log [filename]" in + a Moxie window will enable logging to FILENAME, if it exists, otherwise it + will toggle logging to the current log file.</li> + <li>The plug in system now defines "keystroke macros" which run when individual + keys are pressed. See the plug in documentation for further details.</li> + <li>Logging can be enabled and disabled from the plug in system.</li> + <li>The status buffer (the text field next to the lag indicator) can now + be set from the plug in system.</li> + <li>World-local variables are now available in the plug in system via the + <code>world-var</code> function. These variables differ depending upon + which world is calling into the plug in, and can be used to keep state + information. See the plug in documentation for further information.</li> + <li>CL-PPCRE moved into the PlugIns directory.</li> + <li>Plug in documentation updated for all exported functions.</li> + </ul> + + <h3>Since 0.1:</h3> + <ul> + <li>Plugin System is here. The plugins are written in Lisp thanks to + <a href="http://ecls.sourceforge.net/" target="new">ECL.</a> + <a href="http://www.cliki.net/asdf" target="new">ASDF</a> and + <a href="http://www.cliki.net/cl-ppcre" target="new">CL-PPCRE</a> are + also included. See the help file for details.</li> + + <li>Help is now available in the standard place. It's pretty empty at + the moment, but includes some pointers on how to get started with the + plugin system. There is also a sample plugin provided in the application + bundle, in the "PlugIns" directory.</li> + </ul> + </body> +</html> diff --git a/English.lproj/Moxie Help/pages/bugs.html b/English.lproj/Moxie Help/pages/bugs.html new file mode 100644 index 0000000..b2a5fd5 --- /dev/null +++ b/English.lproj/Moxie Help/pages/bugs.html @@ -0,0 +1,20 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" + "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> +<html lang="en"> + <head> + <title>Known Bugs</title> + <meta name="generator" content="Emacs!"> + </head> + + <body> + <h1>Known Bugs</h1> + <ul> + <li>The world selector will not raise the window you select if it's already the frontmost + Moxie window, even if Moxie is in the background (it comes next-to-top, for reasons I don't + at all understand).</li> + <li>Fonts get screwed up fairly frequently, especially when trying to set them via the font panel.</li> + <li>The "Choose" button for choosing the REPL font doesn't work at all.</li> + <li>Reading from standard-input in Lisp will hang Moxie.</li> + </ul> + </body> +</html> diff --git a/English.lproj/Moxie Help/pages/faq.html b/English.lproj/Moxie Help/pages/faq.html new file mode 100644 index 0000000..a80cde3 --- /dev/null +++ b/English.lproj/Moxie Help/pages/faq.html @@ -0,0 +1,81 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" + "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> +<html lang="en"> + <head> + <title>Frequently Asked Questions</title> + <meta name="generator" content="Emacs!"> + </head> + + <body> + <h1>Frequently Asked Questions</h1> + + <dt><strong>How do I write a trigger, alias, or macro?</strong></dt> + <dd> + <p>First of all, Moxie makes no distinction between triggers, aliases, and macros. We + treat all of these things in the same way: as a <a href="plugin.html">plugin</a>.</p> + + <p>All plugins are written in Common Lisp, so you'll have to have some grounding in + Lisp to do anything serious at the moment (although I have some ideas for simpler + interfaces for the non-programming-minded in the future). There are a few support + routines included in the MOXIE <a href="lisp-glossary.html#package">package</a> to + simplify common plugin tasks, such as triggers and aliases.</p> + </dd> + + <dt><strong>LISP?! Why would you do that?</strong></dt> + <dd> + <p>Because I didn't want to have to write my own language for triggers, aliases, and + macros. No matter how much I worked on it, I wasn't going to get the kind of + programmability I wanted without embedding a full programming language. + I also think it's something of a waste of time to learn a new language just for the + purpose of programming a trigger in your MUX client. + </p> + <p>I could have just used AppleScript as the language of choice, and came very + close to doing so a number of times, but I had too much trouble trying to get + AS and ObjC talking as well as I'd liked, and, frankly, I don't consider it to + be full-featured enough.</p> + <p>So I chose to embed a language. There are, theoretically, a fair number + of popular languages I could have embedded, however, I chose Lisp for the + following reasons: + <ul> + <li>Real-time development. I feel that, in the scope of Moxie, having a fully + interactive development style is extremely useful. As far as I know, this + excludes PERL as a possibility.</li> + <li>Lisp has been ratified by ANSI, and is one of the few languages to do so. It + has a very large "library" that is standard from one lisp implementation to the + next, so as long as you've found code that's "Common Lisp" you've found code that + will work with Moxie.</li> + <li>Lisp is the second-oldest language still in use, after FORTRAN. While not + the largest consideration, it does guarantee that there's a fair amount of code + available for free in the world. Emacs, for example, has a huge amount of contributed + Emacs-Lisp code (which, while not common-lisp, is often easily ported).</li> + <li>And finally, because I can. I like Lisp, and I'm writing Moxie, so I get to pick. + "Give me real macros, or give me death!"</li> + </ul> + </p> + </dd> + + <dt><strong>Where can I find more information on Lisp programming?</strong></dt> + <dd> + <p>There are a number of web sites devoted to Lisp programming. Below, I'll list a few + resources that should get you pointed in the right direction: + <ul> + <li><a href="lisp-glossary.html#cliki">CLiki's</a> + <a href="http://www.cliki.net/Online%20Tutorial" target="new">Online Tutorial</a> page + can get you started if you're completely new.</li> + <li><a href="http://www.paulgraham.com" target="new">Paul Graham</a> has a lot of + information on Lisp, including a free book for the more serious programmers.</li> + </ul> + </p> + </dd> + + <dt><strong>What is the REPL?</strong></dt> + <dd> + <p>The <a href="lisp-glossary.html#repl">REPL</a> is your direct + interface to the Lisp sub-system. It is the key to fully interactive programming. Via + the REPL you can input Lisp commands directly and see the results - any Lisp will work + here, including function definitions. This allows you to write a function, test it, and + debug it, all without leaving the REPL, and with a much finer grain of control than with + a compile cycle.</p> + </dd> + </body> +</html> diff --git a/English.lproj/Moxie Help/pages/function-template.html b/English.lproj/Moxie Help/pages/function-template.html new file mode 100644 index 0000000..da624de --- /dev/null +++ b/English.lproj/Moxie Help/pages/function-template.html @@ -0,0 +1,30 @@ + <hr> + <p><a id="NAME"><i>Function</i> <b>NAME</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>NAME</b> <i>ARG</i> => <i>RETURN-VALUE</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>ARG</i>---A <i>TYPE</i>.</p> + <p><i>RETURN-VALUE</i>---An <i>TYPE</i>.</p> + </p> + + <p><b>Description:</b> None.</p> + + <p><b>Examples:</b></p> + <p><pre>CODE</pre></p> + + <p><b>Side Effects:</b> None.</p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#function">FUNCTION</a></b> + </p> + + <p><b>Notes:</b> None</p> diff --git a/English.lproj/Moxie Help/pages/glossary.html b/English.lproj/Moxie Help/pages/glossary.html new file mode 100644 index 0000000..3606388 --- /dev/null +++ b/English.lproj/Moxie Help/pages/glossary.html @@ -0,0 +1,27 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" + "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> +<html lang="en"> + <head> + <title> + Glossary + </title> + <meta name="generator" content="Emacs!"> + </head> + + <body> + <h1> + Glossary + </h1> + <ul> + <li> + <dt> <a id="mux">MUX</a> </dt> + <dd> A generic term meaning any of the variety of multi-user environments: + MUSH, MUD, MOO, etc.,.</dd> + </li> + <li> + <dt><a id="world">World</a></dt> + <dd>The file containing the preferences for a particular connection.</dd> + </li> + </ul> + </body> +</html> diff --git a/English.lproj/Moxie Help/pages/lisp-functions.html b/English.lproj/Moxie Help/pages/lisp-functions.html new file mode 100644 index 0000000..a6091c7 --- /dev/null +++ b/English.lproj/Moxie Help/pages/lisp-functions.html @@ -0,0 +1,947 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" + "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> + + +<html lang="en"> + <head> + <title>Lisp Functions</title> + <meta name="generator" content="Emacs!"> + </head> + + <body> + <h1>Moxie plugin functions</h1> + <p>These functions are all exported from the <code>MOXIE</code> + <a href="lisp-glossary.html#package">package</a>. + </p> + <p> + Contents: + <ul> + <li><a href="#world-var">world-var</a></li> + <li><a href="#add-hook">add-hook</a></li> + <li><a href="#remove-hook">remove-hook</a></li> + <li><a href="#run-hook">run-hook</a></li> + <li><a href="#add-keyword">add-keyword</a></li> + <li><a href="#remove-keyword">remove-keyword</a></li> + <li><a href="#add-keystroke-macro">add-keystroke-macro</a></li> + <li><a href="#remove-keystroke-macro">remove-keystroke-macro</a></li> + <li><a href="#send-to-mux">send-to-mux</a></li> + <li><a href="#print-to-world">print-to-world</a></li> + <li><a href="#set-status-buffer">set-status-buffer</a></li> + <li><a href="#enable-logging">enable-logging</a></li> + <li><a href="#disable-logging">disable-logging</a></li> + <li><a href="#make-attributed-string">make-attributed-string</a></li> +<!-- + We're going to lose these functions, in preference to a key/value + system. + + <li><a href="#make-range">make-range</a></li> + <li><a href="#make-font">make-font</a></li> + <li><a href="#make-color">make-color</a></li> + <li><a href="#make-super">make-super</a></li> + <li><a href="#make-underline">make-underline</a></li> + <li><a href="#make-link">make-link</a></li> --> + + <li><a href="#escape-mux-string">escape-mux-string</a></li> + <li><a href="#map-variables">map-variables</a></li> + </ul> + </p> + + <hr> + <p><a id="world-var"><i>Function</i> <b>WORLD-VAR</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>world-var</b> <i>name</i> <code>&optional</code> (<i>world-id</i> <i>*world*</i>) => <i>result</i> + </p> + <p> + (setf (<b>world-var</b> <i>name</i> <code>&optional</code> (<i>world-id</i> *world*)) <i>new-value</i>) + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>name</i>---an <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_o.htm#object">object</a></i>.</p> + <p><i>world-id</i>---an <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_o.htm#object">object</a></i>.</p> + <p><i>result</i>---an <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_o.htm#object">object</a></i>.</p> + </p> + + <p><b>Description:</b></p> + <p> + <b>world-var</b> is used to associate <a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_v.htm#value">values</a></i>, which are persistent throughout the application's lifetime, with <i>name</i> for a particular Moxie world, which has the unique identifier, <i>world-id</i>. + </p> + <p> + <b><a href="http://www.lispworks.com/reference/HyperSpec/Body/m_setf_.htm#setf">setf</a></b> may be used with <b><a href="#world-var">world-var</a></b> to modify the <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_v.htm#value">values</a></i> associated with a given <i>name</i>, or to add a new entry. + </p> + + <p><b>Examples:</b></p> + <p><pre> (setf (world-var :foo 0) 'bar) => BAR + (world-var :foo 0) => BAR + (world-var :foo 1) => NIL + (setf (world-var :foo 1) 'YOW) => YOW + (world-var :foo 1) => YOW + (world-var :foo 0) => BAR</pre></p> + + <p><b>Side Effects:</b> None.</p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>Notes:</b></p> + <p> + <i>world-id</i> is available as the <code>*world*</code> special variable. + </p> + + <hr> + <p><a id="add-hook"><i>Function</i> <b>ADD-HOOK</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>add-hook</b> <i>function</i> <i>mode</i> => <i>hook-list</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>function</i>--a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_f.htm#function_designator">function designator</a></i>. + <p><i>mode</i>---A <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_k.htm#keyword">keyword</a></i>.</p> + <p><i>hook-list</i>---A <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_l.htm#list">list</a></i> containing the active <i>functions</i> for <i>mode</i>.</p> + </p> + + <p><b>Description:</b></p> + <p><b>add-hook</b> adds <i>function</i> to the list of functions to be run when + the hook <i>mode</i> is executed via <b>run-hook</b>.</p> + + <p><b>Examples:</b></p> + <p><pre> + (defun my-printer (string) + (let ((string (if (stringp string) string (car string)))) + (concatenate 'string "TEST: " string))) => MY-PRINTER + (add-hook 'my-printer :output-from-server-hook) => (MY-PRINTER) + (run-hook :output-from-server-hook "foo") => "TEST: foo" + (defun 'do-nothing (&rest args) nil) => DO-NOTHING + (add-hook 'do-nothing :output-from-server-hook) => (MY-PRINTER DO-NOTHING) + (run-hook :output-from-server-hook "foo") => "TEST: foo"</pre> + </p> + + <p><b>Side Effects:</b></p> + <p><i>function</i> will be run by <b>run-hook</b> for <i>mode</i>.</p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#remove-hook">remove-hook</a></b> + <b><a href="#run-hook">run-hook</a></b> + </p> + + <p><b>Notes:</b> + <p>If <i>function</i> is already on the hook list for <i>mode</i>, it will + not be added again.</p> + + <hr> + <p><a id="remove-hook"><i>Function</i> <b>REMOVE-HOOK</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>remove-hook</b> <i>function</i> <i>mode</i> => <i>hook-list</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>function</i>--a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_f.htm#function_designator">function designator</a></i>. + <p><i>mode</i>---A <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_k.htm#keyword">keyword</a></i>.</p> + <p><i>hook-list</i>---A <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_l.htm#list">list</a></i> containing the active <i>functions</i> for <i>mode</i>.</p> + </p> + + <p><b>Description:</b> None.</p> + + <p><b>Examples:</b></p> + <p><pre> + (remove-hook 'my-printer :output-from-server-hook) => NIL</pre></p> + + <p><b>Side Effects:</b></p> + <p><i>function</i> is no longer called by <code>run-hook</code>.</p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#add-hook">add-hook</a></b> + <b><a href="#run-hook">run-hook</a></b> + </p> + + <p><b>Notes:</b></p> + <p> + If <i>function</i> is not on the hook list for <i>mode</i>, the hook list is + returned without change. You can use this facility to get the current list + of <i>functions</i> for <i>mode</i> by removing <a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_n.htm#nil">NIL</a> from the hook list. + </p> + + <hr> + <p><a id="run-hook"><i>Function</i> <b>RUN-HOOK</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>run-hook</b> <i>mode</i> <code><i>&optional</i></code> <i>arg</i> + => <i>result*</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>mode</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_k.htm#keyword">keyword</a></i>.</p> + <p><i>arg</i>---an <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_o.htm#object">object</a></i>.</p> + <p><i>results</i>---the <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_v.htm#value">values</a></i> returned by the last non-NIL terminating function.</p> + </p> + + <p><b>Description:</b></p> + <p> + <a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_a.htm#apply">Applies</a> the + <i>functions</i> for <i>mode</i> to the <i>args</i>. + </p> + <p> + A hook-list acts as a filter, passing the output of one filter into the input of + the next. If a function on the hook-list returns <b>NIL</b>, it is treated in this iteration + as if it hadn't been on the hook-list in the first place. Thus, the only time + <b>run-hook</b> returns <b>NIL</b> is when every function on the hook-list returns + <b>NIL</b>. + </p> + + <p><b>Examples:</b></p> + <p><pre> + (run-hook :output-from-server-hook "Foobar!") => "TEST: Foobar!"</pre></p> + + <p><b>Side Effects:</b> None.</p> + + <p><b>Affected By:</b></p> + <p> + The hook list for <i>mode</i>. All the functions on the list are called, in + order. The last function which returns a non-nil value is used as the result + function. + </p> + + <p><b>Exceptional Situations:</b></p> + <p> + If a <i>function</i> on the hook list for <i>mode</i> is not a function + designator, an error will be raised. + </p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#add-hook">add-hook</a></b> + <b><a href="#remove-hook">remove-hook</a></b> + </p> + + <p><b>Notes:</b> None.</p> + + <hr> + <p><a id="add-keyword"><i>Function</i> <b>ADD-KEYWORD</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>add-keyword</b> <i>function</i> <i>keyword</i> => <i>result</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>function</i>--a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_f.htm#function_designator">function designator</a></i>. + <p><i>keyword</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_s.htm#string">string</a></i>.</p> + <p><i>result</i>---the <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_f.htm#function_designator">function designator</a></i> for <i>keyword</i>.</p> + </p> + + <p><b>Description:</b> None.</p> + + <p><b>Examples:</b></p> + <p><pre> (defun my-keyword (args) + (format t "Keyword expander: ~S~%" args)) => MY-KEYWORD + (add-keyword 'my-keyword "foo") => MY-KEYWORD</pre></p> + + <p><b>Side Effects:</b></p> + <p> + <i>keyword</i> is registered for keyword expansion. + </p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#remove-keyword">remove-keyword</a></b> + </p> + + <p><b>Notes:</b></p> + <p> + The keyword expander compares keywords in a case insensitive fashion. So "FOO" and + "foo" are equivalent. + </p> + + <hr> + <p><a id="remove-keyword"><i>Function</i> <b>REMOVE-KEYWORD</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>remove-keyword</b> <i>keyword</i> => <i>result</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>keyword</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_s.htm#string">string</a></i>.</p> + <p><i>result</i>---the <a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_t.htm#t">T</a> on successful removal. <a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_n.htm#nil">NIL</a> otherwise. + </p> + + <p><b>Description:</b> None.</p> + + <p><b>Examples:</b></p> + <p><pre> (remove-keyword "foo") => T + (remove-keyword "foo") => NIL</pre></p> + + <p><b>Side Effects:</b></p> + <p> + <i>keyword</i> is no longer expanded by the keyword expander. + </p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#add-keyword">add-keyword</a></b> + </p> + + <p><b>Notes:</b></p> + <p> + The keyword expander compares keywords in a case insensitive fashion. So "FOO" and + "foo" are equivalent. + </p> + + <hr> + <p><a id="add-keystroke-macro"><i>Function</i> <b>ADD-KEYSTROKE-MACRO</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>add-keystroke-macro</b> <i>function</i> <i>keystroke</i> => <i>result</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>function</i>--a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_f.htm#function_designator">function designator</a></i>. + <p><i>keystroke</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_k.htm#keyword">keyword</a></i>.</p> + <p><i>result</i>---the <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_f.htm#function_designator">function designator</a></i> for <i>keyword</i>.</p> + </p> + + <p><b>Description:</b> None.</p> + + <p><b>Examples:</b></p> + <p><pre> (defun my-keystroke-macro (keystroke) + (format t "Should expand keystroke ~S here.~%" keystroke)) => MY-KEYSTROKE-MACRO + (add-keystroke-macro 'my-keystroke-macro :f1) => MY-KEYSTROKE-MACRO</pre></p> + + <p><b>Side Effects:</b></p> + <p> + <i>function</i> is called when <i>keystroke</i> is pressed. + </p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#remove-keystroke-macro">remove-keystroke-macro</a></b> + </p> + + <p><b>Notes:</b></p> + <p> + Unlike most other functions defined here, keystrokes don't do anything by default. + This means that in order to achieve some user-visible result, you'll have to use + the lower level functions <b>print-to-world</b>, or <b>send-to-mux</b>.. + </p> + <p><b>This format is likely to change very soon!</b></p> + <p> + Keystrokes, currently, are <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_k.htm#keyword">keywords</a></i> with the following format: + <pre> + keystroke := :[<modifier>-]*<keycode> + modifier := cmd|opt|ctrl|shift|numpad + keycode := <fkey>|character + fkey := f1 .. fn .. f35</pre> + So, hitting 8 on the number pad, while the command key is down yields the keyword: <code>:cmd-numpad-8</code> + </p> + + <hr> + <p><a id="remove-keystroke-macro"><i>Function</i> <b>REMOVE-KEYSTROKE-MACRO</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>remove-keystroke-macro</b> <i>keystroke</i> => <i>result</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>keystroke</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_k.htm#keyword">keyword</a></i>.</p> + <p><i>result</i>---<a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_t.htm#t">T</a>, if the keystroke was previously registered, <a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_t.htm#nil">NIL</a> otherwise.</p> + </p> + + <p><b>Description:</b> None.</p> + + <p><b>Examples:</b></p> + <p><pre> (remove-keystroke-macro :f1) => T + (remove-keystroke-macro :f1) => NIL</pre></p> + + <p><b>Side Effects:</b></p> + <p> + <i>keystroke</i> no longer triggers a function call. + </p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#add-keystroke-macro">add-keystroke-macro</a></b> + </p> + + <p><b>Notes:</b></p> + <p><b>This format is likely to change very soon!</b></p> + <p> + Keystrokes, currently, are <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_k.htm#keyword">keywords</a></i> with the following format: + <pre> + keystroke := :[<modifier>-]*<keycode> + modifier := cmd|opt|ctrl|shift|numpad + keycode := <fkey>|character + fkey := f1 .. fn .. f35</pre> + So, hitting 8 on the number pad, while the command key is down yields the keyword: <code>:cmd-numpad-8</code> + </p> + + <hr> + <p><a id="send-to-mux"><i>Function</i> <b>SEND-TO-MUX</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>send-to-mux</b> <i>world-id</i> <i>string</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>world-id</i>---an <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_o.htm#object">object</a></i>.</p> + <p><i>string</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_s.htm#string">string</a></i>.</p> + </p> + + <p><b>Description:</b></p> + <p> + This is the low-level function to send data to the MUX server associated with + <i>world-id</i>. Currently, you can only send a string command, which will be + interpreted by the MUX directly. This may change in the future to allow for + attributed strings. + </p> + + <p><b>Examples:</b></p> + <p><pre> (send-to-mux *world* (format nil "Wauug!~%"))</pre></p> + + <p><b>Side Effects:</b> None.</p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#print-to-world">print-to-world</a></b> + <b><a href="#set-status-buffer">set-status-buffer</a></b> + </p> + + <p><b>Notes:</b></p> + <p> + <i>world-id</i> is available as the <code>*world*</code> special variable. + </p> + + <hr> + <p><a id="print-to-world"><i>Function</i> <b>PRINT-TO-WORLD</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>print-to-world</b> <i>world-id</i> <i>arg</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>world-id</i>---an <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_o.htm#object">object</a></i>.</p> + <p><i>string</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_s.htm#string">string</a></i>.</p> + </p> + + <p><b>Description:</b></p> + <p> + This is the low-level function to send data to the Moxie's world output view + associated with <i>world-id</i>. You can send either a normal string or an + attributed string for printing. + </p> + + <p><b>Examples:</b></p> + <p><pre> (print-to-world *world* (format nil "Wauug!~%"))</pre></p> + + <p><b>Side Effects:</b> None.</p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#send-to-mux">send-to-mux</a></b> + <b><a href="#set-status-buffer">set-status-buffer</a></b> + <b><a href="#make-attributed-string">make-attributed-string</a></b> + </p> + + <p><b>Notes:</b></p> + <p> + <i>world-id</i> is available as the <code>*world*</code> special variable. + </p> + + <hr> + <p><a id="set-status-buffer"><i>Function</i> <b>SET-STATUS-BUFFER</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>set-status-buffer</b> <i>world-id</i> <i>string</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>world-id</i>---an <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_o.htm#object">object</a></i>.</p> + <p><i>string</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_s.htm#string">string</a></i>.</p> + </p> + + <p><b>Description:</b></p> + <p> + Sets the status buffer of the window associated with <i>world-id</i> to <i>string</i>. + </p> + + <p><b>Examples:</b></p> + <p><pre> (set-status-buffer *world* "Hello, world!")</pre></p> + + <p><b>Side Effects:</b> None.</p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#send-to-mux">send-to-mux</a></b> + <b><a href="#print-to-world">print-to-world</a></b> + </p> + + <p><b>Notes:</b></p> + <p> + <i>world-id</i> is available as the <code>*world*</code> special variable. + </p> + + <hr> + <p><a id="enable-logging"><i>Function</i> <b>ENABLE-LOGGING</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>enable-logging</b> <i>world-id</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>world-id</i>---an <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_o.htm#object">object</a></i>.</p> + </p> + + <p><b>Description:</b></p> + <p> + Enables logging for the world associated with <i>world-id</i>. + </p> + + <p><b>Examples:</b></p> + <p><pre> (enable-logging *world*)</pre></p> + + <p><b>Side Effects:</b> None.</p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#disable-logging">disable-logging</a></b> + </p> + + <p><b>Notes:</b></p> + <p> + <i>world-id</i> is available as the <code>*world*</code> special variable. + </p> + + <hr> + <p><a id="disable-logging"><i>Function</i> <b>DISABLE-LOGGING</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>disable-logging</b> <i>world-id</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>world-id</i>---an <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_o.htm#object">object</a></i>.</p> + </p> + + <p><b>Description:</b></p> + <p> + Disables logging for the world associated with <i>world-id</i>. + </p> + + <p><b>Examples:</b></p> + <p><pre> (disable-logging *world*)</pre></p> + + <p><b>Side Effects:</b> None.</p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#enable-logging">enable-logging</a></b> + </p> + + <p><b>Notes:</b></p> + <p> + <i>world-id</i> is available as the <code>*world*</code> special variable. + </p> + + <hr> + <p><a id="make-attributed-string"><i>Function</i> <b>MAKE-ATTRIBUTED-STRING</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>make-attributed-string</b> <i>string</i> <code>&rest</code> <i>attribute*</i> => <i>result</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>string</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_s.htm#string">string</a></i>.</p> + <p><i>attributes</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_l.htm#list">list</a></i>.</p> + <p><i>result</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_l.htm#list">list</a></i>.</p> + </p> + + <p><b>Description:</b></p> + <p> + Creates a string with attributes applied to it. This allows you to change various display properties of the string, such as the color, font, and style. + </p> + + <p><b>Examples:</b></p> + <p><pre> + (make-attributed-string "Wauug!" (make-range 0 (length "Wauug!")) + (make-color 100 100 100) + (make-underline 1)) => ("Wauug!" ((:RANGE 0 6) + (:COLOR 100 100 100) + (:UNDERLINE 1)))</pre></p> + + <p><b>Side Effects:</b> None.</p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#make-range">make-range</a></b> + <b><a href="#make-font">make-font</a></b> + <b><a href="#make-color">make-color</a></b> + <b><a href="#make-super">make-super</a></b> + <b><a href="#make-underline">make-underline</a></b> + <b><a href="#make-link">make-link</a></b> + </p> + + <p><b>Notes:</b></p> + <p> + The only hook, currently, which can use attributed strings is <code>:output-from-server-hook</code>, which calls on <code>print-to-world</code> to display results. Those are the only places within Moxie to which you should be sending attributed strings. + </p> + + <hr> + <p><a id="make-range"><i>Function</i> <b>MAKE-RANGE</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>make-range</b> <i>index</i> <i>length</i> => <i>result</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>index</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_b.htm#bounding_index_designator">bounding index designator</a></i>. + <p><i>length</i>---a non-negative <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_i.htm#integer">integer</a></i>. + <p><i>result</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_l.htm#list">list</a></i>.</p> + </p> + + <p><b>Description:</b></p> + <p> + Creates a <i>range</i> object from <i>index</i> for a <i>length</i>. + </p> + + <p><b>Examples:</b></p> + <p><pre> (make-range 0 (length "Wauug!")) => (:RANGE 0 6)</pre></p> + + <p><b>Side Effects:</b> None.</p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#make-attributed-string">make-attributed-string</a></b> + <b><a href="#make-font">make-font</a></b> + <b><a href="#make-color">make-color</a></b> + <b><a href="#make-super">make-super</a></b> + <b><a href="#make-underline">make-underline</a></b> + <b><a href="#make-link">make-link</a></b> + </p> + + <p><b>Notes:</b></p> + <p> + This function is likely to go away in the future as the attributed string mechansism gets cleaned up. + </p> + + <hr> + <p><a id="make-font"><i>Function</i> <b>MAKE-FONT</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>make-font</b> <i>name</i> <i>size</i> => <i>result</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>name</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_s.htm#string">string</a></i>.</p> + <p><i>size</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/t_real.htm#real">real</a></i>. + </p> + <p><i>result</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_l.htm#list">list</a></i>.</p> + </p> + + <p><b>Description:</b></p> + <p> + Creates a <i>font</i> object. The font is located by <i>name</i> and is <i>size</i> points high. + </p> + + <p><b>Examples:</b></p> + <p><pre> (make-font "apple-monaco" 12.0) => (:FONT "apple-monaco" 12.0)</pre></p> + + <p><b>Side Effects:</b> None.</p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#make-attributed-string">make-attributed-string</a></b> + <b><a href="#make-range">make-range</a></b> + <b><a href="#make-color">make-color</a></b> + <b><a href="#make-super">make-super</a></b> + <b><a href="#make-underline">make-underline</a></b> + <b><a href="#make-link">make-link</a></b> + </p> + + <hr> + <p><a id="make-color"><i>Function</i> <b>MAKE-COLOR</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>make-color</b> <i>red-value</i> <i>green-value</i> <i>blue-value</i> => <i>result</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>red-value</i>---an <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_i.htm#integer">integer</a></i> between 0 and 255. + <p><i>green-value</i>---an <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_i.htm#integer">integer</a></i> between 0 and 255. + <p><i>blue-value</i>---an <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_i.htm#integer">integer</a></i> between 0 and 255. + <p><i>result</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_l.htm#list">list</a></i>.</p> + </p> + + <p><b>Description:</b></p> + <p> + Creates a <i>color</i> object with the specified values for red, green, and blue. + </p> + + <p><b>Examples:</b></p> + <p><pre> (make-color 100 100 100) => (:COLOR 100 100 100)</pre></p> + + <p><b>Side Effects:</b> None.</p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#make-attributed-string">make-attributed-string</a></b> + <b><a href="#make-range">make-range</a></b> + <b><a href="#make-font">make-font</a></b> + <b><a href="#make-super">make-super</a></b> + <b><a href="#make-underline">make-underline</a></b> + <b><a href="#make-link">make-link</a></b> + </p> + + <hr> + <p><a id="make-super"><i>Function</i> <b>MAKE-SUPER</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>make-super</b> <i>level</i> => <i>result</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>level</i>---a non-negative <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_i.htm#integer">integer</a></i>. + <p><i>result</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_l.htm#list">list</a></i>.</p> + </p> + + <p><b>Description:</b></p> + <p> + Creates a <i>superscript</i> attribute at the specified <i>level</i>. At level 0, the text is inline with normally attributed text, at each level above 0, the text moves higher and becomes smaller, denoting a superscript. + </p> + + <p><b>Examples:</b></p> + <p><pre> (make-super 1) => (:SUPER 1)</pre></p> + + <p><b>Side Effects:</b> None.</p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#make-attributed-string">make-attributed-string</a></b> + <b><a href="#make-range">make-range</a></b> + <b><a href="#make-font">make-font</a></b> + <b><a href="#make-color">make-color</a></b> + <b><a href="#make-underline">make-underline</a></b> + <b><a href="#make-link">make-link</a></b> + </p> + + <hr> + <p><a id="make-underline"><i>Function</i> <b>MAKE-UNDERLINE</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>make-underline</b> <i>level</i> => <i>result</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>level</i>---a non-negative <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_i.htm#integer">integer</a></i>. + <p><i>result</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_l.htm#list">list</a></i>.</p> + </p> + + <p><b>Description:</b></p> + <p> + Creates an <i>underline</i> attribute with <i>level</i> number of underline strokes. + </p> + + <p><b>Examples:</b></p> + <p><pre> (make-underline 1) => (:UNDERLINE 1)</pre></p> + + <p><b>Side Effects:</b> None.</p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#make-attributed-string">make-attributed-string</a></b> + <b><a href="#make-range">make-range</a></b> + <b><a href="#make-font">make-font</a></b> + <b><a href="#make-color">make-color</a></b> + <b><a href="#make-super">make-super</a></b> + <b><a href="#make-link">make-link</a></b> + </p> + + <hr> + <p><a id="make-link"><i>Function</i> <b>MAKE-LINK</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>make-link</b> <i>url</i> => <i>result</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>url</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_s.htm#string">string</a></i>.</p> + <p><i>result</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_l.htm#list">list</a></i>.</p> + </p> + + <p><b>Description:</b></p> + <p> + Creates a <i>link</i> attribute, pointing to <i>url</i>. + </p> + + <p><b>Examples:</b></p> + <p><pre> (make-link "http://www.spork.org/") => (:LINK "http://www.spork.org/")</pre></p> + + <p><b>Side Effects:</b> None.</p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>See Also:</b></p> + <p> + <b><a href="#make-attributed-string">make-attributed-string</a></b> + <b><a href="#make-range">make-range</a></b> + <b><a href="#make-font">make-font</a></b> + <b><a href="#make-color">make-color</a></b> + <b><a href="#make-super">make-super</a></b> + <b><a href="#make-underline">make-underline</a></b> + </p> + + <hr> + <p><a id="escape-mux-string"><i>Function</i> <b>ESCAPE-MUX-STRING</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>escape-mux-string</b> <i>string</i> => <i>result</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>string</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_s.htm#string">string</a></i>.</p> + <p><i>result</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_s.htm#string">string</a></i>.</p> + </p> + + <p><b>Description:</b></p> + <p> + This function is used to create pre-formatted strings for a MUX. MUXes normally ignore sequences of white space, and error on newlines, ignoring tab markins except as their capacity for white space. You can get around this by injecting %r, %t, and %b for newlines, tab characters, and white space, respectively. This function does that for you. + </p> + + <p><b>Examples:</b></p> + <p><pre> (escape-mux-string "xyzzy plugh") => "xyzzy%bplugh"</pre></p> + + <p><b>Side Effects:</b> None.</p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + + <p><b>Notes:</b></p> + <p> + This function may only be useful for MUSHes. If your MUX escapes strings differently than a MUSH, then you will need a new function. + </p> + + <hr> + <p><a id="map-variables"><i>Function</i> <b>MAP-VARIABLES</b></a></p> + <p><b>Syntax:</b></p> + <p> + <b>map-variables</b> <i>string</i> <i>variable-list</i>=> <i>result-string</i> + </p> + + <p><b>Arguments and Values:</b></p> + <p> + <p><i>string</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_s.htm#string">string</a></i>.</p> + <p><i>variable-list</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_l.htm#list">list</a></i> containing the variable substitutions for <i>string</i>. + <p><i>result-string</i>---a <i><a href="http://www.lispworks.com/reference/HyperSpec/Body/26_glo_s.htm#string">string</a></i>.</p> + </p> + + <p><b>Description:</b></p> + <p> + <b>map-variables</b> returns a <i>string</i> composed by substituting patterns of + the form $<i>number</i>$ from <i>string</i> with those places in <i>variable-list</i>. + So, <code>$1$</code> refers to the first position (<i>i.e., car</i>) of the list + <i>variable-list</i>. + </p> + + <p><b>Examples:</b></p> + <p><pre> + (map-variables "one: $1$ two: $2$ three: $3$" '(1 2 3)) => "one: 1 two: 2 three: 3"</pre></p> + <p><b>Side Effects:</b> None.</p> + + <p><b>Affected By:</b> None.</p> + + <p><b>Exceptional Situations:</b> None</p> + </body> +</html> diff --git a/English.lproj/Moxie Help/pages/lisp-glossary.html b/English.lproj/Moxie Help/pages/lisp-glossary.html new file mode 100644 index 0000000..6f64434 --- /dev/null +++ b/English.lproj/Moxie Help/pages/lisp-glossary.html @@ -0,0 +1,68 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" + "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> +<html lang="en"> + <head> + <title>Lisp Glossary</title> + <meta name="generator" content="Emacs!"> + </head> + + <body> + <h1>Lisp Glossary</h1> + + <dt><strong><a id="asdf">ASDF</a></strong></dt> + <dd><p><em>(abbrev, "Another System Definition Facility"</em> A way to + package a lisp bundle together. See the <a href="#cliki">CLiki</a> + <a href="http://www.cliki.net/asdf" target="new">page</a> for further + details.</p></dd> + + <dt><strong><a id="bjc-utils">bjc-utils</a></strong></dt> + <dd><p>A collection of utilities the author (bjc) finds useful, and so, + in order to facilitate his hacking, he has also included within + Moxie.</p></dd> + + <dt><strong><a id="clhs">CLHS</a></strong></dt> + <dd><p><em>(abbrev, "Common Lisp HyperSpec")</em> The authoritative + reference for the ANSI ratified Common Lisp.<p> + + <p>You may find a version of the HyperSpec online at: + <a href="http://www.lispworks.com/reference/HyperSpec/index.html" + target="new"> + LispWorks</a></p></dd> + + <dt><strong><a id="cliki">CLiki</a></strong></dt> + <dd><p><em>(from "Common Lisp" and "Wiki")</em> A Wiki devoted to + Common Lisp.</p> + + <p>See <a href="http://www.cliki.net/" target="new">http://www.cliki.net/</a></p></dd> + + <dt><strong><a id="cl-ppcre">CL-PPCRE</a></strong></dt> + <dd><p><em>(abbrev, "Common Lisp Portable Perl Compatible Regular Expression")</em> + A Lisp <a href="#package">package</a> with functions to parse and match + with PERL-style Regular Expressions.</p> + + <p>See the <a href="#cliki">CLiki</a> + <a href="http://www.cliki.net/cl-ppcre" target="new">page</a> for + further details.</p></dd> + + <dt><strong><a id="ecl">ECL</a></strong></dt> + <dd><p><em>(abbrev, "Embeddable Common Lisp")</em> Moxie uses ECL for + its lisp sub-system. More information on ECL can be found on the + <a href="http://ecls.sourceforge.net/" target="new">SourceForge + project page</a></p></dd> + + <dt><strong><a id="package">package</a></strong></dt> + <dd><p>Packages are a kind of lisp "library". See the <a href="#clhs">CLHS</a> + <a href="http://www.lispworks.com/reference/HyperSpec/Body/11_.htm" + target="new">Chapter 11.</a></p></dd> + + <dt><strong><a id="repl">REPL</a></strong></dt> + <dd><p><em>(abbrev, "Read, Eval, Print Loop")</em> The main loop responsible + for accepting user input, evaluating the input, and printing the results + of that evaluation. The REPL is often used synonymously with + <a href="#toplevel">"top level."</a></p></dd> + + <dt><strong><a id="toplevel">Top Level</a></strong></dt> + <dd><p>The top-most <a href="#repl">REPL</a>. It is the first loop instantiated + by the lisp sub-system, from which everything else is evaluated.</p></dd> + </body> +</html> diff --git a/English.lproj/Moxie Help/pages/navigation.html b/English.lproj/Moxie Help/pages/navigation.html new file mode 100644 index 0000000..b639388 --- /dev/null +++ b/English.lproj/Moxie Help/pages/navigation.html @@ -0,0 +1,24 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" + "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> +<html lang="en"> +<head> + <title>Navigation</title> + <meta name="generator" content="Emacs!"> +</head> + +<body> + <center><img src="../images/Moxie.png" alt="" width="128" height="128"></center> + <ul> + <li><a href="overview.html" target="contentsFrame">Overview</a></li> + <li><a href="faq.html" target="contentsFrame">Frequently Asked Questions</a></li> + <li><a href="plugin.html" target="contentsFrame">Plugin System</a></li> + <ul> + <li><a href="lisp-functions.html" target="contentsFrame">Plugin Dictionary</a></li> + </ul> + <li><a href="whatsnew.html" target="contentsFrame">What's new</a></li> + <li><a href="bugs.html" target="contentsFrame">Known Bugs</a></li> + <li><a href="todo.html" target="contentsFrame">To Do</a></li> + <li><a href="http://www.kublai.com/~shmit/software/Moxie/" target="new">Website</a></li> + </ul> +</body> +</html> diff --git a/English.lproj/Moxie Help/pages/overview.html b/English.lproj/Moxie Help/pages/overview.html new file mode 100644 index 0000000..a32bb6c --- /dev/null +++ b/English.lproj/Moxie Help/pages/overview.html @@ -0,0 +1,36 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" + "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> +<html lang="en"> + <head> + <title>Overview</title> + <meta name="generator" content="Emacs!"> + </head> + + <body> + <h1>Overview</h1> + <p>Moxie is a client for <a href="glossary.html#mux">MUX</a> systems. Some of its + notable features are:</p> + + <ul> + <li>ANSI color support is supplied via a plug in.</li> + <li>It has trigger, alias, and macro support via the <a href="plugin.html">plugin</a> sub-system.</li> + <li>Lisp-based plugin system, instead of a custom scripting language, so you can write + any kind of plug in you can imagine.</li> + <li>Transparent windows.</li> + <li>Command History via the CMD-Up/Down arrows. This also works in the Lisp REPL.</li> + <li>MUX-formatted pasting, which translates whitespace to %r, %t, %b as appropriate.</li> + <li>Auto-login to servers.</li> + <li>Startup worlds allow you to auto-open worlds when Moxie starts up.</li> + <li>Logging of sessions to plain-text files.</li> + <li>An innovative "World Selector" which allows you to switch between worlds very + quickly, shows status (New Activity, Connected, Disconnected), allowing for:</li> + <li>Clean and simple tab-less design, hearkening back to older MacOS days.</li> + </ul> + + <p>You can create sessions ("<a href="glossary.html#world">Worlds</a>" in Moxie) + which contain all your preferences for a given world, as well as configure + global preferences (such as what worlds to start up when Moxie launches).</p> + + <p>If you want to learn more about any of this, click a topic on the left.</p> + </body> +</html> diff --git a/English.lproj/Moxie Help/pages/plugin.html b/English.lproj/Moxie Help/pages/plugin.html new file mode 100644 index 0000000..1f048c1 --- /dev/null +++ b/English.lproj/Moxie Help/pages/plugin.html @@ -0,0 +1,203 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" + "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> +<html lang="en"> + <head> + <title>Plugin Lifestyle</title> + <meta name="generator" content="BBEdit 6.5"> + </head> + + <body> + <h1><a id="intro">Introduction</a></h1> + <h2>Or: The worlds of MUXing are varied, so why shouldn't my viewer be?</h2> + <p> + Most MUXes are built off very similar codebases and design patters, but + within those similar roots are an infinite and varied number of worlds. + </p> + <p> + In order to cope with the almost maddening variety in MUXing, + programmatically, you have to develop some kind of programming language. + For instance, TinyFugue's trigger's are a simple programming language. + </p> + <p> + So, to allow for the largest amount of flexibility in Moxie, Moxie + includes a full programming language. While inventing one specifically + for Moxie would certainly be the norm, it is not something that should + be valued highly. In fact, by using a standard language, you get a lot + of benefits of useably free code-base. + </p> + <p> + So, Moxie includes an <a href="http://clisp.cons.org/">embedded lisp + interpreter</a>. This gives you the full power of the Lisp language from + within your plugin code. What kind of things you write, and how you want to + interact with Moxie and your MUX are limited only by your imagination. + </p> + <p> + This does mean you'll have to learn Lisp - at least a little - in order + to write any plugins for Moxie, although I will endeavour to keep things + as simple as possible throughout this document. + </p> + + <h1><a id="quickstart">Quick Start</a></h1> + <h2>Or: Just Gimme the Code, and I'll Come Back When I Need You.</h2> + <p> + The simplest plugins are keyword expansions: when you type + "/foobar baz" into Moxie, it will try to trigger keyword expansion for + the keyword "foobar". + </p> + <p> + To register a keyword expander, you first have to write the code + for the expander, then register it with the keyword expansion hook. + all the functions referenced here are exported from the MOXIE + <a href="lisp-glossary.html#package">package</a>. + </p> + <p> + First, we'll create a package for our test plugin, and use the moxie + <a href="lisp-glossary.html#package">package</a>, as well as the + <a href="lisp-glossary.html#bjc-utils">bjc-utils</a> package. + </p> + <pre> + (defpackage test-plugin + (:use :cl :cl-user :moxie :bjc-utils)) + (in-package :test-plugin) + </pre> + <p> + Then we define our expander function. We just want to take a name off + of the argument line, and page them with "hello!". For the sake of + debugging, we also want to print out what we got as the argument + to the lisp <a href="lisp-glossary.html#repl">REPL</a>: + </p> + <pre> + (defun foobar-handler (string) + (format t "foobar-handler got: ~A~%" string) + (map-variables "page $1$ = hello!" + (split string #\Space))) + </pre> + <p> + The function we've defined returns the string from the map-variables + command. This return value is what's sent to the MUX. If we don't want + to send anything to the MUX you can return an empty string ("") or + nil. + </p> + <p> + Now that we have the function defined, we want to register it with + the keyword expansion hook: + </p> + <pre> + (add-keyword 'foobar-handler "foobar") + </pre> + <p> + To test this, first bring up the REPL window so we can see what's + being printed out by the function as it runs. To do this, select + "Lisp REPL" from the "Window" menu. + </p> + <p> + Now, in Moxie, type "/foobar me", and, assuming you're connected + to a MUX, you should get a page from yourself saying, "hello!". + In the REPL window, however, you'll see: + </p> + <pre> + foobar-handler got: me + </pre> + <p> + Which means the handler received the string "me" as the argument + string. + </p> + <p> + If you're curious how the functions map-variables and split work, + in the REPL, type "(documentation 'map-variables 'function)" to view + their documentation. + </p> + <p> + There are other pre-defined triggers that work in a similar fashion. + There is a list of them in the moxie.lisp file in the + <a href="#app-source">resources directory</a>. + </p> + + <h1><a id="app-predefs">Appendix: Pre-defined variables and triggers</a></h1> + <p> + Moxie uses a set of pre-defined symbols to communicate with the lisp + sub-system. Below is a table of symbols, what type they are, and what + they do. + </p> + <table border=1> + <tr> + <td>Name</td> + <td>Type</td> + <td>Description</td> + </tr> + <tr> + <td>moxie::*moxie-result-stream*</td> + <td>stream</td> + <td>The stream for communicating with Moxie.</td> + </tr> + <tr> + <td>moxie::*world*</td> + <td>object</td> + <td>The currently active world-id. This may be 0, if a world hasn't called into + the plugin system.</td> + </tr> + <tr> + <td>moxie::eval-hook</td> + <td>function</td> + <td>Used by Moxie to send data from the REPL window to the + lisp plugin system.</td> + </tr> + <tr> + <td>moxie::input-to-server-hook</td> + <td>function</td> + <td>Used by Moxie to send data to the lisp plugins after receiving + something from the input line.</td> + </tr> + <tr> + <td>moxie::output-from-server-hook</td> + <td>function</td> + <td>Used by Moxie when data is received from the MUX for display + on the screen.</td> + </tr> + <tr> + <td>moxie::keystroke-hook</td> + <td>function</td> + <td>Used by Moxie when a registered keystroke is pressed to call into its + function</td> + </tr> + <tr> + <td>moxie::world-opened-hook</td> + <td>function</td> + <td>Used by Moxie to tell the plugin system a new world has opened.</td> + </tr> + <tr> + <td>moxie::world-closed-hook</td> + <td>function</td> + <td>Used by Moxie to tell the plugin system a world has closed.</td> + </tr> + <tr> + <td>moxie::start-logging-hook</td> + <td>function</td> + <td>Used by Moxie to tell the plugin system it wishes to log transcripts.</td> + </tr> + <tr> + <td>moxie::stop-logging-hook</td> + <td>function</td> + <td>Used by Moxie to tell the plugin system it no longer wishes to log.</td> + </tr> + </table> + + <h1><a id="app-source">Appendix: Sample source code</a></h1> + <p> + You can find definitions for all the built in functions in the Application + bundle: <code>Contents/Resources/*.lisp</code>. The file <code>startlisp</code> + parses the file <code>init-template.lisp</code> and starts the lisp with the parsed + file, loading the rest of the plug in system with it. + </p> + <p> + There are certain hooks in <code>tpl.lisp</code> which the application calls. You + can have a look at them, and even change them if you want, but don't + rename them or Moxie won't work anymore. + </p> + <p> + Also included in the Application Plug-Ins directory are a few pre-supplied plug ins + which you can use as an example. This includes the default logger, numpad movement macros, + and ANSI color support. + </p> + </body> +</html diff --git a/English.lproj/Moxie Help/pages/todo.html b/English.lproj/Moxie Help/pages/todo.html new file mode 100644 index 0000000..4a413de --- /dev/null +++ b/English.lproj/Moxie Help/pages/todo.html @@ -0,0 +1,24 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" + "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> +<html lang="en"> + <head> + <title>To Do</title> + <meta name="generator" content="Emacs!"> + </head> + + <body> + <h1>To Do</h1> + + <ul> + <li>Parenthesis highlighting in the REPL. Programming lisp without this is a + complete pain for larger functions.</li> + <li>Create a better attributed string mechanism for Plug Ins. The current system + works, but is ugly.</li> + <li>Tab completion and indentation in the REPL.</li> + <li>Symbol lookup in the CLHS from the REPL.</li> + <li>Complete documentation.</li> + <li>Clean up the attributed string interface w/regards to hooks. Having to + conditionally extract the string is very annoying.</li> + </ul> + </body> +</html> diff --git a/English.lproj/Moxie Help/pages/whatsnew.html b/English.lproj/Moxie Help/pages/whatsnew.html new file mode 100644 index 0000000..b990505 --- /dev/null +++ b/English.lproj/Moxie Help/pages/whatsnew.html @@ -0,0 +1,83 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" + "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> +<html lang="en"> + <head> + <title>What's New</title> + <meta name="generator" content="Emacs!"> + </head> + + <body> + <h1>What's new</h1> + <h3>Since 0.4</h3> + <ul> + <li>A timer hook now fires every second. You can attach to it by adding + a function to <code>:timer-hook</code>.</li> + <li>Telnet DONT and WONT are handled properly now.</li> + <li>The lisp image includes ASDF and CL-PPCRE, so startup times should be faster + if you use CL-PPCRE in your plugins.</li> + </ul> + + <h3>Since 0.3</h3> + <ul> + <li>ANSI color support is now supplied via a built-in plug in.</li> + <li>You can send a lone enter key press.</li> + <li>Telnet protocol support.</li> + <li>You can clear your screen from the plug in interface now. For convenience, + the command "/clear" will clear your screen, as well as the <code>clear</code> + key on the numeric keypad.</li> + <li>Numpad keybindings have been added via a plug in.</li> + <li>Hooks use the results of the previous hook in a mode if applicable now, to + allow for multiple levels of filter feeding off of each other. This does complicate + things a little more, but it also allows hooks to play nice with each other.</li> + <li>Hooks no longer set arbitrary keywords. Those have been replaced by special + variables which will do the right thing, and greatly simplify plugin code.</li> + <li>Attributed strings changed. You can now set multiple attributes across multiple + ranges of the string.</li> + </ul> + + <h3>Since 0.2:</h3> + <ul> + <li>Moxie now scans for plugins in ~/Library/Moxie, and the usual variations + thereof for Network, Local, and System directories.</li> + <li>There's a new package, CLHS-LOOKUP, which will lookup symbols in the CLHS.</li> + <li>The world view is no longer cleared when reconnecting.</li> + <li>Lisp is now initialized at startup time.</li> + <li>The Lisp system is no longer embedded. You can use any CL system you wish + now. The communications channels have become asynchronous, as well. The lisp + system should never hang Moxie again, although it is still required for its + functioning. You can now also use the built-in debugging features of whichever + lisp you choose.</li> + <li>CLISP is now included as the default lisp implementation. You can get more + information on CLISP at <a href="http://clisp.cons.org/">the website.</a></li> + <li>Logging has been moved into a plugin. You can now enable and disable it + from within plugins, and for convenience, the command "/log [filename]" in + a Moxie window will enable logging to FILENAME, if it exists, otherwise it + will toggle logging to the current log file.</li> + <li>The plug in system now defines "keystroke macros" which run when individual + keys are pressed. See the plug in documentation for further details.</li> + <li>Logging can be enabled and disabled from the plug in system.</li> + <li>The status buffer (the text field next to the lag indicator) can now + be set from the plug in system.</li> + <li>World-local variables are now available in the plug in system via the + <code>world-var</code> function. These variables differ depending upon + which world is calling into the plug in, and can be used to keep state + information. See the plug in documentation for further information.</li> + <li>CL-PPCRE moved into the PlugIns directory.</li> + <li>Plug in documentation updated for all exported functions.</li> + </ul> + + <h3>Since 0.1:</h3> + <ul> + <li>Plugin System is here. The plugins are written in Lisp thanks to + <a href="http://ecls.sourceforge.net/" target="new">ECL.</a> + <a href="http://www.cliki.net/asdf" target="new">ASDF</a> and + <a href="http://www.cliki.net/cl-ppcre" target="new">CL-PPCRE</a> are + also included. See the help file for details.</li> + + <li>Help is now available in the standard place. It's pretty empty at + the moment, but includes some pointers on how to get started with the + plugin system. There is also a sample plugin provided in the application + bundle, in the "PlugIns" directory.</li> + </ul> + </body> +</html> |