Commit graph

83 commits

Author SHA1 Message Date
Alex Kost
37c4ffc2c4 emacs: Improve 'guix-redisplay-buffer'.
* emacs/guix-base.el (guix-redisplay-buffer): Allow to display new entries.
  Restore point position.
2014-11-10 16:13:41 +03:00
Alex Kost
e718f6cc8f emacs: Add 'guix-find-file'.
* emacs/guix-utils.el (guix-find-file): New procedure.
* emacs/guix-info.el (guix-file): Use it.
2014-11-10 16:13:41 +03:00
Alex Kost
7be25d4af0 emacs: Restore mode-line after operation prompt.
* emacs/guix-base.el (guix-operation-prompt): Restore 'mode-line-format' after
  prompting.
2014-11-10 16:13:40 +03:00
Alex Kost
5614921754 emacs: Add "c" key binding to copy a button link.
* emacs/guix-info.el (guix-info-button-map): New variable.
  (guix-info-button-copy-label): New procedure.
* doc/emacs.texi (Emacs Info buffer): Mention a "c" key binding.
  (Emacs Keymaps): Add 'guix-info-button-map'.
2014-11-10 16:13:40 +03:00
Alex Kost
9a130e19fc emacs: Add 'guix-prettify'.
* emacs/guix-prettify.el: New file.
* emacs.am (ELFILES): Add it.
* doc/emacs.texi (Emacs Prettify): New node.
* doc/guix.texi (Features): Mention it.
2014-11-07 14:58:15 +03:00
Alex Kost
d38bd08c74 emacs: Add interface for comparing generations.
Suggested by Ludovic Courtès.

* doc/emacs.texi (Emacs List buffer): Document new key bindings.
* emacs/guix-base.el (guix-generation-packages-buffer-name-function,
  guix-generation-packages-update-buffer, guix-output-name-width): New
  variables.
  (guix-generation-file, guix-manifest-file, guix-generation-packages,
  guix-generation-packages-buffer-name-default,
  guix-generation-packages-buffer-name-long,
  guix-generation-packages-buffer-name, guix-generation-packages-buffer,
  guix-generation-insert-package, guix-generation-insert-packages,
  guix-profile-generation-manifest-file,
  guix-profile-generation-packages-buffer): New procedures.
* emacs/guix-list.el: Add key bindings for comparing generations.
  (guix-generation-list-generations-to-compare,
  guix-generation-list-show-added-packages,
  guix-generation-list-show-removed-packages, guix-generation-list-compare,
  guix-generation-list-ediff-manifests, guix-generation-list-diff-manifests,
  guix-generation-list-ediff-packages, guix-generation-list-diff-packages,
  guix-generation-list-ediff, guix-generation-list-diff): New procedures.
* emacs/guix-messages.el (guix-messages): Add 'generation-diff' search type.
  (guix-message-outputs-by-diff): New procedure.
* emacs/guix-utils.el (guix-diff-switches): New variable.
  (guix-diff): New procedure.
* emacs/guix-main.scm (package/output-sexps): Handle 'generation-diff' search
  type.
  (manifest-entry->package-specification,
  manifest-entries->package-specifications, generation-package-specifications,
  generation-package-specifications+paths, generation-difference): New
  procedures.
2014-11-04 15:51:22 +03:00
Alex Kost
62f261d88c emacs: Improve minibuffer messages.
* emacs/guix-base.el (guix-messages, guix-result-message): Move to
  'guix-messages.el'.
  (guix-set-buffer, guix-history-call, guix-redisplay-buffer): Adjust for
  the modified 'guix-result-message'.
* emacs/guix-messages.el: New file.
  (guix-redisplay-buffer): Add 'profile' argument.
  (guix-message-string-name, guix-message-string-entry-type,
  guix-message-string-entries, guix-message-packages-by-name,
  guix-message-generations-by-time): New procedures.
2014-11-04 15:51:21 +03:00
Alex Kost
833fdac028 emacs: Add package info heading.
Co-authored-by: Ludovic Courtès <ludo@gnu.org>

* emacs/guix-info.el: (guix-package-info-heading): New face.
  (guix-package-info-synopsis): Modify face.
  (guix-info-insert-entry-default, guix-package-info-insert-heading,
  guix-package-info-insert-with-heading): New procedures.
  (guix-package-info-heading-params, guix-info-insert-package-function,
  guix-info-insert-installed-function, guix-info-insert-output-function,
  guix-info-insert-generation-function): New variables.
2014-11-02 20:43:10 +03:00
Alex Kost
2d7bf94927 emacs: Add 'guix-pull' command.
* emacs/guix-base.el (guix-pull): New command.
  (guix-update-after-pull, guix-after-pull-hook): New variables.
  (guix-restart-repl-after-pull, guix-update-buffers-maybe-after-pull): New
  procedures.
* emacs/guix-main.scm: Use (guix scripts pull) module.
* doc/emacs.texi (Emacs Commands): Document 'guix-pull' command.
2014-10-27 21:52:56 +03:00
Alex Kost
17b50485a6 emacs: Improve REPL procedures.
* emacs/guix-backend.el (guix-start-process-maybe): Add 'start-msg' and
  'end-msg' optional arguments.
  (guix-start-repl-maybe): Likewise.  Do not kill buffer with a dead process.
  (guix-repl-exit): New procedure.
  (guix-eval-in-repl): Use 'geiser-repl--send'.
2014-10-27 21:52:56 +03:00
Alex Kost
f209da9f94 emacs: Improve buffer procedures.
* emacs/guix-base.el (guix-list-or-info-buffer-p): Delete.  Replace with...
  (guix-buffer-p): ... this.  New procedure.
  (guix-buffers): Use it.  Add 'modes' argument.
  (guix-update-buffer): New procedure.
  (guix-update-buffers-maybe): Rename to ...
  (guix-update-buffers-maybe-after-operation): this.  Use
  'guix-update-buffer'.
2014-10-27 21:52:56 +03:00
Alex Kost
ce2e4e3938 emacs: Introduce REPL operation type.
* emacs/guix-backend.el (guix-repl-operation-type): New variable.
  (guix-repl-output-filter): Run type hooks after performing an operation.
  (guix-eval-read): Add 'operation-type' argument.
2014-10-27 21:52:55 +03:00
Alex Kost
d2b299a91f emacs: Handle updating by ID after REPL restart.
* emacs/guix-base.el (guix-entry-to-specification,
  guix-entries-to-specifications): New procedures.
  (guix-revert-buffer): Search by name if searching by ID gives no results.
2014-10-27 21:52:55 +03:00
Alex Kost
23459fa59b emacs: Improve interface for working with multiple profiles.
Suggested by David Thompson, Ludovic Courtès and Mathieu Lirzin.

* emacs/guix-base.el (guix-profile-prompt): New procedure.
  (guix-set-current-profile): Use it.
  (guix-buffer-name-simple, guix-buffer-name-default, guix-buffer-name): New
  procedures.
  (guix-buffer-name-function, guix-profile): New variables.
  (guix-set-vars, guix-get-entries, guix-get-show-entries, guix-set-buffer,
  guix-history-call, guix-process-package-actions,
  guix-continue-package-operation-p, guix-delete-generations,
  guix-switch-to-generation): Add 'profile' argument.
* emacs/guix.el (guix-get-show-packages, guix-get-show-generations,
  guix-search-by-name, guix-search-by-regexp, guix-installed-packages,
  guix-obsolete-packages, guix-all-available-packages,
  guix-newest-available-packages, guix-generations, guix-generations-by-time):
  Likewise.
  (guix-last-generations): New command.
* emacs/guix-info.el: Adjust for using 'profile' argument where needed.
* emacs/guix-list.el: Likewise.
* doc/emacs.texi (Emacs Commands): Document 'guix-last-generations' and using
  "C-u" for commands.
  (Emacs Buffer Names): Document 'guix-buffer-name-function'.
2014-10-18 10:24:13 +04:00
Alex Kost
189cea2782 emacs: Add 'guix-generations-by-time' command.
* emacs/guix-main.scm (find-generations): Add finding generations by time.
* emacs/guix-utils.el (guix-read-date): New procedure.
* emacs/guix-base.el (guix-messages): Add new messages.
* emacs/guix.el (guix-generations-by-time): New command.
* doc/emacs.texi (emacs Commands): Document it.
2014-10-17 10:56:27 +04:00
Alex Kost
49d758d212 emacs: Support auto-updating after performing REPL operation.
* emacs/guix-backend.el (guix-operation-buffer): New variable.
  (guix-eval-in-repl): Use it.  Add optional 'operation-buffer' argument.
* emacs/guix-base.el (guix-update-after-operation): New variable.
  (guix-switch-to-buffer, guix-list-or-info-buffer-p, guix-buffers,
  guix-update-buffers-maybe): New procedures.
  (guix-set-buffer): Use 'guix-switch-to-buffer'.  Add optional 'no-display'
  argument.
  (guix-process-package-actions, guix-delete-generations,
  guix-switch-to-generation): Add optional 'operation-buffer' argument.
* emacs/guix-info.el (guix-package-info-insert-action-button,
  guix-generation-info-insert-number, guix-generation-info-insert-current):
  Adjust for using operation buffer.
* emacs/guix-list.el (guix-list-execute-package-actions,
  guix-generation-list-switch, guix-generation-list-execute): Likewise.
2014-10-16 10:09:53 +04:00
Alex Kost
063b60be7b emacs: Add hooks for REPL operations.
* emacs/guix-backend.el (guix-before-repl-operation-hook,
  guix-after-repl-operation-hook, guix-repl-operation-p): New variables.
  (guix-repl-operation-success-message, guix-repl-output-filter): New
  procedures.
  (guix-start-repl): Adjust for using 'guix-repl-output-filter'.
  (guix-eval-in-repl): Honor 'guix-before-repl-operation-hook'.
2014-10-16 10:09:53 +04:00
Alex Kost
af874238d4 emacs: Add support for switching generations.
* emacs/guix-base.el (guix-switch-to-generation): New procedure.
* emacs/guix-info.el (guix-generation-info-insert-current): Insert button for
  switching to generation.
* emacs/guix-list.el (guix-generation-list-switch): New procedure.
* doc/emacs.texi (emacs List buffer, emacs Info buffer): Document switching
  generations.
2014-10-13 14:59:35 +04:00
Alex Kost
c2379b3c1f emacs: Add 'current' generation parameter.
* emacs/guix-main.scm (generation-param-alist): Add 'current' parameter.
* emacs/guix-base.el (guix-param-titles): Add title for 'current' parameter.
* emacs/guix-info.el: Display 'current' parameter.
  (guix-generation-info-current, guix-generation-info-not-current): New faces.
  (guix-generation-info-insert-current): New procedure.
* emacs/guix-list.el: Display 'current' column.
  (guix-generation-list-get-current): New procedure.
2014-10-13 14:59:35 +04:00
Alex Kost
abc5b82971 emacs: Allow list functions to deal with nil values.
* emacs/guix-list.el (guix-list-get-tabulated-entry): Call functions returning
  column value even for nil values.
  (guix-list-get-one-line): Adjust for accepting nil argument.
2014-10-12 08:47:19 +04:00
Alex Kost
5d7a8584f5 ui: Move 'show-manifest-transaction' from (guix profiles).
* guix/profiles.scm: Do not use (guix ui) module.
  (right-arrow, manifest-show-transaction): Move and rename to...
* guix/ui.scm (right-arrow, show-manifest-transaction): ... here.
* tests/profiles.scm ("manifest-show-transaction"): Move to...
* tests/ui.scm ("show-manifest-transaction"): ... here.
  (guile-1.8.8, guile-2.0.9): New variables.
* emacs/guix-main.scm (process-package-actions): Rename
  'manifest-show-transaction' to 'show-manifest-transaction'.
* guix/scripts/package.scm (guix-package): Likewise.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2014-10-10 00:06:35 +02:00
Alex Kost
1f06b28899 emacs: Use 'with-store' in 'process-package-actions'.
* emacs/guix-main.scm (process-package-actions): Use 'with-store'.
2014-10-06 22:14:38 +04:00
Alex Kost
cb6a5c71d8 emacs: Add support for deleting generations.
* doc/emacs.texi (emacs List buffer): Mention new key bindings.
* emacs/guix-base.el (guix-delete-generations): New procedure.
* emacs/guix-info.el (guix-generation-info-insert-number): Use it.
* emacs/guix-list.el (guix-generation-list-mark-delete,
  guix-generation-list-execute): New procedures.
* emacs/guix-main.scm (delete-generations*): New procedure.
2014-10-06 00:02:46 +04:00
Alex Kost
b497a85be8 emacs: Add support for modifying options during operation confirmation.
* emacs/guix-base.el (guix-operation-option-key): New face.
  (guix-operation-option-true-string, guix-operation-option-false-string,
  guix-operation-option-separator, guix-operation-options): New variables.
  (guix-operation-option-by-key, guix-operation-option-key,
  guix-operation-option-name, guix-operation-option-variable,
  guix-operation-option-value, guix-operation-option-string-value,
  guix-operation-prompt, guix-operation-set-mode-line): New procedures.
  (guix-continue-package-operation-p): Use 'guix-operation-prompt'.
2014-10-02 22:31:18 +04:00
Alex Kost
3472bb20c5 emacs: Use package/output type variables where needed.
* emacs/guix-list.el (guix-package-list-type, guix-output-list-describe-type):
  Move to...
* emacs/guix-base.el: ... here.  Rename 'guix-output-list-describe-type' to
  'guix-package-info-type'.
* emacs/guix-info.el (guix-generation-info-insert-number): Use
  'guix-package-list-type'.
* emacs/guix.el (guix-get-show-packages): Use 'guix-package-info-type'.
2014-09-28 22:46:15 +04:00
Alex Kost
2e269860c4 emacs: Support font-locking.
Avoid breaking highlighting after adding new font-lock keywords.

* emacs/guix-base.el (guix-insert-package-strings): Use 'propertize' instead
  of 'guix-get-string'.
* emacs/guix-info.el (guix, guix-action, guix-file, guix-url,
  guix-package-location, guix-package-name): New button types.
  (guix-info-insert-action-button, guix-info-insert-file-path,
  guix-info-insert-url, guix-package-info-insert-location,
  guix-package-info-insert-full-names,
  guix-package-info-insert-non-unique-text): Adjust for 'guix-insert-button'
  and button types.
  (guix-package-info-name-button): New face.
  (guix-package-info-define-insert-inputs): Use it.  Add new button types.
  (guix-package-info-insert-full-name): Remove.
* emacs/guix-utils.el (guix-get-string): Replace 'face' with 'font-lock-face'.
  (guix-insert-button): Adjust for using button types.
2014-09-28 22:46:15 +04:00
Alex Kost
ce8b295352 emacs: Fix errors in receiving information.
* emacs/guix-main.scm (package-pattern-transformer,
  output-pattern-transformer): Add fallback 'match' clauses.
  (find-generations): Fix getting generations by IDs.
2014-09-28 22:46:14 +04:00
Alex Kost
a54a237b5f emacs: Add support for displaying outputs.
Suggested by Taylan Ulrich Bayirli/Kammer and Ludovic Courtès.

* emacs/guix-base.el (guix-param-titles): Add output titles.
  (guix-messages): Add output messages.
  (guix-get-package-id-and-output-by-output-id): New procedure.
  (guix-define-buffer-type): Add ':buffer-name' key.
* emacs/guix-info.el: Add "output-info" buffer type.
  (guix-info-insert-methods): Add output methods.
  (guix-info-displayed-params): Add output params.
  (guix-output-info-insert-version, guix-output-info-insert-output): New
  procedures.
* emacs/guix-list.el: Add "output-list" buffer type.
  (guix-list-column-format): Add output formats.
  (guix-list-column-value-methods): Add output methods.
  (guix-package-list-type): New variable.
  (guix-generation-list-show-packages): Use it.
  (guix-package-list-marking-check): Use 'guix-output-list-mode'.
  (guix-list-mark-package-upgrades): New procedure.
  (guix-package-list-mark-upgrades): Use it.
  (guix-list-execute-package-actions): New procedure.
  (guix-package-list-execute): Use it.
  (guix-list-describe-maybe): New procedure.
  (guix-list-describe): Use it.
  (guix-output-list-mark-install, guix-output-list-mark-delete,
  guix-output-list-mark-upgrade, guix-output-list-mark-upgrades,
  guix-output-list-execute, guix-output-list-make-action,
  guix-output-list-describe): New procedures.
  (guix-output-list-describe-type): New variable.
* emacs/guix.el (guix-get-show-packages): Use 'guix-package-list-type'.
* doc/emacs.texi (emacs Commands): Mention 'guix-package-list-type'.
  (emacs List buffer): Adjust accordingly.
  (emacs Info buffer): Likewise.
  (emacs Buffer Names): New node.
  (emacs Keymaps): Add keymaps for output buffers.
2014-09-24 16:09:20 +04:00
Alex Kost
81b339fe31 emacs: Rewrite scheme side in a functional manner.
* emacs/guix-main.scm: Rewrite in a functional way.  Add support for output
  entries.
  (%current-manifest, %current-manifest-entries-table,
  set-current-manifest-maybe!): Replace with...
  (manifest-entries->hash-table, manifest->hash-table): ... this.
  (manifest-entries-by-name+version): Replace with...
  (manifest-entries-by-name): ... this.
  (fold-manifest-entries): Rename to...
  (fold-manifest-by-name): ... this.
  (package-installed-param-alist): Rename to...
  (%manifest-entry-param-alist): ... this.
  (package-param-alist): Rename to...
  (%package-param-alist): this.
  (manifest-entry->installed-entry): Rename to...
  (manifest-entry->sexp): ... this.
  (manifest-entries->installed-entries): Rename to...
  (manifest-entries->sexps): ... this.
  (matching-generation-entries): Replace with...
  (matching-generations): ... this.
  (last-generation-entries): Replace with...
  (last-generations): ... this.
  (get-entries): Rename to...
  (entries): ... this.
  (installed-entries-by-name+version, installed-entries-by-package,
  matching-package-entries, fold-object, package-entries-by-name+version,
  package-entries-by-spec, package-entries-by-regexp, package-entries-by-ids,
  newest-available-package-entries, all-available-package-entries,
  manifest-package-entries, installed-package-entries,
  generation-package-entries, obsolete-package-entries,
  all-generation-entries, generation-entries-by-ids, profile-generations,
  %package-entries-functions, %generation-entries-functions): Remove.
  (manifest=?, manifest-entry->name+version+output, manifest-entry-by-output,
  list-maybe, matching-packages, filter-packages-by-output, packages-by-name,
  manifest-entry->packages, all-available-packages, newest-available-packages,
  specification->package-pattern, specification->output-pattern,
  id->package-pattern, id->output-pattern, specifications->package-patterns,
  specifications->output-patterns, ids->package-patterns,
  ids->output-patterns, manifest-patterns-result, obsolete-package-patterns,
  obsolete-output-patterns, manifest-package-patterns,
  manifest-output-patterns, obsolete-package-sexp,
  package-pattern-transformer, output-pattern-transformer, entry-type-error,
  search-type-error, pattern-transformer, patterns-maker,
  package/output-sexps, find-generations, generation-sexps): New procedures.
  (%pattern-transformers, %patterns-makers): New variables.
* emacs/guix-base.el (guix-continue-package-operation-p): Adjust accordingly.
* emacs/guix-info.el (guix-package-info-insert-action-button): Likewise.
2014-09-24 16:09:20 +04:00
Alex Kost
dfeb023927 emacs: Use general functions instead of generated ones.
* emacs/guix-base.el: Add and use general functions instead of
  specialized functions generated by 'guix-define-buffer-type' macro.
  (guix-buffer-type, guix-entry-type): New variables.
  (guix-set-vars): Add new variables.
  (guix-get-show-entries, guix-show-entries, guix-set-buffer)
  (guix-history-call, guix-make-history-item)
  (guix-get-params-for-receiving, guix-revert-buffer)
  (guix-redisplay-buffer): New functions.
  (guix-define-buffer-type): Do not generate specialized functions.
* emacs/guix-info.el (guix-package-info-insert-full-names): Use
  'guix-get-show-entries'.
  (guix-generation-info-insert-number): Likewise.
* emacs/guix-list.el (guix-list-describe): New function.
  (guix-list-define-entry-type): Do not generate specialized one.
  (guix-generation-list-show-packages): Use 'guix-get-show-entries'.
* emacs/guix.el (guix-show-generations-function): Remove.
  (guix-get-show-packages): Use new functions.
  (guix-get-show-generations): Likewise.
2014-09-24 16:09:20 +04:00
Alex Kost
91cc37a1e3 emacs: Improve key bindings for marking the packages.
Use "U" to upgrade the current package, "^" to upgrade all.

* emacs/guix-list.el: (guix-list-unmark): With prefix, mark all.
  (guix-package-list-mark-outputs): New procedure.
  (guix-package-list-mark-install, guix-package-list-mark-delete)
  (guix-package-list-mark-upgrade): Use it.
  (guix-package-list-mark-upgrades): New command.
* doc/emacs.texi (emacs List buffer): Update the manual accordingly.
2014-09-08 22:01:58 +04:00
Alex Kost
8ed08c7602 emacs: Add a face for installed packages.
* emacs/guix-list.el (guix-package-list-installed): New face.
  (guix-package-list-get-name): Use it.
2014-09-06 20:21:21 +04:00
Alex Kost
457f60fa06 Add Emacs user interface.
* configure.ac (emacsuidir): New variable.
  (AC_CONFIG_FILES): Add 'emacs/guix-init.el', 'emacs/guix-helper.scm'.
* Makefile.am: Include 'emacs.am'.
* emacs.am: New file.
* doc/emacs.texi: New file.
* doc/guix.texi: Include 'emacs.texi'.
* emacs/guix-backend.el: New file.
* emacs/guix-base.el: New file.
* emacs/guix-helper.scm.in: New file.
* emacs/guix-history.el: New file.
* emacs/guix-info.el: New file.
* emacs/guix-init.el.in: New file.
* emacs/guix-list.el: New file.
* emacs/guix-main.scm: New file.
* emacs/guix-utils.el: New file.
* emacs/guix.el: New file.
2014-09-03 23:50:35 +04:00