From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
To: Pierre Neidhardt <mail@ambrevar.xyz>
Cc: Alex Kost <alezost@gmail.com>, myglc2@gmail.com, help-guix@gnu.org
Subject: Re: Emacs in multiple profiles
Date: Mon, 28 Oct 2019 08:46:10 -0400 [thread overview]
Message-ID: <87ftjdca25.fsf@gmail.com> (raw)
In-Reply-To: <87mudpm5nt.fsf@ambrevar.xyz> (Pierre Neidhardt's message of "Fri, 25 Oct 2019 13:21:58 +0200")
[-- Attachment #1: Type: text/plain, Size: 176 bytes --]
Hello Pierre,
I just made the following patches to remove the custom site-start.el we
had in our Emacs package, but this seems to break autoloading.
To be continued.
Maxim
[-- Attachment #2: 0001-gnu-emacs-Locate-Elisp-libraries-via-EMACSLOADPATH.patch --]
[-- Type: text/x-patch, Size: 1707 bytes --]
From 518b529fec93b8a767655f54e32aadade19da89f Mon Sep 17 00:00:00 2001
From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Date: Sat, 3 Jun 2017 12:56:36 -0700
Subject: [PATCH 1/3] gnu: emacs: Locate Elisp libraries via EMACSLOADPATH.
* gnu/packages/emacs.scm (emacs): Add a search path specification for
EMACSLOADPATH.
---
gnu/packages/emacs.scm | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index 6c6f0e4567..a4ded4dbb9 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -9,7 +9,7 @@
;;; Copyright © 2016 David Thompson <dthompson2@worcester.edu>
;;; Copyright © 2016 ng0 <ng0@n0.is>
;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
-;;; Copyright © 2017 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2017, 2019 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2017 Alex Vong <alexvong1995@gmail.com>
;;; Copyright © 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
@@ -185,6 +185,13 @@
(native-search-paths
(list (search-path-specification
+ (variable "EMACSLOADPATH")
+ ;; The versioned entries are for the Emacs' builtin libraries.
+ (files `(,(string-append "share/emacs/" version "/site-lisp")
+ ,(string-append "share/emacs/" version "/lisp")
+ "share/emacs/site-lisp"))
+ (file-pattern ".*")) ;recursively add any sub directory
+ (search-path-specification
(variable "INFOPATH")
(files '("share/info")))))
--
2.23.0
[-- Attachment #3: 0002-gnu-emacs-Remove-custom-guix-emacs-code.patch --]
[-- Type: text/x-patch, Size: 8240 bytes --]
From fe39bda4f2b6f8be433f8c89d80a6900e5732182 Mon Sep 17 00:00:00 2001
From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Date: Sun, 27 Oct 2019 23:26:51 -0400
Subject: [PATCH 2/3] gnu: emacs: Remove custom guix-emacs code.
This used to be necessary to find the Elisp library modules, but is no longer
the case. The environment variable EMACSLOADPATH/search path specification is
now used for that purpose.
* gnu/packages/aux-files/emacs/guix-emacs.el: Remove file.
* Makefile.am (AUX_FILES): Unregister it.
* gnu/packages/emacs.scm (emacs)[phases]: Remove the 'install-site-start
phase.
[native-inputs]: Remove the "guix-emacs.el" input.
---
Makefile.am | 1 -
gnu/packages/aux-files/emacs/guix-emacs.el | 115 ---------------------
gnu/packages/emacs.scm | 21 +---
3 files changed, 2 insertions(+), 135 deletions(-)
delete mode 100644 gnu/packages/aux-files/emacs/guix-emacs.el
diff --git a/Makefile.am b/Makefile.am
index 36767c2f47..2a4431b2c2 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -315,7 +315,6 @@ dist_noinst_DATA = \
# Auxiliary files for packages.
AUX_FILES = \
gnu/packages/aux-files/chromium/master-preferences.json \
- gnu/packages/aux-files/emacs/guix-emacs.el \
gnu/packages/aux-files/linux-libre/5.3-arm.conf \
gnu/packages/aux-files/linux-libre/5.3-arm-veyron.conf \
gnu/packages/aux-files/linux-libre/5.3-arm64.conf \
diff --git a/gnu/packages/aux-files/emacs/guix-emacs.el b/gnu/packages/aux-files/emacs/guix-emacs.el
deleted file mode 100644
index 9a49e8861c..0000000000
--- a/gnu/packages/aux-files/emacs/guix-emacs.el
+++ /dev/null
@@ -1,115 +0,0 @@
-;;; guix-emacs.el --- Emacs packages installed with Guix
-
-;; Copyright © 2014, 2015, 2016, 2017 Alex Kost <alezost@gmail.com>
-;; Copyright © 2017 Kyle Meyer <kyle@kyleam.com>
-
-;; This file is part of GNU Guix.
-
-;; GNU Guix is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Guix is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; This file provides auxiliary code to autoload Emacs packages
-;; installed with Guix.
-
-;;; Code:
-
-(require 'cl-lib)
-
-(defvar guix-user-profile (expand-file-name "~/.guix-profile"))
-
-(defvar guix-emacs-autoloads nil
- "List of the last loaded Emacs autoloads.")
-
-(defvar guix-emacs-autoloads-regexp
- (rx (group (* any) "-autoloads")
- ".el" (zero-or-one "c") string-end)
- "Regexp to match Emacs 'autoloads' file.")
-
-(defun guix-emacs-directory (&optional profile)
- "Return directory with Emacs packages installed in PROFILE.
-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 (directory)
- "Return a list of Emacs 'autoloads' files in DIRECTORY.
-The files in the list do not have extensions (.el, .elc)."
- (cl-remove-duplicates
- (delq nil
- (mapcar (lambda (file)
- (when (string-match guix-emacs-autoloads-regexp file)
- (match-string 1 file)))
- (directory-files directory 'full-name nil 'no-sort)))
- :test #'string=))
-
-(defun guix-emacs-subdirs (directory)
- "Return list of DIRECTORY subdirectories."
- (cl-remove-if (lambda (file)
- (or (string-match-p (rx "/." string-end) file)
- (string-match-p (rx "/.." string-end) file)
- (not (file-directory-p file))))
- (directory-files directory 'full-name nil 'no-sort)))
-
-(defun guix-emacs-directories (&optional profile)
- "Return the list of directories under PROFILE that contain Emacs packages.
-This includes both `share/emacs/site-lisp/guix.d/PACKAGE'
-sub-directories and `share/emacs/site-lisp' itself.
-
-If PROFILE is nil, use `guix-user-profile'.
-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-autoload-packages (&rest profiles)
- "Autoload Emacs packages installed in PROFILES.
-If PROFILES are not specified, use a default user and system
-profiles.
-
-'Autoload' means add directories with Emacs packages to
-`load-path' and load 'autoloads' files matching
-`guix-emacs-autoloads-regexp'."
- (interactive (list (if (fboundp 'guix-read-package-profile)
- (funcall 'guix-read-package-profile)
- guix-user-profile)))
- (let* ((env (getenv "GUIX_ENVIRONMENT"))
- (profiles (or profiles
- (append (list "/run/current-system/profile"
- guix-user-profile)
- (and env (list env))))))
- (dolist (profile profiles)
- (let ((dirs (guix-emacs-directories 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))))))))
-
-(provide 'guix-emacs)
-
-;;; guix-emacs.el ends here
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index a4ded4dbb9..23361d7341 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -127,23 +127,7 @@
(substitute* (find-files "." "^Makefile\\.in$")
(("/bin/pwd")
"pwd"))
- #t))
- (add-after 'install 'install-site-start
- ;; Use 'guix-emacs' in "site-start.el". This way, Emacs packages
- ;; provided by Guix and installed in
- ;; ~/.guix-profile/share/emacs/site-lisp/guix.d/PACKAGE-VERSION are
- ;; automatically found.
- (lambda* (#:key inputs outputs #:allow-other-keys)
- (let* ((out (assoc-ref outputs "out"))
- (lisp-dir (string-append out "/share/emacs/site-lisp")))
- (copy-file (assoc-ref inputs "guix-emacs.el")
- (string-append lisp-dir "/guix-emacs.el"))
- (with-output-to-file (string-append lisp-dir "/site-start.el")
- (lambda ()
- (display
- (string-append "(when (require 'guix-emacs nil t)\n"
- " (guix-emacs-autoload-packages))\n"))))
- #t))))))
+ #t)))))
(inputs
`(("gnutls" ,gnutls)
("ncurses" ,ncurses)
@@ -179,8 +163,7 @@
("libotf" ,libotf)
("m17n-lib" ,m17n-lib)))
(native-inputs
- `(("guix-emacs.el" ,(search-auxiliary-file "emacs/guix-emacs.el"))
- ("pkg-config" ,pkg-config)
+ `(("pkg-config" ,pkg-config)
("texinfo" ,texinfo)))
(native-search-paths
--
2.23.0
[-- Attachment #4: 0003-build-system-emacs-Simplify-the-SET-EMACS-LOAD-PATH-.patch --]
[-- Type: text/x-patch, Size: 3998 bytes --]
From 1905a04b4495481991058a75469f2808cbb47bae Mon Sep 17 00:00:00 2001
From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Date: Mon, 28 Oct 2019 08:09:03 -0400
Subject: [PATCH 3/3] build-system: emacs: Simplify the SET-EMACS-LOAD-PATH
phase.
It is no longer necessary to search for the Elisp libraries manually, as Emacs
now include a search path specification serving that purpose.
* guix/build/emacs-build-system.scm (set-emacs-load-path): Replace by...
(add-source-to-load-path): ...this.
(%standard-phases): Adjust accordingly.
---
guix/build/emacs-build-system.scm | 42 ++++++-------------------------
1 file changed, 8 insertions(+), 34 deletions(-)
diff --git a/guix/build/emacs-build-system.scm b/guix/build/emacs-build-system.scm
index 47a9eda9e6..5cd5e7656c 100644
--- a/guix/build/emacs-build-system.scm
+++ b/guix/build/emacs-build-system.scm
@@ -2,7 +2,7 @@
;;; Copyright © 2015 Federico Beffa <beffa@fbengineering.ch>
;;; Copyright © 2016 David Thompson <davet@gnu.org>
;;; Copyright © 2016 Alex Kost <alezost@gmail.com>
-;;; Copyright © 2018 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2018, 2019 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -74,40 +74,14 @@ archive, a directory, or an Emacs Lisp file."
#t)
(gnu:unpack #:source source)))
-(define* (set-emacs-load-path #:key source inputs #:allow-other-keys)
- (define (inputs->directories inputs)
- "Extract the directory part from INPUTS."
- (match inputs
- (((names . directories) ...) directories)))
-
- (define (input-directory->el-directory input-directory)
- "Return the correct Emacs Lisp directory in INPUT-DIRECTORY or #f, if there
-is no Emacs Lisp directory."
- (let ((legacy-elisp-directory (string-append input-directory %legacy-install-suffix))
- (guix-elisp-directory
- (string-append
- input-directory %install-suffix "/"
- (store-directory->elpa-name-version input-directory))))
- (cond
- ((file-exists? guix-elisp-directory) guix-elisp-directory)
- ((file-exists? legacy-elisp-directory) legacy-elisp-directory)
- (else #f))))
-
- (define (input-directories->el-directories input-directories)
- "Return the list of Emacs Lisp directories in INPUT-DIRECTORIES."
- (filter-map input-directory->el-directory input-directories))
-
- "Set the EMACSLOADPATH environment variable so that dependencies are found."
+(define* (add-source-to-load-path #:allow-other-keys)
+ "Augment the EMACSLOADPATH environment variable with the source directory."
(let* ((source-directory (getcwd))
- (input-elisp-directories (input-directories->el-directories
- (inputs->directories inputs)))
- (emacs-load-path-value
- (string-join
- (append input-elisp-directories (list source-directory))
- ":" 'suffix)))
+ (emacs-load-path-value (string-join (getenv "EMACSLOADPATH") ":"
+ source-directory)))
(setenv "EMACSLOADPATH" emacs-load-path-value)
- (format #t "environment variable `EMACSLOADPATH' set to ~a\n"
- emacs-load-path-value)))
+ (format #t "source directory ~s appended to the `EMACSLOADPATH' \
+environment variable\n" source-directory)))
(define* (build #:key outputs inputs #:allow-other-keys)
"Compile .el files."
@@ -269,7 +243,7 @@ second hyphen. This corresponds to 'name-version' as used in ELPA packages."
(define %standard-phases
(modify-phases gnu:%standard-phases
(replace 'unpack unpack)
- (add-after 'unpack 'set-emacs-load-path set-emacs-load-path)
+ (add-after 'unpack 'add-source-to-load-path add-source-to-load-path)
(delete 'bootstrap)
(delete 'configure)
;; Move the build phase after install: the .el files are byte compiled
--
2.23.0
next prev parent reply other threads:[~2019-10-28 12:46 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-22 16:47 Emacs in multiple profiles Konrad Hinsen
2018-03-22 21:21 ` Alex Kost
2018-03-23 7:57 ` Konrad Hinsen
2018-03-23 17:25 ` Alex Kost
2018-03-24 12:14 ` Konrad Hinsen
2018-03-24 16:07 ` Alex Kost
2018-03-26 8:24 ` Konrad Hinsen
2018-03-27 15:38 ` Alex Kost
2018-04-18 19:49 ` myglc2
2018-05-05 16:01 ` Konrad Hinsen
2019-10-16 19:54 ` Pierre Neidhardt
2019-10-17 15:56 ` George Clemmer
2019-10-18 8:42 ` Pierre Neidhardt
2019-10-18 17:13 ` George Clemmer
2019-10-19 8:57 ` Pierre Neidhardt
2019-10-19 8:53 ` Pierre Neidhardt
2019-10-19 19:35 ` Maxim Cournoyer
2019-10-19 20:19 ` Pierre Neidhardt
2019-10-25 3:05 ` Maxim Cournoyer
2019-10-25 11:21 ` Pierre Neidhardt
2019-10-28 3:45 ` Maxim Cournoyer
2019-10-28 7:49 ` Pierre Neidhardt
2019-10-28 12:46 ` Maxim Cournoyer [this message]
2019-10-29 1:25 ` Maxim Cournoyer
2019-10-29 10:44 ` Pierre Neidhardt
2019-10-31 5:29 ` Maxim Cournoyer
2019-10-31 12:29 ` Pierre Neidhardt
2019-11-01 4:25 ` [bug#38015] " Maxim Cournoyer
2019-11-01 4:25 ` Maxim Cournoyer
2019-11-01 19:06 ` [bug#38015] " Pierre Neidhardt
2019-11-01 19:06 ` Pierre Neidhardt
2019-11-02 1:12 ` [bug#38015] " Maxim Cournoyer
2019-11-02 1:12 ` Maxim Cournoyer
2019-11-02 9:41 ` [bug#38015] " Pierre Neidhardt
2019-11-02 9:41 ` Pierre Neidhardt
2019-11-17 23:10 ` Emacs in server mode using a Shepherd user service (Was: Re: Emacs in multiple profiles) Chris Marusich
2019-11-18 20:55 ` brettg
2019-11-19 21:57 ` Emacs in server mode using a Shepherd user service Maxim Cournoyer
2019-11-19 21:58 ` brettg
2019-11-19 22:03 ` brettg
2019-11-12 5:14 ` [bug#38015] Emacs in multiple profiles Chris Marusich
2019-11-12 5:14 ` Chris Marusich
2019-11-12 7:16 ` Pierre Neidhardt
2019-11-12 7:16 ` Pierre Neidhardt
2019-11-13 7:18 ` Chris Marusich
2019-11-13 7:18 ` Chris Marusich
2019-11-13 11:08 ` Pierre Neidhardt
2019-11-13 11:08 ` Pierre Neidhardt
2019-11-18 5:50 ` Maxim Cournoyer
2019-11-18 5:50 ` Maxim Cournoyer
2019-10-20 13:58 ` Alex Kost
2019-10-20 16:17 ` Pierre Neidhardt
2018-04-20 20:52 ` Ricardo Wurmus
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87ftjdca25.fsf@gmail.com \
--to=maxim.cournoyer@gmail.com \
--cc=alezost@gmail.com \
--cc=help-guix@gnu.org \
--cc=mail@ambrevar.xyz \
--cc=myglc2@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/guix.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.