Commit graph

26 commits

Author SHA1 Message Date
Alex Kost
6ea80938ae emacs: Factorize code for buffer names.
* emacs/guix-ui.el (guix-ui-buffer-name-default): Extract the code to
  compose buffer name and move to...
* emacs/guix-utils.el (guix-compose-buffer-name): ... here.  New procedure.
2016-04-15 11:32:36 +03:00
Alex Kost
32950fc846 emacs: Add Hydra interface.
* emacs/guix-utils.el (guix-hexify, guix-number->bool): New procedures.
  (guix-while-null): New macro.
* emacs/guix-hydra.el: New file.
* emacs/guix-hydra-build.el: New file.
* emacs/guix-hydra-jobset.el: New file.
* emacs.am (ELFILES): Add them.
* doc/emacs.texi (Emacs Hydra): New node.
  (Emacs Interface): Add it.
* doc/guix.texi (Top): Add it.
  (Substitutes): Mention Emacs interface.
2016-01-02 17:25:35 +03:00
Alex Kost
dc690c445e emacs: Return nil instead of "" in completing readers.
* emacs/guix-utils.el (guix-completing-read): New procedure.
  (guix-define-readers): Use it.
2016-01-02 17:25:35 +03:00
Alex Kost
b1990426fd emacs: Reorganize 'readers' code.
* emacs/guix-base.el (guix-graph-type-names, guix-refresh-updater-names)
  (guix-lint-checker-names, guix-package-names): Move to...
* emacs/guix-read.el: ... here.
  (guix-read-file-name, guix-define-reader, guix-define-readers): Move to...
* emacs/guix-utils.el: ... here.
2016-01-02 17:25:35 +03:00
Alex Kost
2c7ed388cf emacs: info: Generalize inserting and formatting.
* emacs/guix-info.el: Use a more flexible format for inserting any data.
  (guix-info-ignore-empty-vals): Rename to...
  (guix-info-ignore-empty-values): ... this.
  (guix-info-insert-methods): Merge this and...
  (guix-info-displayed-params): ... this into...
  (guix-info-format): ... this.  Change format specifications.
  (guix-info-title-aliases, guix-info-value-aliases): New variables.
  (guix-info-displayed-params): Adjust for the new format.
  (guix-info-insert-entry): Likewise.
  (guix-package-info-fill-heading): Replace with...
  (guix-info-fill): ... this.
  (guix-info-insert-param): Replace with...
  (guix-info-insert-entry-unit): ... this.
  (guix-info-insert-title-default): Replace with...
  (guix-info-insert-title-format): ... this.
  (guix-info-insert-val-default): Replace with...
  (guix-info-insert-value-format): ... this.
  (guix-info-insert-val-simple): Replace with...
  (guix-info-insert-value-indent): ... this.
  (guix-package-info-insert-source): Adjust accordingly.
  (guix-package-info-insert-heading): Insert only name and version.
  (guix-package-info-define-insert-inputs): Do not generate
  'guix-package-info-insert-ENTRY-TYPE-inputs' procedures.
  (guix-info-fill-column, guix-info-insert-entry-default)
  (guix-info-method-funcall, guix-info-insert-file-path)
  (guix-info-insert-url, guix-info-insert-package-function)
  (guix-info-insert-installed-function)
  (guix-info-insert-output-function)
  (guix-info-insert-generation-function)
  (guix-package-info-heading-params)
  (guix-package-info-insert-with-heading)
  (guix-package-info-insert-description)
  (guix-package-info-insert-location)
  (guix-package-info-insert-full-names)
  (guix-package-info-insert-source-url): Remove.
  (guix-info-fill-column, guix-info-param-title)
  (guix-info-title-function, guix-info-value-function)
  (guix-info-title-method->function)
  (guix-info-value-method->function)
  (guix-info-insert-value-simple): New procedures.
* emacs/guix-utils.el (guix-buttonize, guix-button-type?): New
  procedures.
  (guix-split-string): Split multi-line strings and ignore empty lines.
* doc/emacs.texi (Emacs Appearance): Adjust accordingly.
2016-01-02 17:25:35 +03:00
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
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
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
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
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
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
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
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
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
Alex Kost
c10521e976 emacs: Add and use 'guix-while-search'.
* emacs/guix-utils.el (guix-while-search): New macro.
* emacs/guix-pcomplete.el (guix-pcomplete-run-guix-and-search): Use it.
* emacs/guix-prettify.el (guix-prettify-decompose-buffer): Likewise.
2015-08-30 18:26:01 +03:00
Alex Kost
132e74fec9 emacs: Add "memoization" code.
* emacs/guix-utils.el (guix-memoize): New function.
  (guix-memoized-defun): New macro.
2015-06-08 11:46:05 +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
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
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
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
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