Question maintien simultané de plusieurs configurations emacs


Je veux maintenir plusieurs configurations emacs comme emacs-prelude, emacs-starter-kit et ma propre configuration emacs personnalisée simultanément sur le même compte utilisateur sur le même PC.
pour cela j'ai des répertoires d'installation comme .emacs1.d, .emacs2.d, .emacs3.d.

Chaque répertoire utilisateur emacs a un fichier init.el qui doit être chargé au démarrage. Au lieu du fichier .emacs, je préfère utiliser le fichier init.el.

Comment charger ces répertoires de configuration personnalisés?

J'ai essayé de courir emacs --eval '(setq user-emacs-directory "~/.emacs1.d/")' 

il définit simplement la valeur de user-emacs-directory, mais ne charge pas les fichiers


13
2017-07-05 07:41


origine


Réponses:


Je voudrais essayer quelque chose comme

emacs -q --eval '(load-file "~/.emacs1.d/init.el")'

Et puis vous feriez quelque chose comme au début de vos fichiers init.el:

(setq user-emacs-directory "~/.emacs1.d/")

(ou vous pouvez aussi évaluer les deux choses en tant que paramètres de ligne de commande)


6
2017-07-05 08:08



Vous pouvez également utiliser un seul fichier ~ / .emacs ou init.el et sélectionner les répertoires de configuration à charger.

(defvar *emacs-prelude-enabled* t)
(defvar *emacs-starter-enabled* nil)
(defvar *other-config-enabled* nil)

(cond (*emacs-prelude-enabled* 
       (add-to-list 'load-path "~/.emacs1.d/")
       (load "~/.emacs1.d/init.el"))
      (*emacs-starter-enabled* 
       (add-to-list 'load-path "~/.emacs2.d/")
       (load "~/.emacs2.d/init.el"))
      (*other-config-enabled*
       (add-to-list 'load-path "~/.emacs3.d/")
       (load "~/.emacs3.d/init.el")))

2
2017-07-05 14:15



Si vous aimez invoquer des choses depuis la console, je mettrais ça dans .bashrc:

export emacs1=~/.emacs1.d/init.el
export emacs2=~/.emacs2.d/init.el
export emacs3=~/.emacs3.d/init.el

Et puis invoquez-les ainsi:

emacs -q -l $emacs1
emacs -q -l $emacs2
emacs -q -l $emacs3

Vous avez même terminé en bash après le signe $.

Vous pouvez même alias ces choses comme ça:

alias emacs1='emacs -q -l ~/.emacs1.d/init.el'
alias emacs2='emacs -q -l ~/.emacs2.d/init.el'
alias emacs3='emacs -q -l ~/.emacs3.d/init.el'

Et les invoquer comme ça:

emacs1
emacs2
emacs3

Bien sûr,

(setq user-emacs-directory "~/.emacs1.d/")

doit toujours être dans chaque init.el.


2
2017-07-08 17:34



En tant que prolongement de nik's répondreet leur commentaire ici, voici ce que j'ai fait, à la fin:

;;; -*- lexical-binding: t -*-
;;
;; Added to appease the package.el gods
;; (package-initialize)

;; Select the profile based on which command-line argument used

(defvar *emacs-config-switcher/profiles-alist* nil
  "An alist for the profiles that are registered here")

(defun emacs-config-switcher/register-profile (key path &optional file)
  "Register profiles to global variable, referenced by KEY.

PATH points to the directory where the profile is stored. By default, will use init.el,
but it can be specified using FILE."
  (or file (setq file "init.el"))
  (setq *emacs-config-switcher/profiles-alist* (cons (cons key (list
                                                                :directory (file-name-as-directory path)
                                                                :file (expand-file-name file path)))
                                                *emacs-config-switcher/profiles-alist*)))

(defun emacs-config-switcher/load-profile (switch)
  "Load profile based on key."
  (let ((key (pop command-line-args-left)))
    (if (assoc key *emacs-config-switcher/profiles-alist*)
    (progn (let ((directory-path
              (plist-get (cdr (assoc key *emacs-config-switcher/profiles-alist*)) :directory))
             (init-file
              (plist-get (cdr (assoc key *emacs-config-switcher/profiles-alist*)) :file)))
         (setq user-emacs-directory directory-path)
         (load init-file)))
      (error "Profile %s does not exist." key))))

; Register profiles here

(emacs-config-switcher/register-profile "emacs-starter-kit" "~/emacs-profiles/emacs24-starter-kit")
(emacs-config-switcher/register-profile "spacemacs" "~/emacs-profiles/spacemacs")

; Add the custom switches

(add-to-list 'command-switch-alist '("-S" . emacs-config-switcher/load-profile))
(add-to-list 'command-switch-alist '("--startup" . emacs-config-switcher/load-profile))

;;; init.el ends here

Une chose que j'ai notée était que, si vous utilisez des choses comme Spacemacs, il échouera parce que ce qu'il cherche n'est pas load-path mais plutôt user-emacs-directory. Aussi, mettre le load-path dans le dossier spacemacs fait Emacs se plaindre que load-path eu votre .emacs.d fichier, ce qui causerait des problèmes.

Tel quel, cela fonctionne à la fois avec Spacemacs et emacs-starter-kit. Je n'ai pas essayé d'autres configurations, mais je pourrais commencer à y réfléchir.


1
2018-04-27 08:50