[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 1/4] emacs: Factorize searching for Emacs packages.
From: |
Alex Kost |
Subject: |
[PATCH 1/4] emacs: Factorize searching for Emacs packages. |
Date: |
Fri, 5 Feb 2016 15:13:44 +0300 |
* emacs/guix-emacs.el: (guix-emacs-directories): New procedure.
(guix-emacs-find-autoloads-in-directory): Rename to ...
(guix-emacs-find-autoloads): ... this.
(guix-emacs-load-autoloads): Replace with ...
(guix-emacs-autoload-packages): this. New procedure. At first, find a
list of directories with Emacs packages, then add them to 'load-path'
and finally, load autoloads.
(guix-emacs-load-autoloads-maybe): Rename to ...
(guix-emacs-autoload-packages-maybe): ... this.
* emacs/guix-backend.el (guix-after-repl-operation-hook): Adjust for the
renaming.
* doc/emacs.texi (Emacs Initial Setup): Likewise.
---
doc/emacs.texi | 2 +-
emacs/guix-backend.el | 2 +-
emacs/guix-emacs.el | 70 +++++++++++++++++++++++++--------------------------
3 files changed, 36 insertions(+), 38 deletions(-)
diff --git a/doc/emacs.texi b/doc/emacs.texi
index 92a9107..19dc87f 100644
--- a/doc/emacs.texi
+++ b/doc/emacs.texi
@@ -106,7 +106,7 @@ for the built-in Emacs package system (@pxref{Package
Installation,,,
emacs, The GNU Emacs Manual}).
You can activate Emacs packages installed in your profile whenever you
-want using @address@hidden
+want using @address@hidden
@node Emacs Package Management
diff --git a/emacs/guix-backend.el b/emacs/guix-backend.el
index 0736f85..04e5c1f 100644
--- a/emacs/guix-backend.el
+++ b/emacs/guix-backend.el
@@ -121,7 +121,7 @@ This REPL is used for receiving information only if
"Hook run before executing an operation in Guix REPL.")
(defvar guix-after-repl-operation-hook
- '(guix-emacs-load-autoloads-maybe
+ '(guix-emacs-autoload-packages-maybe
guix-repl-operation-success-message)
"Hook run after executing successful operation in Guix REPL.")
diff --git a/emacs/guix-emacs.el b/emacs/guix-emacs.el
index 37a0bb2..5c32f2f 100644
--- a/emacs/guix-emacs.el
+++ b/emacs/guix-emacs.el
@@ -57,7 +57,7 @@ If PROFILE is nil, use `guix-user-profile'."
(expand-file-name "share/emacs/site-lisp"
(or profile guix-user-profile)))
-(defun guix-emacs-find-autoloads-in-directory (directory)
+(defun guix-emacs-find-autoloads (directory)
"Return a list of Emacs 'autoloads' files in DIRECTORY.
The files in the list do not have extensions (.el, .elc)."
(cl-remove-duplicates
@@ -76,45 +76,44 @@ The files in the list do not have extensions (.el, .elc)."
(not (file-directory-p file))))
(directory-files directory 'full-name nil 'no-sort)))
-(defun guix-emacs-find-autoloads (&optional profile)
- "Return list of autoloads of Emacs packages installed in PROFILE.
+(defun guix-emacs-directories (&optional profile)
+ "Return a list of directories with Emacs packages installed in PROFILE.
If PROFILE is nil, use `guix-user-profile'.
-Return nil if there are no emacs packages installed in PROFILE."
- (let ((elisp-root-dir (guix-emacs-directory profile)))
- (if (file-directory-p elisp-root-dir)
- (let ((elisp-pkgs-dir (expand-file-name "guix.d" elisp-root-dir))
- (root-autoloads (guix-emacs-find-autoloads-in-directory
- elisp-root-dir)))
- (if (file-directory-p elisp-pkgs-dir)
- (let ((pkgs-autoloads
- (cl-mapcan #'guix-emacs-find-autoloads-in-directory
- (guix-emacs-subdirs elisp-pkgs-dir))))
- (append root-autoloads pkgs-autoloads))
- root-autoloads))
- (message "Directory '%s' does not exist." elisp-root-dir)
- nil)))
+Return nil, if Emacs packages are not installed in PROFILE."
+ (let ((root-dir (guix-emacs-directory (or profile guix-user-profile))))
+ (when (file-directory-p root-dir)
+ (let* ((pkgs-dir (expand-file-name "guix.d" root-dir))
+ (pkgs-dirs (when (file-directory-p pkgs-dir)
+ (guix-emacs-subdirs pkgs-dir))))
+ (cons root-dir pkgs-dirs)))))
;;;###autoload
-(defun guix-emacs-load-autoloads (&optional profile)
- "Load autoloads for Emacs packages installed in PROFILE.
+(defun guix-emacs-autoload-packages (&optional profile)
+ "Autoload Emacs packages installed in PROFILE.
If PROFILE is nil, use `guix-user-profile'.
-Add autoloads directories to `load-path'."
+
+'Autoload' means add directories with Emacs packages to
+`load-path' and load 'autoloads' files matching
+`guix-emacs-autoloads-regexp'."
(interactive (list (if (fboundp 'guix-profile-prompt)
(funcall 'guix-profile-prompt)
guix-user-profile)))
- (let* ((autoloads (guix-emacs-find-autoloads profile))
- (new-autoloads (cl-nset-difference autoloads
- guix-emacs-autoloads
- :test #'string=)))
- (dolist (file new-autoloads)
- (cl-pushnew (directory-file-name (file-name-directory file))
- load-path
- :test #'string=)
- (load file 'noerror))
- (setq guix-emacs-autoloads
- (append new-autoloads guix-emacs-autoloads))))
-
-(defun guix-emacs-load-autoloads-maybe ()
+ (let ((dirs (guix-emacs-directories (or profile guix-user-profile))))
+ (when dirs
+ (let* ((autoloads (cl-mapcan #'guix-emacs-find-autoloads dirs))
+ (new-autoloads (cl-nset-difference autoloads
+ guix-emacs-autoloads
+ :test #'string=)))
+ (dolist (dir dirs)
+ (cl-pushnew (directory-file-name dir)
+ load-path
+ :test #'string=))
+ (dolist (file new-autoloads)
+ (load file 'noerror))
+ (setq guix-emacs-autoloads
+ (append new-autoloads guix-emacs-autoloads))))))
+
+(defun guix-emacs-autoload-packages-maybe ()
"Load autoloads for Emacs packages if needed.
See `guix-emacs-activate-after-operation' for details."
(and guix-emacs-activate-after-operation
@@ -123,11 +122,10 @@ See `guix-emacs-activate-after-operation' for details."
;; packages can be installed to another profile, and the
;; following code will not work (i.e., the autoloads for this
;; profile will not be loaded).
- (guix-emacs-load-autoloads guix-current-profile)))
+ (guix-emacs-autoload-packages guix-current-profile)))
(when guix-package-enable-at-startup
- (add-to-list 'load-path (guix-emacs-directory))
- (guix-emacs-load-autoloads))
+ (guix-emacs-autoload-packages guix-user-profile))
(provide 'guix-emacs)
--
2.6.3