<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="dactyl://content/help.xsl"?>

<!DOCTYPE document SYSTEM "dactyl://content/dtd">

<document
    name="tutorial"
    title="&dactyl.appName; Tutorial"
    xmlns="&xmlns.dactyl;"
    xmlns:html="&xmlns.html;">

<h1 tag="tutorial">Quick-start tutorial</h1>

<note>
    This is a quick-start tutorial to help new users get up and running
    in &dactyl.appName;. It is not intended as a full reference explaining all
    features.
</note>

<p>
    If you've started using &dactyl.appName; from scratch (i.e., without any
    customization), you should be looking at this help page in a relatively
    bare-looking window. The menubar, navigation bar, and bookmark bars are hidden.
    In case you missed the notice in the <t>intro</t>, you can
    regain these by issuing the command
</p>

<set opt="go" op="+="><str delim="">mTB</str><k name="CR"/></set>

<p>
    where <k name="CR"/> represents pressing the <k name="Enter" link="false"/>
    or <k name="Return" link="false"/> key. If you're a veteran Vim user, this
    should look familiar.
</p>

<p>
    However, in this author's opinion, the best way to get familiar with
    &dactyl.appName; is to leave these disabled for now. (The above action can
    be reversed with <se opt="go" op="&amp;"/><k name="CR"/>) You can have a
    look at the <o>guioptions</o> help entry for more information on this.
</p>

<h2 tag="modal">&dactyl.appName;'s modal interface</h2>

<p>
    &dactyl.appName;'s power, like Vim's, comes from its modal interface. Keys have
    different meanings depending on which mode the browser is in. &dactyl.appName; has
    several modes, but the 2 most important are <em>Normal</em> mode and
    <em>Command Line</em> mode (see <t>modes</t> for the full picture).
</p>

<p>
    When &dactyl.appName; starts, it is in Normal mode by default. This is probably where
    you will spend the majority of your time.
</p>

<p>
    The other core mode of &dactyl.appName;, Command Line mode, can be entered from
    Normal mode by typing a <k>:</k> (colon). You will frequently see &dactyl.appName;
    commands start with a <k>:</k>, indicating that what follows is a command.
</p>

<p>
    To return to Normal mode from Command Line mode, type <k name="Esc"/>.
    Pressing <k name="Esc"/> will also return you to Normal mode from most
    other &dactyl.appName; modes.
</p>

<h2 tag="getting-help">Getting help</h2>

<p>
    Vim is a great editor but it's not much of a web browser. So even seasoned Vim
    users will probably have to look at &dactyl.appName;'s documentation sooner or later.
    Most of the documentation for &dactyl.appName;'s features are easily found using the
    <ex>:help</ex> command. For example, you can find help on the <ex>:help</ex> command
    by typing
</p>

<code><ex>:help :help<k name="CR"/></ex></code>

<p>
    Similarly, help on configurable options is available with
    <ex>:help '<a>option_name</a>'</ex>. (Note the single quotes
    around the option name as in Vim.) Information on all available
    options is, predictably, <ex>:help options</ex>.
</p>

<p>
    And you can find out about the <k>gt</k> and <k>gT</k> mapping with
</p>

<code>
<ex>:help gt<k name="CR"/></ex>
<ex>:help gT<k name="CR"/></ex>
</code>

<p>
    Finally, in addition to the help system itself, <ex>:listcommands</ex>,
    <ex>:listkeys</ex> and <ex>:listoptions</ex> are useful quick-reference
    commands.
</p>

<h2 tag="living-mouseless">Mouseless</h2>

<em>— or how I learned to stop worrying and love the 80+ buttons I already have.</em>

<p>
    The efficiency of &dactyl.appName;, as with the legendary editor it was inspired by,
    relies on the user being able to keep his fingers on the keyboard where they
    can do the most good. While there are some areas where the mouse is clearly
    superior at, such as GUI design or some games, &dactyl.appName; acts on the
    assumption that a web browser doesn't have to be one of those.
</p>

<p>
    Here are some areas where the mouse is typically considered indisposable, and
    how &dactyl.appName; challenges this preconception.
</p>

<h2 tag="keyboard-scrolling">Scrolling</h2>

<p>
    Scrolling the browser window is done with simple keystrokes:
</p>

<dl>
    <dt><k>j</k>/<k>k</k></dt>
    <dd>
        scroll window down/up by one line, respectively
    </dd>
    <dt><k>h</k>/<k>l</k></dt>
    <dd>
        scroll window left/right
    </dd>
    <dt><k name="C-f"/>/<k name="C-b"/></dt>
    <dd>
        scroll down/up by one page
    </dd>
    <dt><k name="C-d"/>/<k name="C-u"/></dt>
    <dd>
        scroll down/up by 1/2 page
    </dd>
</dl>

<p>
    Your standard buttons (<k name="Up"/>/<k name="Down"/>/<k name="PageUp"/>/<k name="PageDown"/>) will
    also work as expected.
</p>

<h2 tag="history-navigation tab-navigation">History and tabs</h2>

<p>
    History navigation (e.g., <em>Back</em>, <em>Forward</em>) is done similarly to
    scrolling.
</p>

<dl>
    <dt><k>H</k>/<k>L</k></dt>
    <dd>
        move back/forward in the current tab's history
    </dd>
    <dt><k name="C-o"/>/<k name="C-i"/></dt>
    <dd>
        move back/forward in the current tab's jump list
    </dd>
</dl>

<p>
    Move between tabs using these keystrokes which may also be familiar to
    tabbing Vimmers:
</p>

<dl>
    <dt><k>gt</k>/<k name="C-n"/></dt>
    <dd>
        go to the next tab
    </dd>
    <dt><k>gT</k>/<k name="C-p"/></dt>
    <dd>
        go to the previous tab
    </dd>
    <dt><k>g0</k>/<k>g$</k></dt>
    <dd>
        go to the first/last tab
    </dd>
    <dt><k>d</k></dt>
    <dd>
        close the active tab (delete the buffer)
    </dd>
</dl>

<p>
    To open a web page in a new tab, use <ex>:tabopen <a>url</a></ex>. To open a URL in
    the current tab, use <ex>:open</ex>. The Normal mode mappings <k>t</k> and <k>o</k>,
    respectively, map to these commands, so the following pairs of sequences are
    equivalent:
</p>

<code>
<ex>:open my.webmail.com<k name="CR"/></ex>
<k>o</k>my.webmail.com<k name="CR"/>

<ex>:tabopen google.com<k name="CR"/></ex>
<k>t</k>google.com<k name="CR"/>
</code>

<h2 tag="hints-tutorial">Some hints about surfing…</h2>

<p>
    So now you can navigate around in &dactyl.appName;. But wait… how do you <em>open</em> a
    page or tab linked in a web page? How do you <em>click</em> on all those links
    without your tailed friend?
</p>

<p>
    The answer is <t>hints</t>. Activating hints displays a number next to
    every link (or other element, depending on the mode) &dactyl.appName; can
    find. To act on the element (e.g., follow or save a link), simply type
    the number corresponding to the hint.
</p>

<p>
    For text links, there's an additional shortcut; you can type some text
    contained in the link and &dactyl.appName; will search all the links it can find and
    only hint the matching links, further narrowing down the list. If the text you
    type uniquely identifies any given link, &dactyl.appName; will follow that link
    immediately without any further user input.
</p>

<p>
    Whichever way you choose to indicate your target link, once &dactyl.appName; has
    highlighted the link you want, simply hit <k name="CR" link="false"/> to open it.
</p>

<p>
    To activate Hints mode, press either <k>f</k> or <k>F</k>. The lower-case
    <k>f</k> will open the resulting link in the current tab, while the
    upper-case <k>F</k> will open it in a new tab.
</p>

<p>
    Extended hint modes, started by <k>;</k> or <k>g;</k>, provide a richer way
    to interact with various elements, not limited to following links.
</p>

<p>
    To test it, try this link: <link topic="&dactyl.apphome;">&dactyl.appName; Homepage</link>.
    Activate Hints mode with <k>f</k> or <k>F</k> to highlight all currently
    visible links. Then start typing the text of the link. The link should be
    uniquely identified soon, and &dactyl.appName; will open it. Once you're
    done, remember to use <k>H</k> (<em>History Back</em>) or <k>d</k>
    (<em>Delete Buffer</em>) to return here, depending on which key you used to
    activate Hints mode.
</p>

<h2 tag="saving-customization">Saving for posterity—<tt>pentadactylrc</tt></h2>

<p>
    Once you get &dactyl.appName; set up with your desired options, maps, and commands,
    you'll probably want them to be available the next time you open &dactyl.appName;.
    Continuing the Vim theme, this is done with a <tt><t>pentadactylrc</t></tt> file.
</p>

<p>
    To save your current settings and allow them to be loaded automatically
    next time you start &dactyl.appName;, issue the <ex>:mkp</ex> command.
</p>

<p>
    This will create the file <em>$HOME/.pentadactylrc</em> containing your settings.
    It is a simple text file, just like a vimrc file and can be easily
    edited to suit your preferences.
</p>

<h2 tag="quitting-without-menus">Find the exit nearest you</h2>

<p>
    &dactyl.appName; supports all of Vim's classic methods of exiting.
</p>

<dl>
    <dt><ex>:xall</ex></dt>
    <dd>
        quit and save the current browsing session for next time; the default
    </dd>
    <dt><ex>:exit</ex></dt>
    <dd>
        quit <em>without</em> saving the session
    </dd>
    <dt><k>ZZ</k></dt>
    <dd>
        Normal mode mapping equivalent to <ex>:xall</ex>
    </dd>
    <dt><k>ZQ</k></dt>
    <dd>
        Normal mode mapping equivalent to <ex>:exit</ex>
    </dd>
</dl>

<h2 tag="whither-&dactyl.host;">Where did &dactyl.host; go?</h2>

<p>
    You might feel pretty disoriented now. Don't worry. This is still
    &dactyl.host; underneath. Here are some ways &dactyl.appName; allows
    &dactyl.host; to shine through (see the <ex>:help</ex> for these commands
    and mappings for more information on how to make the best use of them):
</p>

<dl>
    <dt><ex>:dialog</ex></dt>
    <dd>
        To access some of &dactyl.host;'s many dialog windows, you can use the
        <ex>:dialog</ex> command. See <ex>:help :dialog</ex>.
    </dd>
    <dt><ex>:bmarks</ex></dt>
    <dd>
        &dactyl.appName; provides a new interface to bookmarks, but they're still your
        standard &dactyl.host; bookmarks under the hood. <ex>:bmark</ex> will add a new
        bookmark, while <ex>:bmarks</ex> will list the bookmarks currently defined.
    </dd>
    <dt><ex>:history</ex></dt>
    <dd>
        It's exactly what it sounds like. This command will display a colorized,
        scrollable and clickable list of the locations in &dactyl.appName;'s history.
    </dd>
    <dt><ex>:emenu</ex></dt>
    <dd>
        Access the &dactyl.host; menus through the &dactyl.appName; command line.
    </dd>
</dl>

<p>
    Feel free to explore at this point. If you get hopelessly lost, just type
    <ex>:help<k name="CR"/></ex> and click the <em>Quick-start tutorial</em>
    link to return here.
</p>

<!-- TODO: other sections? -->

<h2 tag="removal">Get me out of here!</h2>

<p>
    If you've given it a fair shot and determined that &dactyl.appName; is not
    for you after all, you might want to disable it.
</p>

<p>
    The &dactyl.appName; way to do this is with the command <ex>:addons</ex>,
    which displays a list of all installed extensions. You can use hints or
    mouse to click on <em>Off</em> or <em>Del</em> to disable or remove
    &dactyl.appName;, respectively.
</p>

<p>
    Alternatively, you can do this the old-fashioned way: re-enable the menubar,
    as above, with <se opt="go" op="+=">m</se>, and select <em>Add-ons</em>
    from the <em>Tools</em> menu. You can also use <ex>:dialog addons</ex> to
    get to the interface.
</p>

<h2 tag="support">I'm interested… but lost!</h2>

<p>
    &dactyl.appName; has an energetic and growing user base. If you've run into
    a problem that you can't seem to solve with &dactyl.appName;, or if you
    think you might have found a bug, please let us know! There is support
    available on the <link topic="&dactyl.list.href;">mailing list</link>
    (mirrored on <link topic="http://dir.gmane.org/gmane.comp.mozilla.firefox.pentadactyl">Gmane</link>)
    or in the <link topic="irc://irc.oftc.net/pentadactyl">#pentadactyl</link> IRC
    channel on <link topic="http://oftc.net/">OFTC</link>. See also
    <t>contact</t>.
</p>

<p>
    If you have any feature requests or (even better) offers to help, we'd love to
    hear from you as well. Developers work on &dactyl.appName; whenever possible, but we
    are neither infinite nor omnipotent; please bear with us. If you can't wait for
    us to get around to it, rest assured patches are welcome! See the
    <t>developer</t> page for more information.
</p>

</document>

<!-- vim:se sts=4 sw=4 et: -->
