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