<p>Factor is a programming language with postfix syntax. The Factor plugin for <ahref="http://www.jedit.org">jEdit</a> makes for a more pleasant programming experience -- it allows you to navigate Factor source very rapidly, running unit tests and reloading code with ease. Word definitions become a pleasure to write with on the fly parsing, completion, and stack effect checking. For information on Factor itself, including extensive documentation in PDF format, see the Factor web site: <ahref="http://factor.sourceforge.net">http://factor.sourceforge.net</a>. </p>
<p>The Factor plugin needs to communicate with a running Factor instance. This is configured in <b>Plugins</b>><b>Plugin Options</b>><b>Factor</b>. There are two options when it comes to setting up the external instance:</p>
<li>The plugin can launch the Factor process itself. In this case, you supply a full path to the Factor runtime, as well as a path to the image file.</li>
<li>The plugin can also connect to a Factor instance running on another machine. In this case, you will need to supply the host name and port number. Then you must launch Factor on the remote machine and enter the phrase following in the listener:</li>
<p>If you want to use a port number other than 9999, you must specify it above.</p>
<h3>Keyboard shortcuts</h3>
<p>You can install a set of keyboard shortcuts for the various commands provided by the Factor plugin by invoking <b>Plugins</b>><b>Factor</b>><b>Install default keymap</b>. These shortcuts are all prefixed with <b>A+</b>. While they are not set by the default, the remainder of the guide refers to these shortcuts.</p>
<p>The plugin embeds a Factor listener in the Console for quick testing of code snippets while editing. The listener supports styled text and hyperlinks; for example when using the <code>see</code> word to look at a word definition.</p>
<p>The embedded listener can be accessed by selecting the <b>Factor</b> shell in the Console plugin. The following commands can be used to send text from jEdit to the listener:</p>
<ul>
<li><b>Run current file (A+f f)</b></li>
<li><b>Evaluate selection (A+f e s)</b></li>
<li><b>Evaluate word definition (A+f e e)</b></li>
<p>Factor files are parsed in a background thread and checked for errors, using the framework provided by the SideKick plugin. Errors are underlined in the text area (and listed in the <b>ErrorList</b> plugin window). Words are looked up in the external Factor instance, and you are notified of typos immediately.</p>
<p>The navigation features enable you to move around in a project and locate definitions.</p>
<p>The <b>Edit word (A+f g)</b> command opens a dialog box where the name of a word can be typed -- while the word is being typed, the possible completions is instantly updated, and selecting one opens the source file containing the definition of that word:</p>
<p>To be able to edit definitions of standard library words, add a phrase like the following to your <code>$HOME/.factor-rc</code>:</p>
<preclass="nice-box"><SPANCLASS="syntax13">"</SPAN><SPANCLASS="syntax13">/home/slava/Factor/</SPAN><SPANCLASS="syntax13">"</SPAN><SPANCLASS="syntax13">"</SPAN><SPANCLASS="syntax13">resource-path</SPAN><SPANCLASS="syntax13">"</SPAN> set
<p>The <b>Infer word at caret (A+f i i)</b> command shows a popup with the inferred stack effect. Note that not all words have an inferred stack effect. This command is great for debugging!</p>
<p>Factor words are separated into vocabularies, and each source file must list which vocabularies it uses. A common error is a missing <code>USING:</code> declaration. The <b>Use word at caret (A+f u)</b> command searches for the word at the caret in all vocabularies, and adds a <code>USE:</code> declaration for the vocabulary to the start of the source file -- in this case, <code>ifte</code> is found in the <code>kernel</code> vocabulary, and the parse error instantly goes away:</p>
<p>Invoking <b>Plugins</b>><b>SideKick</b>><b>Show Completion Popup</b> displays a popup of possible completions for the word at the caret -- bind this to <code>C+SPACE</code> for quick access. Inserting a call to a word via a completion popup automatically adds a <code>USING:</code> declaration, if necessary.</p>
<p>The <b>Extract word</b> command can only be invoked if there is a selection. It asks for a new word name, replaces the selection with a call to the word, and adds a new colon definition directly above the current definition.</p>