emacs: Enable 'guix-build-log-mode' for build log files.
[jackhill/guix/guix.git] / doc / emacs.texi
CommitLineData
457f60fa 1@node Emacs Interface
c554de89 2@chapter Emacs Interface
457f60fa 3
bd53d327 4@cindex Emacs
c554de89
AK
5GNU Guix comes with several useful modules (known as ``guix.el'') for
6GNU@tie{}Emacs which are intended to make an Emacs user interaction with
7Guix convenient and fun.
457f60fa
AK
8
9@menu
bd53d327 10* Initial Setup: Emacs Initial Setup. Preparing @file{~/.emacs}.
c554de89 11* Package Management: Emacs Package Management. Managing packages and generations.
9b0afb0d 12* Popup Interface: Emacs Popup Interface. Magit-like interface for guix commands.
9a130e19 13* Prettify Mode: Emacs Prettify. Abbreviating @file{/gnu/store/@dots{}} file names.
34850cd5 14* Build Log Mode: Emacs Build Log. Highlighting Guix build logs.
187f80c6
AK
15* Completions: Emacs Completions. Completing @command{guix} shell command.
16* Development: Emacs Development. Tools for Guix developers.
457f60fa
AK
17@end menu
18
c554de89 19
bd53d327 20@node Emacs Initial Setup
c554de89 21@section Initial Setup
457f60fa 22
80ae897f
LC
23On the Guix System Distribution (@pxref{GNU Distribution}), ``guix.el''
24is ready to use, provided Guix is installed system-wide, which is the
25case by default. So if that is what you're using, you can happily skip
26this section and read about the fun stuff.
27
ba3bcec9 28If you're not yet a happy user of GuixSD, a little bit of setup is needed.
457f60fa
AK
29To be able to use ``guix.el'', you need to install the following
30packages:
31
32@itemize
33@item
34@uref{http://www.gnu.org/software/emacs/, GNU Emacs}, version 24.3 or
35later;
36
37@item
38@uref{http://nongnu.org/geiser/, Geiser}, version 0.3 or later: it is
39used for interacting with the Guile process.
40
9b0afb0d
AK
41@item
42@uref{https://github.com/magit/magit/, magit-popup library}. You
43already have this library if you use Magit 2.1.0 or later. This library
44is an optional dependency---it is required only for @kbd{M-x@tie{}guix}
45command (@pxref{Emacs Popup Interface}).
46
457f60fa
AK
47@end itemize
48
a72f18a5
AK
49When it is done ``guix.el'' may be configured by requiring a special
50@code{guix-init} file---i.e., by adding the following code into your
51init file (@pxref{Init File,,, emacs, The GNU Emacs Manual}):
457f60fa
AK
52
53@example
a72f18a5 54(add-to-list 'load-path "/path/to/directory-with-guix.el")
457f60fa
AK
55(require 'guix-init nil t)
56@end example
57
a72f18a5
AK
58So the only thing you need to figure out is where the directory with
59elisp files for Guix is placed. It depends on how you installed Guix:
60
61@itemize
62@item
63If it was installed by a package manager of your distribution or by a
64usual @code{./configure && make && make install} command sequence, then
65elisp files are placed in a standard directory with Emacs packages
66(usually it is @file{/usr/share/emacs/site-lisp/}), which is already in
67@code{load-path}, so there is no need to add that directory there.
68
69@item
70If you used a binary installation method (@pxref{Binary Installation}),
71then Guix is installed somewhere in the store, so the elisp files are
72placed in @file{/gnu/store/@dots{}-guix-0.8.2/share/emacs/site-lisp/} or
73alike. However it is not recommended to refer directly to a store
74directory. Instead you can install Guix using Guix itself with
75@command{guix package -i guix} command (@pxref{Invoking guix package})
76and add @file{~/.guix-profile/share/emacs/site-lisp/} directory to
77@code{load-path} variable.
78
79@item
80If you did not install Guix at all and prefer a hacking way
81(@pxref{Running Guix Before It Is Installed}), along with augmenting
82@code{load-path} you need to set @code{guix-load-path} variable to the
83same directory, so your final configuration will look like this:
457f60fa
AK
84
85@example
a72f18a5
AK
86(let ((dir "/path/to/your-guix-git-tree/emacs"))
87 (add-to-list 'load-path dir)
88 (setq guix-load-path dir))
89(require 'guix-init nil t)
457f60fa 90@end example
a72f18a5 91@end itemize
457f60fa 92
a7f862e4
AK
93By default, along with autoloading (@pxref{Autoload,,, elisp, The GNU
94Emacs Lisp Reference Manual}) the main interactive commands for
95``guix.el'' (@pxref{Emacs Commands}), requiring @code{guix-init} will
96also autoload commands for the Emacs packages installed in your user
97profile.
98
99To disable automatic loading of installed Emacs packages, set
100@code{guix-package-enable-at-startup} variable to @code{nil} before
101requiring @code{guix-init}. This variable has the same meaning for
102Emacs packages installed with Guix, as @code{package-enable-at-startup}
5ec98c3d 103for the built-in Emacs package system (@pxref{Package Installation,,,
a7f862e4
AK
104emacs, The GNU Emacs Manual}).
105
106You can activate Emacs packages installed in your profile whenever you
107want using @kbd{M-x@tie{}guix-emacs-load-autoloads}.
457f60fa 108
c554de89
AK
109
110@node Emacs Package Management
111@section Package Management
457f60fa
AK
112
113Once ``guix.el'' has been successfully configured, you should be able to
c554de89
AK
114use a visual interface for routine package management tasks, pretty much
115like the @command{guix package} command (@pxref{Invoking guix package}).
116Specifically, it makes it easy to:
117
118@itemize
119@item browse and display packages and generations;
120@item search, install, upgrade and remove packages;
121@item display packages from previous generations;
122@item do some other useful things.
123@end itemize
457f60fa
AK
124
125@menu
bd53d327
AK
126* Commands: Emacs Commands. @kbd{M-x guix-@dots{}}
127* General information: Emacs General info. Common for both interfaces.
128* ``List'' buffer: Emacs List buffer. List-like interface.
129* ``Info'' buffer: Emacs Info buffer. Help-like interface.
c554de89 130* Configuration: Emacs Configuration. Configuring the interface.
457f60fa
AK
131@end menu
132
bd53d327 133@node Emacs Commands
c554de89 134@subsection Commands
457f60fa 135
23459fa5
AK
136All commands for displaying packages and generations use the current
137profile, which can be changed with
138@kbd{M-x@tie{}guix-set-current-profile}. Alternatively, if you call any
139of these commands with prefix argument (@kbd{C-u}), you will be prompted
140for a profile just for that command.
141
142Commands for displaying packages:
457f60fa
AK
143
144@table @kbd
23459fa5 145
457f60fa
AK
146@item M-x guix-all-available-packages
147@itemx M-x guix-newest-available-packages
148Display all/newest available packages.
149
150@item M-x guix-installed-packages
23459fa5 151Display all installed packages.
457f60fa
AK
152
153@item M-x guix-obsolete-packages
23459fa5
AK
154Display obsolete packages (the packages that are installed in a profile
155but cannot be found among available packages).
457f60fa
AK
156
157@item M-x guix-search-by-name
158Display package(s) with the specified name.
159
160@item M-x guix-search-by-regexp
161Search for packages by a specified regexp. By default ``name'',
162``synopsis'' and ``description'' of the packages will be searched. This
163can be changed by modifying @code{guix-search-params} variable.
164
457f60fa
AK
165@end table
166
23459fa5
AK
167By default, these commands display each output on a separate line. If
168you prefer to see a list of packages---i.e., a list with a package per
169line, use the following setting:
a54a237b
AK
170
171@example
172(setq guix-package-list-type 'package)
173@end example
174
23459fa5
AK
175Commands for displaying generations:
176
177@table @kbd
178
179@item M-x guix-generations
180List all the generations.
181
182@item M-x guix-last-generations
183List the @var{N} last generations. You will be prompted for the number
184of generations.
185
186@item M-x guix-generations-by-time
187List generations matching time period. You will be prompted for the
188period using Org mode time prompt based on Emacs calendar (@pxref{The
773bab64 189date/time prompt,,, org, The Org Manual}).
23459fa5
AK
190
191@end table
457f60fa 192
2d7bf949
AK
193You can also invoke the @command{guix pull} command (@pxref{Invoking
194guix pull}) from Emacs using:
195
196@table @kbd
197@item M-x guix-pull
198With @kbd{C-u}, make it verbose.
199@end table
200
201Once @command{guix pull} has succeeded, the Guix REPL is restared. This
202allows you to keep using the Emacs interface with the updated Guix.
203
bd53d327 204@node Emacs General info
c554de89 205@subsection General information
457f60fa
AK
206
207The following keys are available for both ``list'' and ``info'' types of
208buffers:
209
210@table @kbd
211@item l
212@itemx r
213Go backward/forward by the history of the displayed results (this
214history is similar to the history of the Emacs @code{help-mode} or
215@code{Info-mode}).
216
217@item g
218Revert current buffer: update information about the displayed
219packages/generations and redisplay it.
220
221@item R
222Redisplay current buffer (without updating information).
223
5a727cdf
AK
224@item M
225Apply manifest to the current profile or to a specified profile, if
226prefix argument is used. This has the same meaning as @code{--manifest}
227option (@pxref{Invoking guix package}).
228
457f60fa 229@item C-c C-z
96856613
LC
230@cindex REPL
231@cindex read-eval-print loop
457f60fa
AK
232Go to the Guix REPL (@pxref{The REPL,,, geiser, Geiser User Manual}).
233
234@item h
235@itemx ?
236Describe current mode to see all available bindings.
237
238@end table
239
240@emph{Hint:} If you need several ``list'' or ``info'' buffers, you can
241simlpy @kbd{M-x clone-buffer} them, and each buffer will have its own
242history.
243
244@emph{Warning:} Name/version pairs cannot be used to identify packages
245(because a name is not necessarily unique), so ``guix.el'' uses special
246identifiers that live only during a guile session, so if the Guix REPL
247was restarted, you may want to revert ``list'' buffer (by pressing
248@kbd{g}).
249
bd53d327 250@node Emacs List buffer
c554de89 251@subsection ``List'' buffer
457f60fa
AK
252
253An interface of a ``list'' buffer is similar to the interface provided
773bab64 254by ``package.el'' (@pxref{Package Menu,,, emacs, The GNU Emacs Manual}).
457f60fa
AK
255
256Default key bindings available for both ``package-list'' and
257``generation-list'' buffers:
258
259@table @kbd
260@item m
578b98da 261Mark the current entry (with prefix, mark all entries).
457f60fa 262@item u
91cc37a1 263Unmark the current entry (with prefix, unmark all entries).
457f60fa
AK
264@item @key{DEL}
265Unmark backward.
457f60fa
AK
266@item S
267Sort entries by a specified column.
268@end table
269
270A ``package-list'' buffer additionally provides the following bindings:
271
272@table @kbd
273@item @key{RET}
274Describe marked packages (display available information in a
275``package-info'' buffer).
276@item i
a54a237b 277Mark the current package for installation.
457f60fa 278@item d
a54a237b 279Mark the current package for deletion.
91cc37a1 280@item U
a54a237b 281Mark the current package for upgrading.
457f60fa 282@item ^
91cc37a1 283Mark all obsolete packages for upgrading.
6248e326
AK
284@item e
285Edit the definition of the curent package (go to its location). This is
286similar to @command{guix edit} command (@pxref{Invoking guix edit}), but
287for opening a package recipe in the current Emacs instance.
457f60fa 288@item x
a54a237b 289Execute actions on the marked packages.
457f60fa
AK
290@end table
291
292A ``generation-list'' buffer additionally provides the following
293bindings:
294
295@table @kbd
296@item @key{RET}
297List packages installed in the current generation.
298@item i
299Describe marked generations (display available information in a
300``generation-info'' buffer).
af874238
AK
301@item s
302Switch profile to the current generation.
cb6a5c71
AK
303@item d
304Mark the current generation for deletion (with prefix, mark all
305generations).
306@item x
307Execute actions on the marked generations---i.e., delete generations.
d38bd08c
AK
308@item e
309Run Ediff (@pxref{Top,,, ediff, The Ediff Manual}) on package outputs
310installed in the 2 marked generations. With prefix argument, run Ediff
311on manifests of the marked generations.
312@item D
313@itemx =
314Run Diff (@pxref{Diff Mode,,, emacs, The GNU Emacs Manual}) on package
315outputs installed in the 2 marked generations. With prefix argument,
316run Diff on manifests of the marked generations.
317@item +
318List package outputs added to the latest marked generation comparing
319with another marked generation.
320@item -
321List package outputs removed from the latest marked generation comparing
322with another marked generation.
457f60fa
AK
323@end table
324
bd53d327 325@node Emacs Info buffer
c554de89 326@subsection ``Info'' buffer
457f60fa
AK
327
328The interface of an ``info'' buffer is similar to the interface of
773bab64 329@code{help-mode} (@pxref{Help Mode,,, emacs, The GNU Emacs Manual}).
457f60fa
AK
330
331``Info'' buffer contains some buttons (as usual you may use @key{TAB} /
332@kbd{S-@key{TAB}} to move between buttons---@pxref{Mouse References,,,
773bab64 333emacs, The GNU Emacs Manual}) which can be used to:
457f60fa
AK
334
335@itemize @bullet
336@item (in a ``package-info'' buffer)
337
338@itemize @minus
339@item install/remove a package;
340@item jump to a package location;
341@item browse home page of a package;
342@item describe packages from ``Inputs'' fields.
343@end itemize
344
345@item (in a ``generation-info'' buffer)
346
347@itemize @minus
348@item remove a generation;
af874238 349@item switch to a generation;
457f60fa
AK
350@item list packages installed in a generation;
351@item jump to a generation directory.
352@end itemize
353
354@end itemize
355
56149217
AK
356It is also possible to copy a button label (a link to an URL or a file)
357by pressing @kbd{c} on a button.
358
457f60fa 359
bd53d327 360@node Emacs Configuration
457f60fa
AK
361@subsection Configuration
362
363There are many variables you can modify to change the appearance or
364behavior of Emacs user interface. Some of these variables are described
365in this section. Also you can use Custom Interface (@pxref{Easy
773bab64
AK
366Customization,,, emacs, The GNU Emacs Manual}) to explore/set variables
367(not all) and faces.
457f60fa
AK
368
369@menu
bd53d327
AK
370* Guile and Build Options: Emacs Build Options. Specifying how packages are built.
371* Buffer Names: Emacs Buffer Names. Names of Guix buffers.
372* Keymaps: Emacs Keymaps. Configuring key bindings.
373* Appearance: Emacs Appearance. Settings for visual appearance.
457f60fa
AK
374@end menu
375
bd53d327 376@node Emacs Build Options
457f60fa
AK
377@subsubsection Guile and Build Options
378
379@table @code
380@item guix-guile-program
381If you have some special needs for starting a Guile process, you may set
382this variable, for example:
383
384@example
385(setq guix-guile-program '("/bin/guile" "--no-auto-compile"))
386@end example
387
388@item guix-use-substitutes
389Has the same meaning as @code{--no-substitutes} option (@pxref{Invoking
390guix build}).
391
392@item guix-dry-run
393Has the same meaning as @code{--dry-run} option (@pxref{Invoking guix
394build}).
395
396@end table
397
bd53d327 398@node Emacs Buffer Names
a54a237b
AK
399@subsubsection Buffer Names
400
401Default names of ``guix.el'' buffers (``*Guix@tie{}@dots{}*'') may be
402changed with the following variables:
403
404@table @code
405@item guix-package-list-buffer-name
406@item guix-output-list-buffer-name
407@item guix-generation-list-buffer-name
408@item guix-package-info-buffer-name
409@item guix-output-info-buffer-name
410@item guix-generation-info-buffer-name
411@item guix-repl-buffer-name
412@item guix-internal-repl-buffer-name
a54a237b
AK
413@end table
414
23459fa5
AK
415By default, the name of a profile is also displayed in a ``list'' or
416``info'' buffer name. To change this behavior, use
417@code{guix-buffer-name-function} variable.
418
419For example, if you want to display all types of results in a single
a54a237b
AK
420buffer (in such case you will probably use a history (@kbd{l}/@kbd{r})
421extensively), you may do it like this:
422
423@example
424(let ((name "Guix Universal"))
425 (setq
426 guix-package-list-buffer-name name
427 guix-output-list-buffer-name name
428 guix-generation-list-buffer-name name
429 guix-package-info-buffer-name name
430 guix-output-info-buffer-name name
23459fa5
AK
431 guix-generation-info-buffer-name name
432 guix-buffer-name-function #'guix-buffer-name-simple))
a54a237b
AK
433@end example
434
bd53d327 435@node Emacs Keymaps
457f60fa
AK
436@subsubsection Keymaps
437
438If you want to change default key bindings, use the following keymaps
773bab64 439(@pxref{Init Rebinding,,, emacs, The GNU Emacs Manual}):
457f60fa
AK
440
441@table @code
74cc6737
AK
442@item guix-root-map
443Parent keymap with general keys for all guix modes.
444
457f60fa
AK
445@item guix-list-mode-map
446Parent keymap with general keys for ``list'' buffers.
447
448@item guix-package-list-mode-map
449Keymap with specific keys for ``package-list'' buffers.
450
a54a237b
AK
451@item guix-output-list-mode-map
452Keymap with specific keys for ``output-list'' buffers.
453
457f60fa
AK
454@item guix-generation-list-mode-map
455Keymap with specific keys for ``generation-list'' buffers.
456
457@item guix-info-mode-map
458Parent keymap with general keys for ``info'' buffers.
459
460@item guix-package-info-mode-map
461Keymap with specific keys for ``package-info'' buffers.
462
a54a237b
AK
463@item guix-output-info-mode-map
464Keymap with specific keys for ``output-info'' buffers.
465
457f60fa
AK
466@item guix-generation-info-mode-map
467Keymap with specific keys for ``generation-info'' buffers.
468
56149217
AK
469@item guix-info-button-map
470Keymap with keys available when a point is placed on a button.
471
457f60fa
AK
472@end table
473
bd53d327 474@node Emacs Appearance
457f60fa
AK
475@subsubsection Appearance
476
477You can change almost any aspect of ``list'' / ``info'' buffers using
478the following variables:
479
480@table @code
481@item guix-list-column-format
482@itemx guix-list-column-titles
483@itemx guix-list-column-value-methods
484Specify the columns, their names, what and how is displayed in ``list''
485buffers.
486
487@item guix-info-displayed-params
488@itemx guix-info-insert-methods
489@itemx guix-info-ignore-empty-vals
490@itemx guix-info-param-title-format
491@itemx guix-info-multiline-prefix
492@itemx guix-info-indent
493@itemx guix-info-fill-column
494@itemx guix-info-delimiter
495Various settings for ``info'' buffers.
496
497@end table
9a130e19
AK
498
499
9b0afb0d
AK
500@node Emacs Popup Interface
501@section Popup Interface
502
503If you ever used Magit, you know what ``popup interface'' is
504(@pxref{Top,,, magit-popup, Magit-Popup User Manual}). Even if you are
505not acquainted with Magit, there should be no worries as it is very
506intuitive.
507
508So @kbd{M-x@tie{}guix} command provides a top-level popup interface for
509all available guix commands. When you select an option, you'll be
510prompted for a value in the minibuffer. Many values have completions,
511so don't hesitate to press @key{TAB} key. Multiple values (for example,
512packages or lint checkers) should be separated by commas.
513
514After specifying all options and switches for a command, you may choose
515one of the available actions. The following default actions are
516available for all commands:
517
518@itemize
519
520@item
521Run the command in the Guix REPL. It is faster than running
522@code{guix@tie{}@dots{}} command directly in shell, as there is no
523need to run another guile process and to load required modules there.
524
525@item
526Run the command in a shell buffer. You can set
527@code{guix-run-in-shell-function} variable to fine tune the shell buffer
528you want to use.
529
530@item
531Add the command line to the kill ring (@pxref{Kill Ring,,, emacs, The
532GNU Emacs Manual}).
533
534@end itemize
535
5e2b761e
AK
536Several commands (@command{guix graph}, @command{guix system dmd-graph}
537and @command{guix system extension-graph}) also have a ``View graph''
538action, which allows you to view a generated graph using @command{dot}
539command (specified by @code{guix-dot-program} variable). By default a
540PNG file will be saved in @file{/tmp} directory and will be opened
541directly in Emacs. This behavior may be changed with the following
542variables:
543
544@table @code
545
546@item guix-find-file-function
547Function used to open a generated graph. If you want to open a graph in
548an external program, you can do it by modifying this variable---for
549example, you can use a functionality provided by the Org Mode
550(@pxref{Top,,, org, The Org Manual}):
551
552@example
553(setq guix-find-file-function 'org-open-file)
554(add-to-list 'org-file-apps '("\\.png\\'" . "sxiv %s"))
555@end example
556
557@item guix-dot-default-arguments
558Command line arguments to run @command{dot} command. If you change an
559output format (for example, into @code{-Tpdf}), you also need to change
560the next variable.
561
562@item guix-dot-file-name-function
563Function used to define a name of the generated graph file. Default
564name is @file{/tmp/guix-emacs-graph-XXXXXX.png}.
565
566@end table
567
568So, for example, if you want to generate and open a PDF file in your
569Emacs, you may change the settings like this:
570
571@example
572(defun my-guix-pdf-graph ()
573 "/tmp/my-current-guix-graph.pdf")
574
575(setq guix-dot-default-arguments '("-Tpdf")
576 guix-dot-file-name-function 'my-guix-pdf-graph)
577@end example
578
9b0afb0d 579
9a130e19 580@node Emacs Prettify
c554de89 581@section Guix Prettify Mode
9a130e19 582
c554de89
AK
583GNU@tie{}Guix also comes with ``guix-prettify.el''. It provides a minor
584mode for abbreviating store file names by replacing hash sequences of
585symbols with ``@dots{}'':
9a130e19
AK
586
587@example
588/gnu/store/72f54nfp6g1hz873w8z3gfcah0h4nl9p-foo-0.1
589@result{} /gnu/store/…-foo-0.1
590@end example
591
592Once you set up ``guix.el'' (@pxref{Emacs Initial Setup}), the following
593commands become available:
594
595@table @kbd
596
597@item M-x guix-prettify-mode
598Enable/disable prettifying for the current buffer.
599
600@item M-x global-guix-prettify-mode
601Enable/disable prettifying globally.
602
603@end table
604
605To automatically enable @code{guix-prettify-mode} globally on Emacs
606start, add the following line to your init file:
607
608@example
609(global-guix-prettify-mode)
610@end example
611
612If you want to enable it only for specific major modes, add it to the
613mode hooks (@pxref{Hooks,,, emacs, The GNU Emacs Manual}), for example:
614
615@example
616(add-hook 'shell-mode-hook 'guix-prettify-mode)
617(add-hook 'dired-mode-hook 'guix-prettify-mode)
618@end example
00a8dae2
AK
619
620
34850cd5
AK
621@node Emacs Build Log
622@section Build Log Mode
623
624GNU@tie{}Guix provides major and minor modes for highlighting build
625logs. So when you have a file with a package build output---for
626example, a file returned by @command{guix build --log-file @dots{}}
627command (@pxref{Invoking guix build}), you may call @kbd{M-x
628guix-build-log-mode} command in the buffer with this file. This major
629mode highlights some lines specific to build output and provides the
630following key bindings:
631
632@table @kbd
633
634@item M-n
635Move to the next build phase.
636
637@item M-p
638Move to the previous build phase.
639
eda1cc8b
AK
640@item @key{TAB}
641Toggle (show/hide) the body of the current build phase.
642
643@item S-@key{TAB}
644Toggle (show/hide) the bodies of all build phases.
645
34850cd5
AK
646@end table
647
648There is also @kbd{M-x guix-build-log-minor-mode} which also provides
20ce2fee
AK
649the same highlighting. And as it is a minor mode, it can be enabled in
650any buffer. For example, if you are building some package in a shell
651buffer (@pxref{Interactive Shell,,, emacs, The GNU Emacs Manual}), you
652may enable @command{guix-build-log-minor-mode} to make it more colorful.
653Guix build output is rather specific, so this new highlighting shouldn't
654conflict with the existing one. This mode also provides the same key
655bindings as the major mode, but prefixed with @kbd{C-c}.
34850cd5
AK
656
657
00a8dae2 658@node Emacs Completions
c554de89 659@section Shell Completions
00a8dae2
AK
660
661Another feature that becomes available after configuring Emacs interface
662(@pxref{Emacs Initial Setup}) is completing of @command{guix}
663subcommands, options, packages and other things in @code{shell}
664(@pxref{Interactive Shell,,, emacs, The GNU Emacs Manual}) and
665@code{eshell} (@pxref{Top,,, eshell, Eshell: The Emacs Shell}).
666
667It works the same way as other completions do. Just press @key{TAB}
668when your intuition tells you.
669
670And here are some examples, where pressing @key{TAB} may complete
671something:
672
673@itemize @w{}
674
675@item @code{guix pa}@key{TAB}
676@item @code{guix package -}@key{TAB}
677@item @code{guix package --}@key{TAB}
678@item @code{guix package -i gei}@key{TAB}
679@item @code{guix build -L/tm}@key{TAB}
680@item @code{guix build --sy}@key{TAB}
681@item @code{guix build --system=i}@key{TAB}
682@item @code{guix system rec}@key{TAB}
683@item @code{guix lint --checkers=sy}@key{TAB}
684@item @code{guix lint --checkers=synopsis,des}@key{TAB}
685
686@end itemize
187f80c6
AK
687
688
689@node Emacs Development
690@section Development
691
692By default, when you open a Scheme file, @code{guix-devel-mode} will be
693activated (if you don't want it, set @code{guix-devel-activate-mode} to
694nil). This minor mode provides the following key bindings:
695
696@table @kbd
697
698@item C-c . k
699Copy the name of the current Guile module into kill ring
700(@code{guix-devel-copy-module-as-kill}).
701
702@item C-c . u
703Use the current Guile module. Often after opening a Scheme file, you
704want to use a module it defines, so you switch to the Geiser REPL and
705write @code{,use (some module)} there. You may just use this command
706instead (@code{guix-devel-use-module}).
707
1a6c4c2f
AK
708@item C-c . b
709Build a package defined by the current variable definition. The
710building process is run in the current Geiser REPL. If you modified the
711current package definition, don't forget to reevaluate it before calling
712this command---for example, with @kbd{C-M-x} (@pxref{To eval or not to
713eval,,, geiser, Geiser User Manual})
714(@code{guix-devel-build-package-definition}).
715
ad8b83bd
AK
716@item C-c . s
717Build a source derivation of the package defined by the current variable
718definition. This command has the same meaning as @code{guix build -S}
719shell command (@pxref{Invoking guix build})
720(@code{guix-devel-build-package-source}).
721
b94ef11a
AK
722@item C-c . l
723Lint (check) a package defined by the current variable definition
724(@pxref{Invoking guix lint}) (@code{guix-devel-lint-package}).
725
187f80c6 726@end table
1a6c4c2f
AK
727
728Unluckily, there is a limitation related to long-running REPL commands.
729When there is a running process in a Geiser REPL, you are not supposed
730to evaluate anything in a scheme buffer, because this will ``freeze''
731the REPL: it will stop producing any output (however, the evaluating
732process will continue---you will just not see any progress anymore). Be
733aware: even moving the point in a scheme buffer may ``break'' the REPL
734if Autodoc (@pxref{Autodoc and friends,,, geiser, Geiser User Manual})
735is enabled (which is the default).
736
737So you have to postpone editing your scheme buffers until the running
738evaluation will be finished in the REPL.
739
740Alternatively, to avoid this limitation, you may just run another Geiser
741REPL, and while something is being evaluated in the previous REPL, you
742can continue editing a scheme file with the help of the current one.