Commit Graph

151 Commits

Author SHA1 Message Date
Alex Kost
d9c9f9a515 emacs: Add 'guix-alist-put'.
* emacs/guix-utils.el (guix-alist-put, guix-alist-put-1)
  (guix-alist-put!): New procedures.
2016-01-02 17:25:35 +03:00
Alex Kost
4ba476f949 emacs: Add 'guix-keyword-args-let'.
* emacs/guix-utils.el (guix-keyword-args-let): New macro.
  (guix-utils-font-lock-keywords): Add it.
* emacs/guix-base.el (guix-define-buffer-type): Use it.
* emacs/guix-list.el (guix-list-define-entry-type): Use it.
* emacs/guix-read.el (guix-define-readers): Use it.
2016-01-02 17:25:35 +03:00
Alex Kost
376af769f9 emacs: list: Configure format in one place.
* emacs/guix-list.el: (guix-list-column-format): Merge this and...
  (guix-list-column-value-methods): ... this into...
  (guix-list-format): ... this.  New variable.
  (guix-list-tabulated-vector): Adjust accordingly.
  (guix-list-tabulated-format): Likewise.
  (guix-list-tabulated-entry): Likewise.
* doc/emacs.texi (Emacs Appearance): Likewise.
2016-01-02 17:25:35 +03:00
Alex Kost
0b9cd3206a emacs: Rename internal procedures.
* emacs/guix-list.el (guix-list-get-param-title): Rename to...
  (guix-list-param-title): ... this.
  (guix-list-get-column-format): Rename to...
  (guix-list-format): ... this.
  (guix-list-get-displayed-params): Rename to...
  (guix-list-displayed-params): ... this.
  (guix-list-get-sort-key): Rename to...
  (guix-list-tabulated-sort-key): ... this.
  (guix-list-make-tabulated-vector): Rename to...
  (guix-list-tabulated-vector): ... this.
  (guix-list-get-list-format): Rename to...
  (guix-list-tabulated-format): ... this.
  (guix-list-get-tabulated-entries): Rename to...
  (guix-list-tabulated-entries): ... this.
  (guix-list-get-tabulated-entry): Rename to...
  (guix-list-tabulated-entry): ... this.
* emacs/guix-info.el (guix-info-get-displayed-params): Rename to...
  (guix-info-displayed-params): ... this.
* emacs/guix-base.el (guix-get-params-for-receiving): Adjust
  accordingly.
  (guix-get-name-spec): Rename to...
  (guix-package-name-specification): ... this.
  (guix-get-full-name): Merge this and...
  (guix-entry-to-specification): ... this into...
  (guix-package-entry->name-specification): ... this.
  (guix-get-installed-outputs): Rename to...
  (guix-package-installed-outputs): ... this.
  (guix-get-package-id-and-output-by-output-id): Rename to...
  (guix-package-id-and-output-by-output-id): ... this.
2016-01-02 17:25:35 +03:00
Alex Kost
e86a43d471 emacs: list: Generate numerical sort predicates.
* emacs/guix-list.el: Generate predicates to sort tabulated list
  columns numerically.
  (guix-list-define-numerical-sorter)
  (guix-list-define-numerical-sorters): New macros
  (guix-list-column-format): Use 'guix-list-sort-numerically-0' for
  generation "Number" column.
2016-01-02 17:25:35 +03:00
Alex Kost
ceea647c72 emacs: Simplify defining parameter titles.
* emacs/guix-utils.el (guix-symbol-title): New procedure.
* emacs/guix-base.el (guix-get-param-title): Use it.
  (guix-param-titles): Remove most titles as they are automatically
  defined by 'guix-symbol-title'.
2016-01-02 17:25:35 +03:00
Alex Kost
73ce3c19c4 emacs: Add API for 'guix-entry'.
* emacs/guix-info.el: Use new entry procedures.
* emacs/guix-list.el: Likewise.
* emacs/guix-base.el: Likewise.
  (guix-get-entry-by-id): Move and rename to ...
* emacs/guix-entry.el (guix-entry-by-id): ...this.  New file.
  (guix-entry-value, guix-entry-id, guix-entries-by-ids)
  (guix-replace-entry): New procedures.
* emacs.am (ELFILES): Add new file.
2016-01-02 17:25:35 +03:00
Alex Kost
36c00c61fa emacs: Add 'guix-with-indent'.
* emacs/guix-utils.el (guix-with-indent): New macro.
  (guix-memoized-font-lock-keywords): Rename to...
  (guix-utils-font-lock-keywords): ... this.  Add it.
* emacs/guix-info.el (guix-info-insert-entry-default): Use it.
2016-01-02 17:25:35 +03:00
Alex Kost
778437ed9f emacs: Use "cl-list*" instead of "apply #'list".
* emacs/guix-command.el (guix-run-view-build-log): Use cl-list*.
  (guix-run-view-size-map): Likewise.
* emacs/guix-external.el (guix-dot-arguments): Likewise.
2016-01-02 17:25:35 +03:00
Alex Kost
1ccdc7f0be emacs: Use socket instead of port.
Suggested by Florian Paul Schmidt.

* emacs/guix-backend.el (guix-default-port): Remove.
  (guix-repl-socket-file-name-function, guix-repl-current-socket): New
  variables.
  (guix-repl-socket-file-name, guix-repl-delete-socket-maybe): New
  procedures.
  (guix-get-guile-program): Take socket as an optional argument.
  (guix-start-repl-maybe): Adjust accordingly.
2015-12-15 21:35:35 +03:00
Alex Kost
7ccb3ad3c1 emacs: 'node-type' is in (guix graph) now.
This is a followup to commit 8fb583714f.

* emacs/guix-main.scm (graph-type-names): Use 'node-type-name'
  from (guix graph) module.
2015-12-15 21:35:35 +03:00
Alex Kost
98f4a9004b emacs: Handle compiled autoloads.
* emacs/guix-emacs.el (guix-emacs-autoloads-regexp): New variable.
  (guix-emacs-find-autoloads-in-directory): Return a list of autoloads
  without extensions.
2015-12-11 14:34:03 +03:00
Alex Kost
1ae15c3646 emacs: Fix '--rounds' option in command popups.
* emacs/guix-command.el (guix-command-improve-common-build-argument):
  Use "R" key for '--rounds' option to avoid conflicts with "r" key in
  'build' popup (--root) and 'package' popup (--remove).
2015-12-09 19:55:04 +03:00
Alex Kost
dcb00c0ad5 emacs: Add 'guix-build-log-find-file'.
* emacs/guix-build-log.el (guix-build-log-find-file): New procedure.
* emacs/guix-command.el (guix-run-view-build-log): Use it.
2015-12-09 19:54:19 +03:00
Alex Kost
d7a58c60d6 emacs: list: Fontify time stamps.
* emacs/guix-list.el (guix-list-time): New face.
  (guix-list-get-time): Use it.
2015-12-09 19:54:19 +03:00
Alex Kost
d84018b5b1 emacs: info: Add 'guix-info-heading' face.
* emacs/guix-info.el (guix-info-heading): New face.
  (guix-package-info-heading): Inherit it.
2015-12-09 19:54:19 +03:00
Alex Kost
f5688801b2 emacs: info: Show a message after copying button label.
* emacs/guix-info.el (guix-info-button-copy-label): Use
  'guix-copy-as-kill' to display a message with what was killed.
2015-12-06 12:46:10 +03:00
Alex Kost
9ff175655c emacs: Complete --profile in 'guix package' popup.
* emacs/guix-command.el (guix-command-improve-package-argument): Use
  'guix-read-file-name' to complete --profile option.
2015-12-06 12:46:10 +03:00
Alex Kost
a65f007524 emacs: 'guix-emacs-load-autoloads' takes a profile.
* emacs/guix-emacs.el (guix-emacs-load-autoloads): Use 'profile'
  as an optional argument.
  (guix-emacs-load-autoloads-maybe): Adjust accordingly.
* emacs/guix-init.el: Likewise.
2015-12-06 12:46:10 +03:00
Alex Kost
c67e344f21 emacs: Fix 'guix-pull'.
* emacs/guix-base.el (guix-pull): Handle prefix argument when it is run
  interactively.  Use 'guix-command' instead of 'guix-pull' to prevent
  REPL exit if 'leave' happens.
2015-12-06 12:46:10 +03:00
Alex Kost
957b73382b emacs: Fix 'guix-apply-manifest'.
* emacs/guix-base.el (guix-apply-manifest): Use 'guix-command' instead
  of 'guix-package' to prevent REPL exit if 'leave' happens.  Expand
  profile and manifest file names, as relative file names lead to an
  error.
2015-12-06 12:46:10 +03:00
Alex Kost
59dc56390d emacs: Expand 'guix-load-path'.
Reported by Mathieu Lirzin <mthl@gnu.org> at
<http://lists.gnu.org/archive/html/guix-devel/2015-11/msg00585.html>.

* emacs/guix-backend.el (guix-start-repl): Expand 'guix-load-path' to
  avoid a potentially relative directory name in Guile %load-path.
2015-11-23 11:33:55 +03:00
Ludovic Courtès
f106b0e970 emacs: 'display-search-paths' now takes a list of profiles.
Fixes a regression introduced in fc2d233.

* emacs/guix-main.scm (process-package-actions): Make second argument to
  'display-search-paths' a list.
2015-11-16 10:54:23 +01:00
Alex Kost
8b341eb05d emacs: Adjust 'guix environment' popup.
* emacs/guix-command.el (guix-command-improve-environment-argument): Use
  "E" for '--expose' and "S" for '--share' to distinguish them from
  '--expression' and '--system' accordingly.  Make '--ad-hoc' an option
  taking packages instead of a simple switch.
  (guix-command-rest-argument): Complete shell command instead of
  packages for '--' argument.
  (guix-command-additional-arguments): Add fake 'packages' argument.
  New variable.
  (guix-command-additional-arguments): Use it.
  (guix-command-post-process-environment-packages,
  guix-command-post-process-environment-ad-hoc): New functions.
  (guix-command-post-processors): Add "environment" command with the new
  argument processors.
2015-11-12 21:22:35 +03:00
Alex Kost
cfa548b4ea emacs: Adjust 'guix container' popup.
* emacs/guix-command.el (guix-command-improve-action-argument): Use "C"
  key for 'container' action to distinguish it from 'challenge'.
  (guix-command-rest-argument): Add positional arguments.
2015-11-12 21:22:35 +03:00
Alex Kost
959c78f69a emacs: Improve post processing of popup arguments.
* emacs/guix-command.el (guix-command-switches,
  guix-command-rest-arg-regexp): New variables.
  (guix-command-post-processors,
  guix-command-post-process-matching-args,
  guix-command-post-process-rest-single,
  guix-command-post-process-rest-multiple,
  guix-command-post-process-rest-multiple-leave,
  guix-command-post-process-package-args): New functions.
  (guix-command-post-process-rest-multiple): Take 2 arguments.
  (guix-command-define-popup-action): Adjust accordingly.
* emacs/guix-utils.el (guix-modify): New function.
2015-11-12 21:22:35 +03:00
Alex Kost
f4044b586d emacs: Enable 'guix-build-log-minor-mode' in shell buffers.
* emacs/guix-build-log.el (guix-build-log-minor-mode-activate): New variable.
  (guix-build-log-minor-mode-activate-maybe): New function.
* emacs/guix-init.el: Add it to 'shell-mode-hook'.
* doc/emacs.texi (Emacs Build Log): Mention it.
2015-11-02 15:52:52 +03:00
Alex Kost
0048552d0d emacs: Enable 'guix-build-log-mode' for build log files.
* emacs/guix-build-log.el (auto-mode-alist): Add 'guix-build-log-mode'
  to 'auto-mode-alist'.
2015-11-02 15:52:52 +03:00
Alex Kost
6407ce8ea1 emacs: Add completions for '--type' option of 'refresh' popup.
* guix/scripts/refresh.scm: Export '%updaters'.
* emacs/guix-main.scm (refresh-updater-names): New procedure.
* emacs/guix-base.el (guix-refresh-updater-names): New function.
* emacs/guix-read.el (guix-read-refresh-updater-names,
  guix-read-refresh-updater-names-string): New functions.
* emacs/guix-command.el (guix-command-improve-refresh-argument): Use
  'guix-read-refresh-updater-names-string'.
2015-11-02 15:51:40 +03:00
Alex Kost
c42e6c6c2f emacs: Disable minor modes in 'guix-build-log-mode'.
* emacs/guix-build-log.el (guix-build-log-mode-hook): Remove
  'compilation-shell-minor-mode' as it is slow on big buffers, and
  'view-mode' as it rebinds too many keys.
  (guix-build-log-mode-map): Add "c" and "v" key bindings for the
  removed minor modes.
2015-10-31 23:22:41 +03:00
Alex Kost
20ce2fee33 emacs: Add key bindings for 'guix-build-log-minor-mode'.
* emacs/guix-build-log.el (guix-build-log-mode-map): Move keys to ...
  (guix-build-log-common-map): ...here.  New variable.
  (guix-build-log-minor-mode-map): New variable.
  (guix-build-log-minor-mode): Use it.
* doc/emacs.texi (Emacs Build Log): Document it.
2015-10-31 23:22:40 +03:00
Alex Kost
b0e44d4f7d emacs: Add shell completions for 'guix refresh --type'.
* emacs/guix-pcomplete.el (guix-pcomplete-refresh-updaters): New function.
  (guix-pcomplete-complete-option-arg): Complete '-t/--type' option for
  'guix refresh' command.
2015-10-31 23:21:23 +03:00
Ludovic Courtès
cd6f6c22fb services: Add 'modify-services'.
* gnu/services.scm (%modify-service, modify-services): New macros.
* gnu/services/base.scm (mingetty-service-type, guix-service-type):
  Export.
* emacs/guix-devel.el (guix-devel-keywords): Add 'modify-services'.
  Ditto in 'guix-devel-scheme-indent' call.
* doc/guix.texi (Using the Configuration System): Give an example of
  'modify-services'.
  (Service Reference): Document it.
2015-10-28 21:58:25 +01:00
Alex Kost
cfd56de3d8 emacs: Use 'switch-to-generation*'.
This is a followup to commit 06d45f4566.

* emacs/guix-base.el (guix-switch-to-generation): Replace
  'switch-to-generation' with 'switch-to-generation*'.
2015-10-27 21:54:57 +03:00
Alex Kost
e1d3318634 emacs: Add "Packages" option for 'guix challenge' popup.
* emacs/guix-command.el (guix-command-rest-argument): Add "challenge".
2015-10-27 21:54:57 +03:00
Alex Kost
402d73bc75 emacs: Add shell completions for 'guix challenge'.
* emacs/guix-pcomplete.el (guix-pcomplete-complete-command-arg): Add
  "challenge" to complete package names for it.
2015-10-27 21:54:57 +03:00
Alex Kost
4ab70c5ca0 emacs: devel: Add indentation rules for 'modify-phases' keywords.
* emacs/guix-devel.el: Add indentation rules for 'modify-phases' keywords.
  (guix-devel-indent-modify-phases-keyword,
  guix-devel-indent-modify-phases-keyword-1,
  guix-devel-indent-modify-phases-keyword-2): New functions.
2015-10-20 16:47:21 +03:00
Alex Kost
380566157d emacs: config: Use "emacs-config-" prefix for constants.
* emacs/guix-config.el.in (guix-emacs-interface-directory,
  guix-state-directory): Rename to ...
  (guix-config-emacs-interface-directory, guix-config-state-directory):
  ...this.
  (guix-config-guile-program): New constant.
  (guix-guile-program): Move to ...
* emacs/guix-external.el (guix-guile-program): ...here.  Make it a
  'defcustom'.
* emacs/guix-profiles.el (guix-default-profile): Use
  'guix-config-state-directory'.
* emacs/guix-backend.el (guix-load-path): Use
  'guix-config-emacs-interface-directory'.
2015-10-20 16:47:05 +03:00
Alex Kost
51805219a5 build: Set DOT_USER_PROGRAM for Emacs interface.
Suggested by Ludovic Courtès <ludo@gnu.org>.

* configure.ac: Set DOT_USER_PROGRAM variable.
* emacs/guix-config.el.in (guix-config-dot-program): New constant.
* emacs/guix-external.el (guix-dot-program): Use it.
2015-10-20 16:47:05 +03:00
Alex Kost
5d86684ddf emacs: devel: Highlight Guix keywords.
* emacs/guix-devel.el (guix-devel-keywords): New constant.
  (guix-devel-font-lock-keywords): Use it.
2015-10-17 18:57:30 +03:00
Alex Kost
7c0b02f5ae emacs: Improve file names of generated graphs.
Suggested by Ludovic Courtès <ludo@gnu.org>.

* emacs/guix-external.el (guix-png-file-name): Change prefix of a file
  name to "guix-emacs-graph-" to avoid possible conflicts.
2015-10-17 18:56:50 +03:00
Alex Kost
727495757f emacs: Add "View graph" actions to system graph commands.
* emacs/guix-command.el (guix-command-additional-execute-arguments,
  guix-command-special-executors): Add "View graph" actions for
  'dmd-graph' and 'extension-graph' commands.
2015-10-16 17:24:13 +03:00
Alex Kost
e0c5309a83 emacs: Disambiguate "d" key in 'system' popup.
* emacs/guix-command.el (guix-command-improve-system-argument): Use "D"
  key for 'disk-image' action (leave "d" for 'dmd-graph').
2015-10-16 17:14:57 +03:00
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