Emacs: Verschiedene Benutzer, verschiedene Themen, dieselbe Init-Datei

Emacs: Verschiedene Benutzer, verschiedene Themen, dieselbe Init-Datei

Ich verwende Emacs bei der Arbeit, wo ich mich normalerweise mit zwei verschiedenen Benutzern mit dem System verbinde:

  • myuser
  • commonuser

Ersterer ist mein persönlicher Benutzer, während letzterer vom gesamten Team zur Verwaltung einer Anwendung gemeinsam genutzt wird. (Irrelevanter Hinweis: Dies ist eine schreckliche Idee. Es gibt im Allgemeinen bessere, wenn auch etwas weniger offensichtliche Möglichkeiten, Berechtigungen zu verwalten. Vertrauen Sie auf meine Erfahrung.)

Um unglückliche Verwechslungen zu vermeiden, möchte ich für jeden Benutzer ein eigenes Theme definieren und dieses in den jeweiligen Init-Dateien hinterlegen.

Alles andere, was in der Init-Datei definiert ist, muss von beiden gemeinsam genutzt werden.

Einfache Lösung

Ich erstelle eine separate Init-Datei /path/to/init/file/.emacsund habe .emacsim Home-Verzeichnis jedes Benutzers die folgende Datei erstellt:

(load-file "/path/to/init/file/.emacs")
(load-theme my-favorite-theme)

Das funktioniert wunderbar. Aber das wäre natürlich zu einfach!

Neue Lösung erforderlich

.emacsIch wurde gebeten, die Datei nicht zu ändern commonuser. Ich werde nicht näher auf die Gründe eingehen, aber Tatsache ist, dass ich eine Problemumgehung finden musste. Hier ist, was ich bisher bekommen habe:

  1. Habe eine komplette ~myuser/.emacsDatei geschrieben, die ich unabhängig vom Benutzer laden werde.
  2. Habe einen Alias ​​wie commonuserfolgt definiert:

    alias emacs='emacs -Q --load ~myuser/.emacs'
    

Dadurch ignoriert Emacs commonuserdie Init-Datei und lädt myuser's.

Nun ist meine (einfache) Frage:

Wie kann ich dafür sorgen, dass sich Emacs je nach Benutzer, der es startet, unterschiedlich verhält?

Ich möchte etwas Ähnliches tun:

if [[ $(whoami) == "myuser" ]]; then 
      (load-theme 'theme1)
if [[ $(whoami) == "commonuser" ]]; then 
      (load-theme 'theme2)

Antwort1

Emacs hat Variablen, die den aktuellen Hostnamen und Benutzernamen beschreiben. Genau wie Sie es tun würdenum etwas abhängig vom Hostnamen zu tun, Sie haben die Variable user-login-name(aus den Dokumenten: „Der Name des Benutzers, wenn möglich aus Umgebungsvariablen übernommen.“).

Ich schätze also, dass etwa Folgendes zutreffen würde:

(when (string-equal user-login-name "myuser")
    (load-theme 'theme1))

(when (string-equal user-login-name "commonuser")
    (load-theme 'theme2))

verwandte Informationen