1

Goal:

I would like to do the following with Emacs 27+:

  • take advantage of the package-quickstart option to speed up startup,
  • have 2 independent elpa directories:
    • ~/.emacs.d/elpa when emacs runs in terminal mode,
    • ~/.emacs.d/elpa-graphics when emacs runs in graphics mode.
  • have 2 customization files:
    • ~/.emacs.d/emacs-customization.el when Emacs runs in terminal mode,
    • ~/.emacs.d/emacs-customization-graphics.el when Emacs runs in graphics mode.

Experiment:

I tried to distinguish the two modes inside ~/.emacs.d/early-init.el by calling display-graphic-p but it seems that it's too early for (display-graphic-p) to return a proper value. Here's what I wrote into early-init.el:

;; Separate elpa directory for Emacs in graphics mode and Emacs in TTY mode.                                                                     
;; Use ~/.emacs.d/elpa in TTY mode, use ~/.emacs.d/elpa-graphics in graphics mode                                                                
(setq roup-was-here '(0))
(when (display-graphic-p)
  (push 1 roup-was-here )
  (setq package-user-dir (locate-user-emacs-file "elpa-graphics")))

(setq custom-file (if (display-graphic-p)
              "~/.emacs.d/emacs-customization-graphics.el"
                    "~/.emacs.d/emacs-customization.el"))

(push custom-file roup-was-here)

After running Emacs 27.2 in both TTY first and then in graphics mode, I looked at the value of the variable roup-was-here. In both case the variable holds ("~/.emacs.d/emacs-customization.el" 0) indicating that my code above was not able to distinguish between Emacs running in graphics mode versus terminal mode.

If I set custom-file inside the file ~/.emacs.d/init.el like I do for Emacs 26 where I'm able to distinguish between the 2 modes and have 2 independent customization files. It is recognized but the graphics Emacs still uses ~/.emacs.d/elpa.

I tried to use the different customization file to distinguish and set package-user-dir via the customization file but that does not work either.

Question: Is it possible with Emacs 27+ using the package-quickstart to set package-user-dir differently on Emacs in terminal (TTY/termcap) mode and Emacs in graphics mode? If so how is it done? Is there another variable that code in early-init.el can use to distinguish between the 2 modes?

The only way I have found is to start my graphical Emacs via a shell script that sets a OS environment variable that I then read with getenv inside the early-init.el file. Is it the only way it can be done?

PRouleau
  • 744
  • 3
  • 10

0 Answers0