The tutor
The tutor as the editor shows it (Tutor, or SPC h t).
PARDES TUTOR
This pane is +Tutor, a copy: edit it freely; there is no need to
Save it (a bare Save asks for a path to write a copy to).
`Del` in its tag closes it; once you have edited it, `Del` refuses
once and the second `Del` discards. `Tutor` or SPC h t opens a
fresh copy.
The guide (docs/typ/guide.typ) explains; this is the hands-on part.
Each lesson is a few things to do, then names its guide section.
Words in backticks, like `Save`, are builtins.
`Exec` (middle-click) runs the builtin a word names, or else runs it as a
shell line; `Look` (right-click) opens what the text names, or else finds
it. Type a builtin in any tag and `Exec` it. Lines starting with
"| " are tags.
Press j until you reach part 1.
=================================================================
= PART 1 — MODES =
=================================================================
1. The box left of this pane's tag is blank, so you are in
NORMAL mode. Press i: it shows ^ (INSERT). Type a word, then
Esc: blank again.
2. Press Esc once more, in NORMAL: the keyboard goes back to the
pane you were in before (not what helix does). Come back with
Esc again.
3. Press Alt-n: a terminal opens, in NORMAL mode, and pardes types
ls at its first prompt. Press Ctrl-b: its box shows $ (RAW), and
keys go to the shell. At its empty prompt, Esc brings you back
here; the terminal stays $.
-> Guide: Modes
=================================================================
= PART 2 — THE MOUSE =
=================================================================
1. `Look` (right-click) the word mouse in this sentence: the next mouse is
selected.
2. `Exec` (middle-click) the word `Help` here: the list of keys opens.
Close it with `Del` in its tag.
3. Select a word with left-click, keep left-click down, click middle-click: it is cut. Still
holding left-click, click right-click: it comes back. That pair is a copy.
4. Put the cursor on `Help` and press Tab: `Exec`, as middle-click. Enter
is `Look`, as right-click.
-> Guide: The mouse
=================================================================
= PART 3 — TAGS =
=================================================================
The workspace tag, a column's, and a file's, a terminal's, a PDF's
and an image's:
| Newcol Joincol Find Grep Help Changelog Tutor Dump Themes Config Debug Exit
| New Tty Find Grep Joincol Delcol
| Save Tty Collapse Del
| Tty Save Mode Filter Collapse Del
| Tty PdfSections PdfTint Collapse Del
| Tty Collapse Del
1. Press : here: the keyboard goes to this pane's tag, on `Save`.
Press A, type a space and Help, press Esc, then Tab: `Help`
runs and its list takes the keyboard. Esc brings you back.
2. Click `Collapse` in this tag: the pane folds to its tag. Click
it again.
3. Drag the box left of the tag down a few rows, then back.
-> Guide: Tags
=================================================================
= PART 4 — WHERE COMMANDS RUN AND PANES GO =
=================================================================
1. Type date on a line here and `Exec` it: a command pane
shows its output, and the keyboard stays here.
2. `Exec` `New` in this column's tag: a scratch opens and
takes the keyboard.
3. Ctrl-w h, j, k, l move the keyboard between panes; Ctrl-o and
Ctrl-i walk back and forward through where you have been.
Ctrl-i needs the kitty keyboard protocol or the GUI; elsewhere it
is Tab, so use SPC j i (and SPC j o), or the mouse's side buttons.
4. `Del` the scratch and the command pane, each in its own tag.
-> Guide: Where commands run and panes go
=================================================================
= PART 5 — LOOK =
=================================================================
1. `Look` :20 here: the cursor goes to line 20 of this pane.
2. Drag across :/^=.*UNSAVED/ with right-click held: `Look` takes exactly
what you swept, a regex here, and goes to Part 7's heading.
3. Press /, type keys, press Enter: a +Search lists the lines with
keys. n moves into it and walks its rows; Enter on a row goes
to that line here.
-> Guide: Look
=================================================================
= PART 6 — TERMINALS =
=================================================================
1. In the terminal from part 1 (or Alt-n again), its ls has listed
the directory. Press Ctrl-b to NORMAL, put the cursor on a name
with j, k and w, select it with m i W, and yank it with y.
2. Come back here (Ctrl-w, or click) and press p: the name is
pasted; yank and paste are shared by every pane.
3. `Del` the terminal: it closes with its shell.
-> Guide: Terminals
=================================================================
= PART 7 — UNSAVED PANES =
=================================================================
1. `Exec` `New`, type a few hundred characters, then `Del` it:
it refuses once, saying so on the message row. `Del` again
discards it.
2. To quit pardes, press SPC q or `Exec` `Exit` in the
workspace tag; it refuses once over unsaved panes the same way.
-> Guide: Unsaved panes
=================================================================
= PART 8 — SESSIONS AND CONFIG =
=================================================================
1. `Config` (SPC f c) opens your startup file: a builtin a line,
run at start.
2. In a shell, pardes --detach=work starts a session with no screen;
pardes --attach=work shows it; `Detach` (SPC s D) leaves it
running.
-> Guide: Sessions, Config
=================================================================
= PART 9 — THE KEYS (helix-style modal) =
=================================================================
Same core as helix: a block cursor you move with h/j/k/l, motions
that SELECT what they cross, and an edit that acts on the
selection. There is no verb+noun: the motion already selected, so
wd is what dw was in vim.
PRACTICE BLOCKS: the "# keys:" line lists keystrokes (esc, enter
and bs are those keys; anything else types each character). Do them
on the "# before" lines and you should get "# after".
-----------------------------------------------------------------
= 9.1 MOTION AND COUNTS =
-----------------------------------------------------------------
k h left, l right, j down, k up (also arrows)
h l w/b/e word forward/back/end (W/B/E long)
j 0 line start, gl line end, ^ first non-blank
gg first line, ge START of the last line
f/F/t/T find a character forward/back
Bare G does NOTHING; a count first (5G) goes to that line. $ is not
line end: it keeps the selections a shell command succeeds on.
# keys: l l l
# before
abcdef
# after
abcdef
3l moves three: a number typed FIRST is a count. The motions,
f/F/t/T and Alt-., gg/gj/gk, x, o/O, > <, p/P, R, Ctrl-a/Ctrl-x,
C ( ), q and . take one; any other key swallows it (3d deletes
once, 3i types once). 0 is always line start; Ctrl-d/u/f ignore
counts.
# keys: 3 l i Z esc
# before
abcdef
# after
abcZdef
-----------------------------------------------------------------
= 9.2 ENTERING INSERT =
-----------------------------------------------------------------
i at the cursor. a after it. I first non-blank. A end of line.
o open below. O open above. Esc returns to NORMAL.
# keys: i X esc
# before
abc
# after
Xabc
# keys: o line2 esc
# before
line1
# after
line1
line2
-----------------------------------------------------------------
= 9.3 MOTIONS SELECT =
-----------------------------------------------------------------
w/b/e and f/F/t/T leave a SELECTION behind them, so i after a
motion types at the selection's START. ; collapses the selection
to the cursor first; w left the cursor on the space.
# keys: w i Z esc
# before
one two
# after
Zone two
# keys: w ; i Z esc
# before
one two
# after
oneZ two
-----------------------------------------------------------------
= 9.4 SELECT AND EDIT =
-----------------------------------------------------------------
x select the LINE (again: one more)
v extend by characters, then move
d delete the selection c change it y yank it
p / P paste after / before
u undo U redo
> < indent / outdent Ctrl-a / Ctrl-x increment / decrement
# keys: x c typed esc
# before
replace me
# after
typed
-----------------------------------------------------------------
= 9.5 THE REST, IN ONE PLACE =
-----------------------------------------------------------------
s / S regex, one cursor per match, previewing as you type;
C , ( ) Alt-s Alt-- Alt-_ _ work the resulting LIST
m i / m a textobjects: w W p, the bracket pairs, the quotes
m s/r/d surround add / replace / delete; m m the match
] p, [ p step by paragraph; ] d, [ d by diagnostic
] space a blank line below; [ space above
| filter every selection through the shell
/ case-insensitive SUBSTRING search, one hit a line; the
regex lives on s and S
n / N the next/previous text `Look` would open, as above
Ctrl-c comment or uncomment the lines
VIEWPORT
z t, z z, z b scroll the cursor to the top / centre / bottom
z j, z k scroll a line, the cursor pushed along
Ctrl-d/u half a page down / up
Ctrl-f a page down. Ctrl-b pages up in a file; in a
terminal it is the RAW toggle.
LANGUAGE KEYS, once a server is installed (see setup): g d
definition, g r references, SPC l k hover, SPC l r rename, SPC l i
what is running, ] d diagnostics, = format.
-----------------------------------------------------------------
= 9.6 SPC — THE LEADER =
-----------------------------------------------------------------
SPC f s is `Save`: nearly every builtin has a key path as well as
a name. What you have typed shows on the message row; Esc, or a key
that leads nowhere, abandons it.
SPC ? `Help`: every builtin and its keys
SPC d `Del` SPC q `Exit`
SPC f s `Save` SPC f f `Find` SPC f n `New`
SPC y yank to the clipboard SPC p paste from it
SPC w h focus left (and j, k, l)
SPC j j `Last` SPC j o / SPC j i back / forward
SPC s a `Attach` SPC s D `Detach`
SPC t ... the toggles SPC l ... the language
SPC h t this tutor
-> Guide: Keys
-> Every helix key: https://docs.helix-editor.com/keymap.html
=================================================================
= PART 10 — SCRIPTING =
=================================================================
Every session is a virtual filesystem, served over 9P: a program that
opens files IS an extension.
9ns --mntgen mount every session (9ns is cloud9's)
m=$PARDES_MOUNT the session, under 9ns
cat $m/index a line per pane
n=$(cat $m/pane/new) a pane of your own
echo notes.txt:12 > $m/pane/$n/look a `Look` in it
echo Save > $m/pane/3/ctl a builtin on pane 3
While a program holds a pane's event file open, each `Exec` and
`Look` in that pane comes to it instead of acting, and writing one
back makes pardes perform it: arbitrary command execution by
design. The socket sits in your private runtime directory.
-> The Scripting chapter (docs/typ/scripting.typ)
=================================================================
= SUMMARY =
=================================================================
MODES blank NORMAL, ^ INSERT, $ RAW; each pane keeps its own
Esc in NORMAL goes back a pane (the guide's Modes table)
Ctrl-b toggles RAW and NORMAL
MOUSE L select/focus M `Exec` R `Look`
hold left, click middle cut hold left, click right paste both in turn: copy
hold middle, click left `Exec` the middle word with the left selection
keyboard: Enter = `Look`, Tab = `Exec`
PANES Ctrl-w h/j/k/l focus a neighbour (NORMAL mode)
Ctrl-o / Ctrl-i jump history back / forward
(SPC j o / SPC j i where Ctrl-i is Tab)
Alt-n new terminal Alt-c pane into a new column
KEYS h j k l w b e 0 gl ^ gg ge f F t T v x d c y p
i a I A o O u undo U redo
motions SELECT: i types at the selection's start, and
; collapses first
bare G does nothing; ge is the START of the last line
s / S regex cursors; m i/a textobjects; m s/r/d surround
/ is a case-insensitive SUBSTRING search, not a regex
SPC is the leader (SPC ? is `Help`)
vs HELIX selection is LINE-first (x), v for characters; / is a
substring search; n/N walk what `Look` would open.
vs VIM no verb+noun: the motion already selected, so wd is
what dw was; Esc goes back a pane; bare G does nothing.
vs BOTH a terminal is just a pane, and the session can outlive
the terminal that is showing it.
Open this tutor again: `Exec` `Tutor` in the top tag, or
SPC h t. `Exit` in the top tag quits everything; `Kill` only stops
commands.