More documentation improvements
[geiser.git] / doc / repl.texi
blob3b35e49dc3aba9fcd870a426943f550eca951254
1 @node The REPL, Between the parens, Installation, Top
2 @chapter The REPL
3 @anchor{quick-start}
4 If you've followed the indications in @ref{Setting it up}, your Emacs is
5 now ready to start playing.  Otherwise, i'll wait for you: when you're
6 ready, just come back here and proceed to the following sections.
8 @menu
9 * Starting the REPL::
10 * First aids::
11 * Switching context::
12 * Completion and error handling::
13 * Autodoc and friends::
14 * Customization and tips::
15 @end menu
17 @node Starting the REPL, First aids, The REPL, The REPL
18 @section Starting the REPL
20 @cindex REPL
21 To start a Scheme REPL (meaning, a Scheme process offering you a
22 Read-Eval-Print Loop), Geiser provides the generic interactive command
23 @command{run-geiser}.  If you run it (via, as is customary in Emacs,
24 @kbd{M-x run-geiser}, you'll be saluted by a prompt asking which one of
25 the supported implementations you want to launch---yes, you can stop the
26 asking, see @altr{active-implementations,below,Customization and tips}.
27 Tabbing for completion will offer you, as of this writing, @code{guile}
28 and @code{racket}.  Just choose your poison, and a new REPL buffer will
29 pop-up.
31 @imgc{repls}
33 If all went according to plan, you'll be facing an
34 implementation-dependent banner, followed by an interactive prompt.
35 Going according to plan includes having the executable of the Scheme you
36 chose in your path. If that's not the case, you can tell Emacs where it
37 is, as described in @altr{impl-binary,a moment,Customization and tips}.
38 Returning to our REPL,
39 the first thing to notice is that the funny prompt is telling you your
40 current module: its name is the part just after the @@ sign (in Guile,
41 that means @code{guile-user}, while Racket's top namespace doesn't have
42 a name; cf. discussion in @altr{Switching context,,Switching context}).
43 Other than that, this is
44 pretty much equivalent to having a command-line interpreter in a
45 terminal, with a bunch of add-ons that we'll be reviewing below.  You can
46 start typing sexps right there: Geiser will only dispatch them for
47 evaluation when they're complete, and will indent new lines properly
48 until then.  It will also keep track of your input, maintaining a history
49 file that will be reloaded whenever you restart the REPL.
51 @subsubheading Connecting to an external Scheme
52 @cindex remote REPL
53 @cindex connect to server
54 There's an alternative way of starting a Geiser REPL: you can connect to
55 an external Scheme process, provided it's running a REPL server at some
56 known port.  How to make that happen depends on the Scheme implementation.
58 @cindex Guile's REPL server
59 If you use Guile, you just need to start your Guile process (possibly
60 outside Emacs) passing to it the flag @code{--listen}.  This flag accepts
61 an optional port as argument (as in @code{--listen=1969}), if you don't
62 want to use the default.
64 @cindex Racket's REPL server
65 In Racket, you have to use the REPL server that comes with Geiser.  To
66 that end, put Geiser's Racket @file{scheme} directory in Racket's
67 collection search path and invoke @code{start-geiser} (a procedure in
68 the module @code{geiser/server}) somewhere in your program, passing it
69 the desired port.  This procedure will start the REPL server in a
70 separate thread.  For an example of how to do that, see the script
71 @file{bin/geiser-racket.sh} in the source distribution, or, if you've
72 compiled Geiser, @file{bin/geiser-racket-noinst} in the build directory,
73 or, if you've installed Geiser, @file{geiser-racket} in
74 @file{<installation-prefix>/bin}.  These scripts start a new interactive
75 Racket that is also running a REPL server (they also load the errortrace
76 library to provide better diagnostics, but that's not strictly needed).
78 With your external Scheme process running and serving, come back to
79 Emacs and execute @kbd{M-x geiser-connect}, @kbd{M-x connect-to-guile}
80 or @kbd{M-x connect-to-racket}.  You'll be asked for a host and a port,
81 and, voila, you'll have a Geiser REPL that is served by the remote
82 Scheme process in a dedicated thread, meaning that your external program
83 can go on doing whatever it was doing while you tinker with it from
84 Emacs.  Note, however, that all Scheme threads share the heap, so that
85 you'll be able to interact with those other threads in the running
86 Scheme from Emacs in a variety of ways.  For starters, all your
87 (re)definitions will be visible everywhere.  That's dangerous, but will
88 come in handy when you need to debug your running web server.
90 @cindex remote connections
91 The connection between Emacs and the Scheme process goes over TCP, so it
92 can be as remote as you need, perhaps with the intervention of an SSH
93 tunnel.
95 @node First aids, Switching context, Starting the REPL, The REPL
96 @section First aids
98 @img{repl-menu, right}
99 @cindex REPL commands
100 A quick way of seeing what else Geiser's REPL can do for you, is to
101 display the corresponding entry up there in your menu bar.  No, i don't
102 normally use menus either; but they can come in handy until you've
103 memorized Geiser's commands, as a learning device.  And yes, i usually
104 run Emacs inside a terminal, but one can always use
105 @uref{http://www.emacswiki.org/emacs/LaCarte, La Carte} to access the
106 menus in a convenient enough fashion.
108 Or just press @kbd{C-h m} and be done with that.
110 Among the commands at your disposal, we find the familiar input
111 navigation keys, with a couple twists.  By default, @kbd{M-p} and
112 @kbd{M-n} are bound to @i{matching} items in your input history.  That
113 is, they'll find the previous or next sexp that starts with the current
114 input prefix (defined as the text between the end of the prompt and your
115 current position, a.k.a.  @dfn{point}, in the buffer).  For going up and
116 down the list unconditionally, just use @kbd{C-c M-p} and @kbd{C-c M-n}.
117 In addition, navigation is sexp-based rather than line-based.
119 There are also a few commands to twiddle with the Scheme process.
120 @kbd{C-c C-q} will gently ask it to quit, while @kbd{C-u C-c C-q} will
121 mercilessly kill the process (but not before stowing your history in the
122 file system).  Unless you're using a remote REPL, that is, in which case
123 both commands will just sever the connection and leave the remote
124 process alone.  If worse comes to worst and the process is dead, @kbd{C-c
125 C-z} will restart it.  However, the same shortcut, issued when the REPL is
126 alive, will bring you back to the buffer you came from, as explained
127 in @altr{switching-repl-buff,this section,The source and the REPL}.
129 The remaining commands are meatier, and deserve sections of their own.
131 @node Switching context, Completion and error handling, First aids, The REPL
132 @section Switching context
134 @cindex current module, in REPL
135 @cindex ,enter vs. enter!
136 In tune with Geiser's @alt{@ref{current-module,,modus operandi},modus
137 operandi}, evaluations in the REPL take place in the namespace of the
138 current module.  As noted above, the REPL's prompt tells you the name of
139 the current module.  To switch to a different one, you can use the
140 command @command{switch-to-geiser-module}, bound to @kbd{C-c C-m}.
141 You'll notice that Geiser simply uses a couple of meta-commands provided
142 by the Scheme REPL (the stock @command{,m} in Guile and the
143 (geiser-defined) @command{,enter} in Racket), and that it doesn't even
144 try to hide that fact.  That means that you can freely use said native
145 ways directly at the REPL, and Geiser will be happy to oblige.  In
146 Racket, @command{,enter} works like Racket's standard @code{enter!}
147 form, but you can also provide a path string as its argument (e.g.,
148 @command{,enter "/tmp/foo.rkt"} is equivalent to @command{,enter (file
149 "/tmp/foo.rkt")}).  Like @code{enter!}, @command{,enter} accepts also
150 module names (as in, say, @command{,enter geiser/main}).  As mentioned,
151 Guile's @command{,m} is used @i{as is}.
153 @cindex current module, change
154 Once you enter a new module, only those bindings visible in its
155 namespace will be available to your evaluations.  All Schemes supported
156 by Geiser provide a way to import new modules in the current namespace.
157 Again, there's a Geiser command, @command{geiser-repl-import-module}, to
158 invoke such functionality, bound this time to @kbd{C-c C-i}.  And, again,
159 you'll see Geiser just introducing the native incantation for you, and
160 you're free to use such incantations by hand whenever you want.
162 One convenience provided by these two Geiser commands is that completion
163 is available when introducing the new module name, using the
164 @kbd{@key{TAB}} key.  Pressing it at the command's prompt will offer you
165 a prefix-aware list of available module names.
167 @imgc{mod-completion}
169 Which brings me to the next group of REPL commands.
171 @node Completion and error handling, Autodoc and friends, Switching context, The REPL
172 @section Completion and error handling
174 @cindex completion, at the REPL
175 We've already seen Geiser completion of module names in action at the
176 minibuffer.  You won't be surprised to know that it's also available at
177 the REPL buffer itself.  There, you can use either @kbd{C-.} or
178 @kbd{M-`} to complete module names, and @kbd{@key{TAB}} or
179 @kbd{M-@key{TAB}} to complete identifiers.  Geiser will know what
180 identifiers are bound in the current module and show you a list of those
181 starting with the prefix at point.  Needless to say, this is not a static
182 list, and it will grow as you define or import new bindings in the
183 namespace at hand.  If no completion is found, @kbd{@key{TAB}} will try
184 to complete the prefix after point as a module name.
186 REPL buffers use Emacs' compilation mode to highlight errors reported by
187 the Scheme interpreter, and you can use the @command{next-error} command
188 (@kbd{M-g n}) to jump to their location.  By default, every time you
189 enter a new expression for evaluation old error messages are forgotten,
190 so that @kbd{M-g n} will always jump to errors related to the last
191 evaluation request, if any.  If you prefer a not-so-forgetful REPL, set
192 the customization variable @code{geiser-repl-forget-old-errors-p} to
193 @code{nil}.  Note, however, that even when that variable is left as
194 @kbd{t}, you can always jump to an old error by moving to its line at
195 the REPL and pressing @kbd{RET}.  When your cursor is away from the last
196 prompt, @kbd{TAB} will move to the next error in the buffer, and you can
197 use @kbd{BACKTAB} everywhere to go to the previous one.
199 @node Autodoc and friends, Customization and tips, Completion and error handling, The REPL
200 @section Autodoc and friends
202 Oftentimes, there's more you'll want to know about an identifier
203 besides its name: What module does it belong to?  Is it a procedure and,
204 if so, what arguments does it take?  Geiser tries to help you answering
205 those questions too.
207 @cindex autodoc, in the REPL
208 Actually, if you've been playing with the REPL as you read, you might
209 have notice some frantic activity taking place in the echo area every
210 now and then.  That was Geiser trying to be helpful (while, hopefully,
211 not being clippy), or, more concretely, what i call, for want of a
212 better name, its @dfn{autodoc} mode.  Whenever it's active (did you
213 notice that @i{A} in the mode-line?), Geiser's gerbils will be scanning
214 what you type and showing (unless you silence them with @kbd{C-c C-d C-a})
215 information about the identifier nearest to point.
217 @imgc{repl-autodoc}
219 If that identifier corresponds to a variable visible in the current
220 namespace, you'll see the module it belongs to and its value.  For
221 procedures and macros, autodoc will display, instead of their value, the
222 argument names (or an underscore if Geiser cannot determine the name
223 used in the definition).  Optional arguments are surrounded by
224 parentheses.  When the optional argument has a default value, it's
225 represented by a list made up of its name and that value.  When the
226 argument is a keyword argument, its name has ``#:'' as a prefix.
228 @cindex help on identifier
229 If that's not enough documentation for you, @kbd{C-c C-d d} will open a
230 separate documentation buffer with help on the symbol at point.  This
231 buffer will contain implementation-specific information about the
232 identifier (e.g., its docstring for Guile, or its contract, if any, for
233 Racket), and a handy button to open the corresponding manual entry for
234 the symbol, which will open an HTML page (for Racket) or the texinfo
235 manual (for Guile).
237 @cindex module exports
238 @anchor{repl-mod} Geiser can also produce for you a list, classified by
239 kind, of the identifiers exported by a given module: all you need to do
240 is press @kbd{C-c C-d m}, and type or complete the desired module's
241 name.
243 @imgc{repl-mod}
245 The list of exported bindings is shown, again, in a buffer belonging to
246 Geiser's documentation browser, where you have at your disposal a bunch
247 of navigation commands listed in @altr{Documentation browser,our
248 cheat-sheet,Documentation browser}.  We'll have a bit more to say about
249 the documentation browser in
250 @altr{doc-browser,a later section,Documentation helpers}.
252 @cindex jump, at the REPL
253 If that's still not enough, Geiser can jump, via @kbd{M-.}, to the
254 symbol's definition.  A buffer with the corresponding file will pop up,
255 with its point resting upon the identifier's defining form.  When you're
256 done inspecting, @kbd{M-,} will bring you back to where you were.  As we
257 will see, these commands are also available in Scheme buffers.  @kbd{M-.}
258 also works for modules: if your point is on an unambiguous module name,
259 the file where it's defined will be opened for you.
261 @node Customization and tips,  , Autodoc and friends, The REPL
262 @section Customization and tips
264 @cindex REPL customization
265 The looks and ways of the REPL can be fine-tuned via a bunch of
266 customization variables.  You can see and modify them all in the
267 corresponding customization group (by using the menu entry or the good
268 old @kbd{M-x customize-group geiser-repl}), or by setting them in your
269 Emacs initialisation files (as a rule, all knobs in Geiser are tunable
270 this way: you don't need to use customization buffers if you don't like
271 them).
273 I'm documenting below a proper subset of those settings, together with
274 some related tips.
276 @subsubheading Choosing a Scheme implementation
277 @cindex scheme implementation, choosing
278 @anchor{choosing-impl}
279 Instead of using the generic @command{run-geiser} command, you can start
280 directly your Scheme of choice via @command{run-racket} or
281 @command{run-guile}.  @anchor{active-implementations} In addition, the
282 variable @code{geiser-active-implementations} contains a list of those
283 Schemes Geiser should be aware of.  Thus, if you happen to be, say, a
284 racketeer not to be beguiled by other schemes, you can tell Geiser to
285 forget about the richness of the Scheme ecosystem with something like:
287 @example
288 (setq geiser-active-implementations '(racket))
289 @end example
291 @noindent
292 in your initialisation files.
294 @cindex scheme binary
295 @cindex scheme executable path
296 @anchor{impl-binary} When starting a new REPL, Geiser assumes, by
297 default, that the corresponding Scheme binary is in your path.  If that's
298 not the case, the variables to tweak are @code{geiser-guile-binary} and
299 @code{geiser-racket-binary}, which should be set to a string with the
300 full path to the requisite binary.
302 @cindex scheme load path
303 @cindex scheme init file
304 @cindex GUILE_LOAD_PATH
305 @cindex PLTCOLLECTS
306 You can also specify a couple more initialisation parameters.  For Guile,
307 @code{geiser-guile-load-path} is a list of paths to add to its load path
308 when it's started, while @code{geiser-guile-init-file} is the path to an
309 initialisation file to be loaded on start-up.  The equivalent variables
310 for Racket are @code{geiser-racket-collects} and
311 @code{geiser-racket-init-file}.
313 @subsubheading History
315 By default, Geiser won't record duplicates in your input history.  If you
316 prefer it did, just set @code{geiser-repl-history-no-dups-p} to
317 @code{nil}.  History entries are persistent across REPL sessions:
318 they're saved in implementation-specific files whose location is
319 controlled by the variable @code{geiser-repl-history-filename}.  For
320 example, my Geiser configuration includes the following line:
322 @example
323 (setq geiser-repl-history-filename "~/.emacs.d/geiser-history")
324 @end example
326 @noindent
327 which makes the files @file{geiser-history.guile} and
328 @file{geiser-history.racket} to live inside my home's @file{.emacs.d}
329 directory.
331 @subsubheading Autodoc
333 @cindex autodoc, disabling
334 @cindex peace and quiet
335 If you happen to love peace and quiet and prefer to keep your REPL's
336 echo area free from autodoc's noise, @code{geiser-repl-autodoc-p} is the
337 customization variable for you: set it to @code{nil} and autodoc will be
338 disabled by default in new REPLs.  You can always bring the fairies
339 back, on a per REPL basis, using @kbd{C-c C-a}.
341 @subsubheading Remote connections
343 @cindex port, default
344 @cindex host, default
345 When using @code{connect-to-guile}, @code{connect-to-racket} or
346 @code{geiser-connect}, you'll be prompted for a host and a port,
347 defaulting to ``localhost'' and 37146.  You can change those defaults
348 customizing @code{geiser-repl-default-host} and
349 @code{geiser-repl-default-port}, respectively.
351 @c Local Variables:
352 @c mode: texinfo
353 @c TeX-master: "geiser"
354 @c End: