summary refs log tree commit diff
path: root/doc/emacs.texi
diff options
context:
space:
mode:
authorLeo Famulari <leo@famulari.name>2017-01-06 17:14:41 -0500
committerLeo Famulari <leo@famulari.name>2017-01-06 17:14:41 -0500
commit74288230ea8b2310495dc2739f39ceadcc143fd0 (patch)
tree73ba6c7c13d59c5f92b409c94dccfff159e08f4d /doc/emacs.texi
parent92e779592d269ca1924f184496eb4ca832997b12 (diff)
parentaa21c764d65068783ae31febee2a92eb3d138a24 (diff)
downloadguix-74288230ea8b2310495dc2739f39ceadcc143fd0.tar.gz
Merge branch 'master' into core-updates
Diffstat (limited to 'doc/emacs.texi')
-rw-r--r--doc/emacs.texi881
1 files changed, 0 insertions, 881 deletions
diff --git a/doc/emacs.texi b/doc/emacs.texi
deleted file mode 100644
index 1ffb9f636e..0000000000
--- a/doc/emacs.texi
+++ /dev/null
@@ -1,881 +0,0 @@
-@node Emacs Interface
-@chapter Emacs Interface
-
-@cindex Emacs
-GNU Guix comes with several useful modules (known as ``guix.el'') for
-GNU@tie{}Emacs which are intended to make an Emacs user interaction with
-Guix convenient and fun.
-
-@menu
-* Initial Setup: Emacs Initial Setup.	Preparing @file{~/.emacs}.
-* Package Management: Emacs Package Management.	Managing packages and generations.
-* Licenses: Emacs Licenses.		Interface for licenses of Guix packages.
-* Package Source Locations: Emacs Package Locations.	Interface for package location files.
-* Popup Interface: Emacs Popup Interface.	Magit-like interface for guix commands.
-* Prettify Mode: Emacs Prettify.	Abbreviating @file{/gnu/store/@dots{}} file names.
-* Build Log Mode: Emacs Build Log.	Highlighting Guix build logs.
-* Completions: Emacs Completions.	Completing @command{guix} shell command.
-* Development: Emacs Development.	Tools for Guix developers.
-* Hydra: Emacs Hydra.			Interface for Guix build farm.
-@end menu
-
-
-@node Emacs Initial Setup
-@section Initial Setup
-
-On the Guix System Distribution (@pxref{GNU Distribution}), ``guix.el''
-is ready to use, provided Guix is installed system-wide, which is the
-case by default.  So if that is what you're using, you can happily skip
-this section and read about the fun stuff.
-
-If you're not yet a happy user of GuixSD, a little bit of setup is needed.
-To be able to use ``guix.el'', you need to install the following
-packages:
-
-@itemize
-@item
-@uref{http://www.gnu.org/software/emacs/, GNU Emacs}, version 24.3 or
-later;
-
-@item
-@uref{http://nongnu.org/geiser/, Geiser}, version 0.3 or later: it is
-used for interacting with the Guile process.
-
-@item
-@uref{https://github.com/magit/magit/, magit-popup library}.  You
-already have this library if you use Magit 2.1.0 or later.  This library
-is an optional dependency---it is required only for @kbd{M-x@tie{}guix}
-command (@pxref{Emacs Popup Interface}).
-
-@end itemize
-
-When it is done, ``guix.el'' may be configured by requiring
-@code{guix-autoloads} file.  If you install Guix in your user profile,
-this auto-loading is done automatically by our Emacs package
-(@pxref{Application Setup}), so a universal recipe for configuring
-``guix.el'' is: @command{guix package -i guix}.  If you do this, there
-is no need to read further.
-
-For the manual installation, you need to add the following code into
-your init file (@pxref{Init File,,, emacs, The GNU Emacs Manual}):
-
-@example
-(add-to-list 'load-path "/path/to/directory-with-guix.el")
-(require 'guix-autoloads nil t)
-@end example
-
-So the only thing you need to figure out is where the directory with
-elisp files for Guix is placed.  It depends on how you installed Guix:
-
-@itemize
-@item
-If it was installed by a package manager of your distribution or by a
-usual @code{./configure && make && make install} command sequence, then
-elisp files are placed in a standard directory with Emacs packages
-(usually it is @file{/usr/share/emacs/site-lisp/}), which is already in
-@code{load-path}, so there is no need to add that directory there.  Note
-that if you don't update this installation periodically, you may get an
-outdated Emacs code which does not work with the current Guile code of
-Guix.
-
-@item
-If you used a binary installation method (@pxref{Binary Installation}),
-then Guix is installed somewhere in the store, so the elisp files are
-placed in @file{/gnu/store/@dots{}-guix-0.8.2/share/emacs/site-lisp/} or
-alike.  However it is not recommended to refer directly to a store
-directory, as it may be garbage-collected one day.  So a better choice
-would be to install Guix using Guix itself with @command{guix package -i
-guix}.
-
-@item
-If you did not install Guix at all and prefer a hacking way
-(@pxref{Running Guix Before It Is Installed}), along with augmenting
-@code{load-path} you need to set @code{guix-load-path} variable to the
-same directory, so your final configuration will look like this:
-
-@example
-(let ((dir "/path/to/your-guix-git-tree/emacs"))
-  (add-to-list 'load-path dir)
-  (setq guix-load-path dir))
-(require 'guix-autoloads nil t)
-@end example
-@end itemize
-
-
-@node Emacs Package Management
-@section Package Management
-
-Once ``guix.el'' has been successfully configured, you should be able to
-use a visual interface for routine package management tasks, pretty much
-like the @command{guix package} command (@pxref{Invoking guix package}).
-Specifically, it makes it easy to:
-
-@itemize
-@item browse and display packages and generations;
-@item search, install, upgrade and remove packages;
-@item display packages from previous generations;
-@item do some other useful things.
-@end itemize
-
-@menu
-* Commands: Emacs Commands.			@kbd{M-x guix-@dots{}}
-* General information: Emacs General info.	Common for both interfaces.
-* ``List'' buffer: Emacs List buffer.		List-like interface.
-* ``Info'' buffer: Emacs Info buffer.		Help-like interface.
-* Configuration: Emacs Configuration.		Configuring the interface.
-@end menu
-
-@node Emacs Commands
-@subsection Commands
-
-All commands for displaying packages and generations use the current
-profile, which can be changed with
-@kbd{M-x@tie{}guix-set-current-profile}.  Alternatively, if you call any
-of these commands with prefix argument (@kbd{C-u}), you will be prompted
-for a profile just for that command.
-
-Commands for displaying packages:
-
-@table @kbd
-
-@item M-x guix-all-available-packages
-@itemx M-x guix-newest-available-packages
-Display all/newest available packages.
-
-@item M-x guix-installed-packages
-@itemx M-x guix-installed-user-packages
-@itemx M-x guix-installed-system-packages
-Display installed packages.  As described above, @kbd{M-x
-guix-installed-packages} uses an arbitrary profile that you can specify,
-while the other commands display packages installed in 2 special
-profiles: @file{~/.guix-profile} and @file{/run/current-system/profile}
-(only on GuixSD).
-
-@item M-x guix-obsolete-packages
-Display obsolete packages (the packages that are installed in a profile
-but cannot be found among available packages).
-
-@item M-x guix-packages-by-name
-Display package(s) with the specified name.
-
-@item M-x guix-packages-by-license
-Display package(s) with the specified license.
-
-@item M-x guix-packages-by-location
-Display package(s) located in the specified file.  These files usually
-have the following form: @file{gnu/packages/emacs.scm}, but don't type
-them manually!  Press @key{TAB} to complete the file name.
-
-@item M-x guix-package-from-file
-Display package that the code within the specified file evaluates to.
-@xref{Invoking guix package, @code{--install-from-file}}, for an example
-of what such a file may look like.
-
-@item M-x guix-search-by-regexp
-Search for packages by a specified regexp.  By default ``name'',
-``synopsis'' and ``description'' of the packages will be searched.  This
-can be changed by modifying @code{guix-package-search-params} variable.
-
-@item M-x guix-search-by-name
-Search for packages with names matching a specified regexp.  This
-command is the same as @code{guix-search-by-regexp}, except only a
-package ``name'' is searched.
-
-@end table
-
-By default, these commands display each output on a separate line.  If
-you prefer to see a list of packages---i.e., a list with a package per
-line, use the following setting:
-
-@example
-(setq guix-package-list-type 'package)
-@end example
-
-Commands for displaying generations:
-
-@table @kbd
-
-@item M-x guix-generations
-List all the generations.
-
-@item M-x guix-last-generations
-List the @var{N} last generations.  You will be prompted for the number
-of generations.
-
-@item M-x guix-generations-by-time
-List generations matching time period.  You will be prompted for the
-period using Org mode time prompt based on Emacs calendar (@pxref{The
-date/time prompt,,, org, The Org Manual}).
-
-@end table
-
-Analogously on GuixSD you can also display system generations:
-
-@table @kbd
-@item M-x guix-system-generations
-@item M-x guix-last-system-generations
-@item M-x guix-system-generations-by-time
-@end table
-
-You can also invoke the @command{guix pull} command (@pxref{Invoking
-guix pull}) from Emacs using:
-
-@table @kbd
-@item M-x guix-pull
-With @kbd{C-u}, make it verbose.
-@end table
-
-Once @command{guix pull} has succeeded, the Guix REPL is restarted.  This
-allows you to keep using the Emacs interface with the updated Guix.
-
-
-@node Emacs General info
-@subsection General information
-
-The following keys are available for both ``list'' and ``info'' types of
-buffers:
-
-@table @kbd
-@item l
-@itemx r
-Go backward/forward by the history of the displayed results (this
-history is similar to the history of the Emacs @code{help-mode} or
-@code{Info-mode}).
-
-@item g
-Revert current buffer: update information about the displayed
-packages/generations and redisplay it.
-
-@item R
-Redisplay current buffer (without updating information).
-
-@item M
-Apply manifest to the current profile or to a specified profile, if
-prefix argument is used.  This has the same meaning as @code{--manifest}
-option (@pxref{Invoking guix package}).
-
-@item C-c C-z
-@cindex REPL
-@cindex read-eval-print loop
-Go to the Guix REPL (@pxref{The REPL,,, geiser, Geiser User Manual}).
-
-@item h
-@itemx ?
-Describe current mode to see all available bindings.
-
-@end table
-
-@emph{Hint:} If you need several ``list'' or ``info'' buffers, you can
-simply @kbd{M-x clone-buffer} them, and each buffer will have its own
-history.
-
-@emph{Warning:} Name/version pairs cannot be used to identify packages
-(because a name is not necessarily unique), so ``guix.el'' uses special
-identifiers that live only during a guile session, so if the Guix REPL
-was restarted, you may want to revert ``list'' buffer (by pressing
-@kbd{g}).
-
-@node Emacs List buffer
-@subsection ``List'' buffer
-
-An interface of a ``list'' buffer is similar to the interface provided
-by ``package.el'' (@pxref{Package Menu,,, emacs, The GNU Emacs Manual}).
-
-Default key bindings available for both ``package-list'' and
-``generation-list'' buffers:
-
-@table @kbd
-@item m
-Mark the current entry (with prefix, mark all entries).
-@item u
-Unmark the current entry (with prefix, unmark all entries).
-@item @key{DEL}
-Unmark backward.
-@item S
-Sort entries by a specified column.
-@end table
-
-A ``package-list'' buffer additionally provides the following bindings:
-
-@table @kbd
-@item @key{RET}
-Describe marked packages (display available information in a
-``package-info'' buffer).
-@item i
-Mark the current package for installation.
-@item d
-Mark the current package for deletion.
-@item U
-Mark the current package for upgrading.
-@item ^
-Mark all obsolete packages for upgrading.
-@item e
-Edit the definition of the current package (go to its location).  This is
-similar to @command{guix edit} command (@pxref{Invoking guix edit}), but
-for opening a package recipe in the current Emacs instance.
-@item x
-Execute actions on the marked packages.
-@item B
-Display latest builds of the current package (@pxref{Emacs Hydra}).
-@end table
-
-A ``generation-list'' buffer additionally provides the following
-bindings:
-
-@table @kbd
-@item @key{RET}
-List packages installed in the current generation.
-@item i
-Describe marked generations (display available information in a
-``generation-info'' buffer).
-@item s
-Switch profile to the current generation.
-@item d
-Mark the current generation for deletion (with prefix, mark all
-generations).
-@item x
-Execute actions on the marked generations---i.e., delete generations.
-@item e
-Run Ediff (@pxref{Top,,, ediff, The Ediff Manual}) on package outputs
-installed in the 2 marked generations.  With prefix argument, run Ediff
-on manifests of the marked generations.
-@item D
-@itemx =
-Run Diff (@pxref{Diff Mode,,, emacs, The GNU Emacs Manual}) on package
-outputs installed in the 2 marked generations.  With prefix argument,
-run Diff on manifests of the marked generations.
-@item +
-List package outputs added to the latest marked generation comparing
-with another marked generation.
-@item -
-List package outputs removed from the latest marked generation comparing
-with another marked generation.
-@end table
-
-@node Emacs Info buffer
-@subsection ``Info'' buffer
-
-The interface of an ``info'' buffer is similar to the interface of
-@code{help-mode} (@pxref{Help Mode,,, emacs, The GNU Emacs Manual}).
-
-``Info'' buffer contains some buttons (as usual you may use @key{TAB} /
-@kbd{S-@key{TAB}} to move between buttons---@pxref{Mouse References,,,
-emacs, The GNU Emacs Manual}) which can be used to:
-
-@itemize @bullet
-@item (in a ``package-info'' buffer)
-
-@itemize @minus
-@item install/remove a package;
-@item jump to a package location;
-@item browse home page of a package;
-@item browse license URL;
-@item describe packages from ``Inputs'' fields.
-@end itemize
-
-@item (in a ``generation-info'' buffer)
-
-@itemize @minus
-@item remove a generation;
-@item switch to a generation;
-@item list packages installed in a generation;
-@item jump to a generation directory.
-@end itemize
-
-@end itemize
-
-It is also possible to copy a button label (a link to an URL or a file)
-by pressing @kbd{c} on a button.
-
-
-@node Emacs Configuration
-@subsection Configuration
-
-There are many variables you can modify to change the appearance or
-behavior of Emacs user interface.  Some of these variables are described
-in this section.  Also you can use Custom Interface (@pxref{Easy
-Customization,,, emacs, The GNU Emacs Manual}) to explore/set variables
-(not all) and faces.
-
-@menu
-* Guile and Build Options: Emacs Build Options.	Specifying how packages are built.
-* Buffer Names: Emacs Buffer Names.	Names of Guix buffers.
-* Keymaps: Emacs Keymaps.		Configuring key bindings.
-* Appearance: Emacs Appearance.		Settings for visual appearance.
-@end menu
-
-@node Emacs Build Options
-@subsubsection Guile and Build Options
-
-@table @code
-@item guix-guile-program
-If you have some special needs for starting a Guile process, you may set
-this variable, for example:
-
-@example
-(setq guix-guile-program '("/bin/guile" "--no-auto-compile"))
-@end example
-
-@item guix-use-substitutes
-If nil, has the same meaning as @code{--no-substitutes} option
-(@pxref{Invoking guix build}).
-
-@item guix-dry-run
-If non-nil, has the same meaning as @code{--dry-run} option
-(@pxref{Invoking guix build}).
-
-@end table
-
-@node Emacs Buffer Names
-@subsubsection Buffer Names
-
-Default names of ``guix.el'' buffers (``*Guix@tie{}@dots{}*'') may be
-changed with the following variables:
-
-@table @code
-@item guix-package-list-buffer-name
-@item guix-output-list-buffer-name
-@item guix-generation-list-buffer-name
-@item guix-package-info-buffer-name
-@item guix-output-info-buffer-name
-@item guix-generation-info-buffer-name
-@item guix-repl-buffer-name
-@item guix-internal-repl-buffer-name
-@end table
-
-By default, the name of a profile is also displayed in a ``list'' or
-``info'' buffer name.  To change this behavior, use
-@code{guix-ui-buffer-name-function} variable.
-
-For example, if you want to display all types of results in a single
-buffer (in such case you will probably use a history (@kbd{l}/@kbd{r})
-extensively), you may do it like this:
-
-@example
-(let ((name "Guix Universal"))
-  (setq
-   guix-package-list-buffer-name    name
-   guix-output-list-buffer-name     name
-   guix-generation-list-buffer-name name
-   guix-package-info-buffer-name    name
-   guix-output-info-buffer-name     name
-   guix-generation-info-buffer-name name))
-@end example
-
-@node Emacs Keymaps
-@subsubsection Keymaps
-
-If you want to change default key bindings, use the following keymaps
-(@pxref{Init Rebinding,,, emacs, The GNU Emacs Manual}):
-
-@table @code
-@item guix-buffer-map
-Parent keymap with general keys for any buffer type.
-
-@item guix-ui-map
-Parent keymap with general keys for buffers used for Guix package
-management (for packages, outputs and generations).
-
-@item guix-list-mode-map
-Parent keymap with general keys for ``list'' buffers.
-
-@item guix-package-list-mode-map
-Keymap with specific keys for ``package-list'' buffers.
-
-@item guix-output-list-mode-map
-Keymap with specific keys for ``output-list'' buffers.
-
-@item guix-generation-list-mode-map
-Keymap with specific keys for ``generation-list'' buffers.
-
-@item guix-info-mode-map
-Parent keymap with general keys for ``info'' buffers.
-
-@item guix-package-info-mode-map
-Keymap with specific keys for ``package-info'' buffers.
-
-@item guix-output-info-mode-map
-Keymap with specific keys for ``output-info'' buffers.
-
-@item guix-generation-info-mode-map
-Keymap with specific keys for ``generation-info'' buffers.
-
-@item guix-info-button-map
-Keymap with keys available when a point is placed on a button.
-
-@end table
-
-@node Emacs Appearance
-@subsubsection Appearance
-
-You can change almost any aspect of ``list'' / ``info'' buffers using
-the following variables (@dfn{ENTRY-TYPE} means @code{package},
-@code{output} or @code{generation}):
-
-@table @code
-@item guix-ENTRY-TYPE-list-format
-@itemx guix-ENTRY-TYPE-list-titles
-Specify the columns, their names, what and how is displayed in ``list''
-buffers.
-
-@item guix-ENTRY-TYPE-info-format
-@itemx guix-ENTRY-TYPE-info-titles
-@itemx guix-info-ignore-empty-values
-@itemx guix-info-param-title-format
-@itemx guix-info-multiline-prefix
-@itemx guix-info-indent
-@itemx guix-info-fill
-@itemx guix-info-delimiter
-Various settings for ``info'' buffers.
-
-@end table
-
-
-@node Emacs Licenses
-@section Licenses
-
-If you want to browse the URL of a particular license, or to look at a
-list of licenses, you may use the following commands:
-
-@table @kbd
-
-@item M-x guix-browse-license-url
-Choose a license from a completion list to browse its URL using
-@code{browse-url} function (@pxref{Browse-URL,,, emacs, The GNU Emacs
-Manual}).
-
-@item M-x guix-licenses
-Display a list of available licenses.  You can press @kbd{@key{RET}}
-there to display packages with this license in the same way as @kbd{M-x
-guix-packages-by-license} would do (@pxref{Emacs Commands}).
-
-@item M-x guix-find-license-definition
-Open @file{@dots{}/guix/licenses.scm} and move to the specified license.
-
-@end table
-
-
-@node Emacs Package Locations
-@section Package Source Locations
-
-As you know, package definitions are placed in Guile files, also known
-as @dfn{package locations}.  The following commands should help you not
-get lost in these locations:
-
-@table @kbd
-
-@item M-x guix-locations
-Display a list of package locations.  You can press @key{RET} there to
-display packages placed in the current location in the same way as
-@kbd{M-x guix-packages-by-location} would do (@pxref{Emacs Commands}).
-Note that when the point is on a location button, @key{RET} will open
-this location file.
-
-@item M-x guix-find-location
-Open the given package definition source file (press @key{TAB} to choose
-a location from a completion list).
-
-@item M-x guix-edit
-Find location of a specified package.  This is an Emacs analog of
-@command{guix edit} command (@pxref{Invoking guix edit}).  As with
-@kbd{M-x guix-packages-by-name}, you can press @key{TAB} to complete a
-package name.
-
-@end table
-
-If you are contributing to Guix, you may find it useful for @kbd{M-x
-guix-find-location} and @kbd{M-x guix-edit} to open locations from your
-Git checkout.  This can be done by setting @code{guix-directory}
-variable.  For example, after this:
-
-@example
-(setq guix-directory "~/src/guix")
-@end example
-
-@kbd{M-x guix-edit guix} opens
-@file{~/src/guix/gnu/packages/package-management.scm} file.
-
-Also you can use @kbd{C-u} prefix argument to specify a directory just
-for the current @kbd{M-x guix-find-location} or @kbd{M-x guix-edit}
-command.
-
-
-@node Emacs Popup Interface
-@section Popup Interface
-
-If you ever used Magit, you know what ``popup interface'' is
-(@pxref{Top,,, magit-popup, Magit-Popup User Manual}).  Even if you are
-not acquainted with Magit, there should be no worries as it is very
-intuitive.
-
-So @kbd{M-x@tie{}guix} command provides a top-level popup interface for
-all available guix commands.  When you select an option, you'll be
-prompted for a value in the minibuffer.  Many values have completions,
-so don't hesitate to press @key{TAB} key.  Multiple values (for example,
-packages or lint checkers) should be separated by commas.
-
-After specifying all options and switches for a command, you may choose
-one of the available actions.  The following default actions are
-available for all commands:
-
-@itemize
-
-@item
-Run the command in the Guix REPL.  It is faster than running
-@code{guix@tie{}@dots{}} command directly in shell, as there is no
-need to run another guile process and to load required modules there.
-
-@item
-Run the command in a shell buffer.  You can set
-@code{guix-run-in-shell-function} variable to fine tune the shell buffer
-you want to use.
-
-@item
-Add the command line to the kill ring (@pxref{Kill Ring,,, emacs, The
-GNU Emacs Manual}).
-
-@end itemize
-
-Several commands (@command{guix graph}, @command{guix system shepherd-graph}
-and @command{guix system extension-graph}) also have a ``View graph''
-action, which allows you to view a generated graph using @command{dot}
-command (specified by @code{guix-dot-program} variable).  By default a
-PNG file will be saved in @file{/tmp} directory and will be opened
-directly in Emacs.  This behavior may be changed with the following
-variables:
-
-@table @code
-
-@item guix-find-file-function
-Function used to open a generated graph.  If you want to open a graph in
-an external program, you can do it by modifying this variable---for
-example, you can use a functionality provided by the Org Mode
-(@pxref{Top,,, org, The Org Manual}):
-
-@example
-(setq guix-find-file-function 'org-open-file)
-(add-to-list 'org-file-apps '("\\.png\\'" . "sxiv %s"))
-@end example
-
-@item guix-dot-default-arguments
-Command line arguments to run @command{dot} command.  If you change an
-output format (for example, into @code{-Tpdf}), you also need to change
-the next variable.
-
-@item guix-dot-file-name-function
-Function used to define a name of the generated graph file.  Default
-name is @file{/tmp/guix-emacs-graph-XXXXXX.png}.
-
-@end table
-
-So, for example, if you want to generate and open a PDF file in your
-Emacs, you may change the settings like this:
-
-@example
-(defun my-guix-pdf-graph ()
-  "/tmp/my-current-guix-graph.pdf")
-
-(setq guix-dot-default-arguments '("-Tpdf")
-      guix-dot-file-name-function 'my-guix-pdf-graph)
-@end example
-
-
-@node Emacs Prettify
-@section Guix Prettify Mode
-
-GNU@tie{}Guix also comes with ``guix-prettify.el''.  It provides a minor
-mode for abbreviating store file names by replacing hash sequences of
-symbols with ``@dots{}'':
-
-@example
-/gnu/store/72f54nfp6g1hz873w8z3gfcah0h4nl9p-foo-0.1
-@result{} /gnu/store/…-foo-0.1
-@end example
-
-Once you set up ``guix.el'' (@pxref{Emacs Initial Setup}), the following
-commands become available:
-
-@table @kbd
-
-@item M-x guix-prettify-mode
-Enable/disable prettifying for the current buffer.
-
-@item M-x global-guix-prettify-mode
-Enable/disable prettifying globally.
-
-@end table
-
-To automatically enable @code{guix-prettify-mode} globally on Emacs
-start, add the following line to your init file:
-
-@example
-(global-guix-prettify-mode)
-@end example
-
-If you want to enable it only for specific major modes, add it to the
-mode hooks (@pxref{Hooks,,, emacs, The GNU Emacs Manual}), for example:
-
-@example
-(add-hook 'shell-mode-hook 'guix-prettify-mode)
-(add-hook 'dired-mode-hook 'guix-prettify-mode)
-@end example
-
-
-@node Emacs Build Log
-@section Build Log Mode
-
-GNU@tie{}Guix provides major and minor modes for highlighting build
-logs.  So when you have a file with a package build output---for
-example, a file returned by @command{guix build --log-file @dots{}}
-command (@pxref{Invoking guix build}), you may call @kbd{M-x
-guix-build-log-mode} command in the buffer with this file.  This major
-mode highlights some lines specific to build output and provides the
-following key bindings:
-
-@table @kbd
-
-@item M-n
-Move to the next build phase.
-
-@item M-p
-Move to the previous build phase.
-
-@item @key{TAB}
-Toggle (show/hide) the body of the current build phase.
-
-@item S-@key{TAB}
-Toggle (show/hide) the bodies of all build phases.
-
-@end table
-
-There is also @kbd{M-x guix-build-log-minor-mode} which also provides
-the same highlighting and the same key bindings as the major mode, but
-prefixed with @kbd{C-c}.  By default, this minor mode is enabled in
-shell buffers (@pxref{Interactive Shell,,, emacs, The GNU Emacs
-Manual}).  If you don't like it, set
-@code{guix-build-log-minor-mode-activate} to nil.
-
-
-@node Emacs Completions
-@section Shell Completions
-
-Another feature that becomes available after configuring Emacs interface
-(@pxref{Emacs Initial Setup}) is completing of @command{guix}
-subcommands, options, packages and other things in @code{shell}
-(@pxref{Interactive Shell,,, emacs, The GNU Emacs Manual}) and
-@code{eshell} (@pxref{Top,,, eshell, Eshell: The Emacs Shell}).
-
-It works the same way as other completions do.  Just press @key{TAB}
-when your intuition tells you.
-
-And here are some examples, where pressing @key{TAB} may complete
-something:
-
-@itemize @w{}
-
-@item @code{guix pa}@key{TAB}
-@item @code{guix package -}@key{TAB}
-@item @code{guix package --}@key{TAB}
-@item @code{guix package -i gei}@key{TAB}
-@item @code{guix build -L/tm}@key{TAB}
-@item @code{guix build --sy}@key{TAB}
-@item @code{guix build --system=i}@key{TAB}
-@item @code{guix system rec}@key{TAB}
-@item @code{guix lint --checkers=sy}@key{TAB}
-@item @code{guix lint --checkers=synopsis,des}@key{TAB}
-
-@end itemize
-
-
-@node Emacs Development
-@section Development
-
-By default, when you open a Scheme file, @code{guix-devel-mode} will be
-activated (if you don't want it, set @code{guix-devel-activate-mode} to
-nil).  This minor mode provides the following key bindings:
-
-@table @kbd
-
-@item C-c . k
-Copy the name of the current Guile module into kill ring
-(@code{guix-devel-copy-module-as-kill}).
-
-@item C-c . u
-Use the current Guile module.  Often after opening a Scheme file, you
-want to use a module it defines, so you switch to the Geiser REPL and
-write @code{,use (some module)} there.  You may just use this command
-instead (@code{guix-devel-use-module}).
-
-@item C-c . b
-Build a package defined by the current variable definition.  The
-building process is run in the current Geiser REPL.  If you modified the
-current package definition, don't forget to reevaluate it before calling
-this command---for example, with @kbd{C-M-x} (@pxref{To eval or not to
-eval,,, geiser, Geiser User Manual})
-(@code{guix-devel-build-package-definition}).
-
-@item C-c . s
-Build a source derivation of the package defined by the current variable
-definition.  This command has the same meaning as @code{guix build -S}
-shell command (@pxref{Invoking guix build})
-(@code{guix-devel-build-package-source}).
-
-@item C-c . l
-Lint (check) a package defined by the current variable definition
-(@pxref{Invoking guix lint}) (@code{guix-devel-lint-package}).
-
-@end table
-
-Unluckily, there is a limitation related to long-running REPL commands.
-When there is a running process in a Geiser REPL, you are not supposed
-to evaluate anything in a scheme buffer, because this will ``freeze''
-the REPL: it will stop producing any output (however, the evaluating
-process will continue---you will just not see any progress anymore).  Be
-aware: even moving the point in a scheme buffer may ``break'' the REPL
-if Autodoc (@pxref{Autodoc and friends,,, geiser, Geiser User Manual})
-is enabled (which is the default).
-
-So you have to postpone editing your scheme buffers until the running
-evaluation will be finished in the REPL.
-
-Alternatively, to avoid this limitation, you may just run another Geiser
-REPL, and while something is being evaluated in the previous REPL, you
-can continue editing a scheme file with the help of the current one.
-
-
-@node Emacs Hydra
-@section Hydra
-
-The continuous integration server at @code{hydra.gnu.org} builds all
-the distribution packages on the supported architectures and serves
-them as substitutes (@pxref{Substitutes}).  Continuous integration is
-currently orchestrated by @uref{https://nixos.org/hydra/, Hydra}.
-
-This section describes an Emacs interface to query Hydra to know the
-build status of specific packages, discover recent and ongoing builds,
-view build logs, and so on.  This interface is mostly the same as the
-``list''/``info'' interface for displaying packages and generations
-(@pxref{Emacs Package Management}).
-
-The following commands are available:
-
-@table @kbd
-
-@item M-x guix-hydra-latest-builds
-Display latest failed or successful builds (you will be prompted for a
-number of builds).  With @kbd{C-u}, you will also be prompted for other
-parameters (project, jobset, job and system).
-
-@item M-x guix-hydra-queued-builds
-Display scheduled or currently running builds (you will be prompted for
-a number of builds).
-
-@item M-x guix-hydra-jobsets
-Display available jobsets (you will be prompted for a project).
-
-@end table
-
-In a list of builds you can press @kbd{L} key to display a build log of
-the current build.  Also both a list of builds and a list of jobsets
-provide @kbd{B} key to display latest builds of the current job or
-jobset (don't forget about @kbd{C-u}).