Commit graph

108 commits

Author SHA1 Message Date
Alex Kost
b1b53df382 emacs: init: Add "share/emacs/site-lisp" to 'load-path'.
Fixes a regression introduced in 7741139080.

Reported by Ludovic Courtès <ludo@gnu.org>.

Not all emacs packages have "...-autoloads.el" files, so there is a
chance that "~/.guix-profile/share/emacs/site-lisp" will not be added to
'load-path', so add it unconditionally.

* emacs/guix-init.el: Add guix emacs directory to 'load-path'.  Move
  requiring 'guix-emacs' to the top-level.
2015-10-16 17:14:57 +03:00
Alex Kost
17fa842b79 emacs: devel: Add indentation rules.
Suggested by Ludovic Courtès <ludo@gnu.org>.

* emacs/guix-devel.el: Add indentation rules for Guix macros/procedures.
  (guix-devel-scheme-indent): New macro.
  (guix-devel-indent-package): New function.
2015-10-14 19:20:28 +03:00
Alex Kost
ad8b83bda0 emacs: Add 'guix-devel-build-package-source'.
Suggested by Ludovic Courtès <ludo@gnu.org>.

* guix/scripts.scm (build-package-source): New procedure.
* emacs/guix-devel.el (guix-devel-build-package-source): New command.
  (guix-devel-keys-map): Add key binding for it.
* doc/emacs.texi (Emacs Development): Document it.
2015-10-12 10:59:31 +03:00
Alex Kost
b94ef11a53 emacs: Add 'guix-devel-lint-package'
Suggested by Ludovic Courtès <ludo@gnu.org>.

* emacs/guix-devel.el (guix-devel-setup-repl): Add a workaround for
  'guix-warning-port'.
  (guix-devel-lint-package): New command.
  (guix-devel-keys-map): Add key binding for it.
* doc/emacs.texi (Emacs Development): Document it.
2015-10-09 16:17:45 +03:00
Alex Kost
5952111cc0 emacs: Add 'guix-devel-with-definition'.
* emacs/guix-devel.el (guix-devel-with-definition): New macro.
  (guix-devel-build-package-definition): Use it.
  (guix-devel-emacs-font-lock-keywords): New variable.
2015-10-09 16:17:45 +03:00
Alex Kost
5a60d56975 emacs: Fix 'guix-devel-setup-repl'.
Setting up guix ports needs to be done in Geiser REPL synchronously,
otherwise this operation may not be finished before the further
evaluating of guile code.

* emacs/guix-guile.el (guix-guile-prompt?): New function.
* emacs/guix-geiser.el (guix-geiser-eval-in-repl-synchronously): New
  function.
* emacs/guix-devel.el (guix-devel-setup-repl): Use it.
2015-10-09 16:17:45 +03:00
Alex Kost
7c786db4fb emacs: Fix 'guix-build-log-phase-toggle-all'.
* emacs/guix-build-log.el (guix-build-log-phase-toggle-all): Handle the
  case when there are no characters before the first phase:
  'guix-build-log-next-phase' moves to the second phase in such a case,
  and the toggling is not done properly, so use 're-search-forward'
  instead.
2015-10-09 16:17:45 +03:00
Alex Kost
88908d55e0 emacs: devel: Fix 'modify-phases' highlighting.
* emacs/guix-devel.el (guix-devel-modify-phases-font-lock-pre): Handle
  the case when 'modify-phases' is commented.
2015-10-09 16:17:44 +03:00
Alex Kost
1af9815d81 emacs: devel: Highlight gexp symbols.
Suggested by Ludovic Courtès <ludo@gnu.org>.

* emacs/guix-devel.el (guix-devel-gexp-symbol): New face.
  (guix-devel-font-lock-keywords): Adjust to handle gexp symbols.
2015-10-09 16:14:11 +03:00
Alex Kost
730bf80888 emacs: devel: Highlight 'modify-phases' keywords.
* emacs/guix-guile.el (guix-guile-keyword-regexp): New function.
* emacs/guix-devel.el (guix-devel-faces): New custom group.
  (guix-devel-modify-phases-keyword): New face.
  (guix-devel-modify-phases-keyword-regexp,
  guix-devel-font-lock-keywords): New variables.
  (guix-devel-modify-phases-font-lock-matcher,
  guix-devel-modify-phases-font-lock-pre): New functions.
  (guix-devel-mode): Adjust to add/remove font-lock-keywords.
2015-09-26 22:38:43 +03:00
Alex Kost
665ce1ebe5 emacs: build-log: Improve regexp for the phase end.
* emacs/guix-build-log.el (guix-build-log-phase-end-regexp): Handle
  fractional number of seconds (like "0.8").
2015-09-25 10:45:38 +03:00
Alex Kost
1a6c4c2f37 emacs: Add 'guix-devel-build-package-definition'.
Suggested by Ludovic Courtès <ludo@gnu.org>.

* emacs/guix-guile.el (guix-guile-definition-regexp): New variable.
  (guix-guile-current-definition, guix-guile-boolean): New functions.
* emacs/guix-devel.el: Require 'guix-base'.
  (guix-devel-repl-processes): New variable.
  (guix-devel-setup-repl, guix-devel-setup-repl-maybe): New functions.
  (guix-devel-build-package-definition): New command.
* doc/emacs.texi (Emacs Development): Document it.
2015-09-23 13:36:37 +03:00
Alex Kost
187f80c6c5 emacs: Add development utils.
* emacs/guix-guile.el (guix-guile-current-module): New function.
* emacs/guix-devel.el: New file.
* emacs.am (ELFILES): Add it.
* doc/emacs.texi (Emacs Development): New node.
  (Emacs Interface): Add it.
* doc/contributing.texi (The Perfect Setup): Mention it.
* doc/guix.texi (Top): Add it.
* emacs/guix-init.el: Add 'guix-devel-activate-mode-maybe' to
  'scheme-mode-hook'.
2015-09-23 13:36:37 +03:00
Alex Kost
6f05a24df3 emacs: Add "View map" action to 'size' popup.
* emacs/guix-command.el (guix-run-view-size-map): New function.
  (guix-command-additional-execute-arguments,
  guix-command-special-executors): Add entries for "View map" action.
2015-09-23 13:36:22 +03:00
Alex Kost
f80a7a6c58 emacs: Add code to call guile procedures.
* emacs/guix-guile.el (guix-guile-make-call-expression): New function.
* emacs/guix-geiser.el: Require 'guix-guile'.
  (guix-geiser-call, guix-geiser-call-in-repl): New functions.
2015-09-22 22:05:10 +03:00
Alex Kost
f029f8a759 emacs: Move code for evaluating to "guix-geiser.el".
* emacs/guix-backend.el: Adjust commentary. Move "eval" code to ...
  (guix-eval, guix-eval-read, guix-eval-in-repl): Adjust to use new
  functions.
* emacs/guix-geiser.el: ...here.  New file.
  (guix-geiser-eval, guix-geiser-eval-read, guix-geiser-eval-in-repl,
  guix-repl-send): New functions.
* emacs.am (ELFILES): Add "guix-geiser.el".
2015-09-22 22:05:09 +03:00
Alex Kost
c74cd6cc12 emacs: Move guile related code to "guix-guile.el".
* emacs/guix-backend.el (guix-make-guile-expression): Move to...
* emacs/guix-guile.el: ... here.  New file.
* emacs/guix-base.el: Use it.
* emacs/guix-command.el: Use it.
* emacs.am (ELFILES): Add it.
2015-09-22 22:05:09 +03:00
Alex Kost
67ee7c9576 emacs: Improve 'guix-prettify-regexp'.
* emacs/guix-prettify.el (guix-prettify-regexp): Modify to handle "nar"
  and "log".
2015-09-22 13:04:44 +03:00
Alex Kost
b2cb869cf9 emacs: Replace 'guix-any' with 'cl-some'.
* emacs/guix-utils.el (guix-any): Remove.
* emacs/guix-command.el (guix-command-improve-argument): Use 'cl-some'
  instead of 'guix-any'.
2015-09-18 21:41:46 +03:00
Alex Kost
eda1cc8b5d emacs: Add commands to show/hide build log phases.
Suggested by Ludovic Courtès <ludo@gnu.org>.

* emacs/guix-build-log.el (guix-build-log-phase-end-regexp): New
  variable.
  (guix-build-log-phase-start, guix-build-log-phase-end,
  guix-build-log-phase-hide, guix-build-log-phase-show,
  guix-build-log-phase-hidden-p, guix-build-log-phase-toggle-function,
  guix-build-log-phase-toggle, guix-build-log-phase-toggle-all): New functions.
  (guix-build-log-mode-map): Add 'TAB'/'S-TAB' key bindings.
* doc/emacs.texi (Emacs Build Log): Document them.
2015-09-18 21:41:23 +03:00
Alex Kost
83d95c7b36 emacs: Add "View build log" action to build popup.
* emacs/guix-command.el (guix-run-view-build-log): New function.
  (guix-command-additional-execute-arguments,
  guix-command-special-executors): Add entries for "View build log"
  action.
* emacs/guix-utils.el (guix-find-file-or-url): New function.
2015-09-15 15:19:31 +03:00
Alex Kost
34850cd59d emacs: Add modes for viewing build logs.
* emacs/guix-build-log.el: New file.
* emacs.am (ELFILES): Add it.
* doc/emacs.texi (Emacs Build Log): Document it.  New node.
  (Emacs Interface): Add it.
* doc/guix.texi (Top): Likewise.
2015-09-15 15:19:31 +03:00
Alex Kost
ea369ee1b0 emacs: Display guix command errors in the minibuffer.
* emacs/guix-main.scm (output+error): New procedure.
  (guix-command-output): Use it.
* emacs/guix-base.el (guix-command-output): Display error output in the
  minibuffer.
2015-09-15 15:19:31 +03:00
Alex Kost
46e17df661 emacs: Add customization groups for faces.
* emacs/guix.el (guix-faces): New custom group.
* emacs/guix-base.el (guix-operation-option-key): Use it.
  (guix-define-buffer-type): Generate faces group.
* emacs/guix-info.el: Adjust faces to use new groups.
  (guix-info-faces): New custom group.
* emacs/guix-list.el: Likewise
  (guix-list-faces): New custom group.
2015-09-15 15:19:30 +03:00
Mathieu Lirzin
1cd4027cfd ui: Add package-description-string.
Provide support for Texinfo's markup in package description.

* guix/ui.scm (%text-width): New parameter.
  (texi->plain-text): New variable.
  (package->recutils): Use them.
  (package-description-string): New variable.
* emacs/guix-main.scm (%package-param-alist): Use it.
* gnu/packages/perl.scm (perl-devel-globaldestruction)
  (perl-devel-lexalias, perl-exporter-lite): Adapt to Texinfo's markup.
* gnu/packages/python.scm (python2-empy): Likewise.
2015-09-08 07:44:53 +02:00
Alex Kost
00f34aaafe emacs: Add support for "triplet" package inputs.
Fixes <http://bugs.gnu.org/21399>.

* emacs/guix-main.scm (full-name->name+version): Adjust to handle
  "name-version:output" string.
  (package-inputs-names): Support ("name" package "output") inputs.
2015-09-04 16:01:35 +03:00
Alex Kost
d1f80aa401 emacs: Use "r" key for 'cran' action in 'import' popup.
* emacs/guix-command.el (guix-command-improve-import-argument): New
  variable and function.
  (guix-command-argument-improvers): Add it.
2015-09-02 17:00:06 +03:00
Alex Kost
761d6fd9c1 emacs: Add "View graph" action to graph popup.
* emacs/guix-command.el: Require 'guix-external'.
  (guix-run-view-graph): New function.
  (guix-command-additional-execute-arguments,
  guix-command-special-executors): Add entries for "View graph" action.
2015-09-01 13:03:51 +03:00
Alex Kost
32c0b6d78c emacs: Allow users to choose a 'find-file' function.
* emacs/guix-utils.el (guix-find-file-function): New variable.
  (guix-find-file): Use it.
2015-09-01 13:03:51 +03:00
Alex Kost
70fabd498c emacs: Add code to run 'dot' program.
* emacs/guix-external.el: New file.
* emacs.am (ELFILES): Add it.
2015-09-01 13:03:50 +03:00
Alex Kost
8b9ceb8d03 emacs: Add code to pipe guix output to external program.
* emacs/guix-main.scm: Use (ice-9 popen) module.
  (pipe-guix-output): New procedure.
2015-09-01 13:03:50 +03:00
Mathieu Lirzin
9a479bc383 emacs: Use only one guix-load-path variable.
emacs/guix-init.el (guix-load-path): Move to ...
emacs/guix-backend.el (guix-load-path): ... Here. Redefine it.
2015-08-30 22:46:21 +02:00
Mathieu Lirzin
7061938fdb emacs: Fix guix-guile-program default value.
Fixes <http://bugs.gnu.org/21127>.

* emacs/guix-backend.el: Use guix-config.
  (guix-guile-program): Move to ...
* emacs/guix-config.el.in (guix-guile-program): ... here.  Use Guile
  program file name from compile-time instead of depending on PATH.
2015-08-30 22:45:47 +02:00
Mathieu Lirzin
bd6163d13f build: Produce 'guix-config' instead of using compile-time tricks.
* emacs/guix-{init,profiles}.el.in: Rename to ...
* emacs/guix-{init,profiles}.el: ... these.  New files.
  Use 'guix-config'.
* emacs/guix-config.el.in: New file.
* emacs.am (nodist_lisp_DATA): Add it.  Move them to ...
  (ELFILES): ... here.
* .gitignore, configure.ac: Adjust accordingly.
2015-08-30 19:20:12 +02:00
Alex Kost
eb097f36b1 emacs: Use prompt for packages instead popup for edit action.
* emacs/guix-base.el (guix-package-location): New function.
  (guix-edit-package): Rename and move to ...
* emacs/guix.el (guix-edit): ...here.  Make it interactive.
* emacs/guix-command.el (guix-edit-action): New function (alias to
  'guix-edit') to override the popup for edit command in "M-x guix".
* emacs/guix-list.el (guix-list-edit-package): Adjust for 'guix-edit'
  renaming.
* emacs/guix-main.scm (package-location-string): Allow to accept package
  id or package name as argument.
2015-08-30 18:26:03 +03:00
Alex Kost
9b0afb0d28 emacs: Add popup interface for guix commands.
* emacs/guix-command.el: New file.
* emacs.am (ELFILES): Add it.
* doc/emacs.texi (Emacs Initial Setup): Mention 'magit-popup' library.
  (Emacs Popup Interface): New node.
  (Emacs Interface): Add it.
* doc/guix.texi (Top): Likewise.
2015-08-30 18:26:03 +03:00
Alex Kost
1f13861b57 emacs: Add "guix-popup.el".
* emacs/guix-popup.el: New file.
* emacs.am (ELFILES): Add it.
2015-08-30 18:26:03 +03:00
Alex Kost
7008dffff5 emacs: Add code to run guix command in shell.
* emacs/guix-base.el (guix-run-in-shell, guix-run-in-eshell,
  guix-run-command-in-shell): New functions.
  (guix-run-in-shell-function, guix-shell-buffer-name): New variables.
2015-08-30 18:26:02 +03:00
Alex Kost
5e53b0c5a9 emacs: Add code to run guix command in REPL.
* emacs/guix-base.el (guix-run-command-in-repl, guix-command-output,
  guix-help-string): New functions.
* emacs/guix-main.scm (guix-command, guix-command-output, help-string):
  New procedures.
2015-08-30 18:26:02 +03:00
Alex Kost
51dac38339 emacs: Add and use alist accessors.
* emacs/guix-utils.el (guix-define-alist-accessor): New macro.
  (guix-assq-value, guix-assoc-value): New functions.
  (guix-get-key-val): Remove.
* emacs/guix-base.el: Replace 'guix-get-key-val' with 'guix-assq-value'
  everywhere.
* emacs/guix-info.el: Likewise.
* emacs/guix-list.el: Likewise.
* emacs/guix-messages.el: Likewise.
2015-08-30 18:26:02 +03:00
Alex Kost
d007d8a10c emacs: Add minibuffer readers.
* emacs/guix-read.el: New file.
* emacs.am (ELFILES): Add it.
2015-08-30 18:26:02 +03:00
Alex Kost
26476d5852 emacs: Add help variables.
* emacs/guix-pcomplete.el (guix-pcomplete-parse-package-regexp,
  guix-pcomplete-parse-command-regexp,
  guix-pcomplete-parse-long-option-regexp,
  guix-pcomplete-parse-short-option-regexp,
  guix-pcomplete-parse-list-regexp, guix-pcomplete-parse-regexp-group,
  guix-pcomplete-systems, guix-pcomplete-hash-formats,
  guix-pcomplete-refresh-subsets, guix-pcomplete-key-policies): Move and
  rename to ...
* emacs/guix-help-vars.el (guix-help-parse-package-regexp,
  guix-help-parse-command-regexp, guix-help-parse-long-option-regexp,
  guix-help-parse-short-option-regexp, guix-help-parse-list-regexp,
  guix-help-parse-regexp-group, guix-help-system-types,
  guix-help-hash-formats, guix-help-refresh-subsets,
  guix-help-key-policies): ...here.  New file.
  (guix-help-parse-option-regexp, guix-help-source-types,
  guix-help-verify-options, guix-help-elpa-archives): New variables.
* emacs.am (ELFILES): Add "guix-help-vars.el".
2015-08-30 18:26:02 +03:00
Alex Kost
25a2839c9d emacs: Add 'guix-package-names'.
* emacs/guix-main.scm (package-names, package-names-lists): New procedures.
* emacs/guix-base.el (guix-package-names): New function.
2015-08-30 18:26:02 +03:00
Alex Kost
43b40c4b15 emacs: Add 'guix-graph-type-names'.
* emacs/guix-main.scm: Use (guix scripts graph) module.
  (graph-type-names): New procedure.
* emacs/guix-base.el (guix-graph-type-names): New function.
2015-08-30 18:26:02 +03:00
Alex Kost
056b5ceffc emacs: Add 'guix-lint-checker-names'.
* emacs/guix-main.scm: Use (guix scripts lint) module.
  (lint-checker-names): New procedure.
* emacs/guix-base.el (guix-lint-checker-names): New function.
2015-08-30 18:26:02 +03:00
Alex Kost
6543601fa0 emacs: Add 'guix-memoized-defalias' macro.
* emacs/guix-utils.el (guix-memoized-defalias): New macro.
  (guix-memoized-font-lock-keywords): New variable.
2015-08-30 18:26:01 +03:00
Alex Kost
e767752c79 emacs: Add 'guix-any'.
* emacs/guix-utils.el (guix-any): New function.
2015-08-30 18:26:01 +03:00
Alex Kost
ad0f31f6a5 emacs: Add utils to copy guix command.
* emacs/guix-utils.el (guix-copy-as-kill, guix-copy-command-as-kill):
  New functions.
2015-08-30 18:26:01 +03:00
Alex Kost
009d6388e6 emacs: Add utils to make symbol and string for guix command.
* emacs/guix-utils.el (guix-shell-quote-argument, guix-command-symbol,
  guix-command-string): New functions.
2015-08-30 18:26:01 +03:00
Alex Kost
1ce96dd927 emacs: Add and use 'guix-concat-strings'.
* emacs/guix-utils.el (guix-concat-strings): New function.
* emacs/guix-pcomplete.el (guix-pcomplete-short-options): Use it.
* emacs/guix-base.el (guix-get-package-strings): Likewise.
2015-08-30 18:26:01 +03:00