2010-01-21 18 views
16

Aus der Dokumentation, die ich sehen kann, kann ich auf Befehlszeilenargumente zugreifen (Befehlszeilenargumente). Ich möchte meine eigenen Argumente hinzufügen, aber Emacs beschwert sich beim Start, dass es sie nicht erkennt.Emacs benutzerdefinierte Befehlszeilenargument

z.

emacs -my_argument 

ich:

 
command-line-1: Unknown option `-my_argument' 

Was ist eine richtige Art und Weise meiner benutzerdefinierten Argumente zu definieren und Informationen zu meiner Emacs-Sitzung zur Verfügung stellen? Gibt es eine Möglichkeit, ein Argument von einer Befehlszeile aus zu öffnen?

Antwort

26

so etwas zu Ihrem ~/.emacs, ~/.emacs.el oder ~/.emacs.d/init.el Datei hinzufügen:

(defun my-argument-fn (switch) 
    (message "i was passed -my_argument")) 

(add-to-list 'command-switch-alist '("-my_argument" . my-argument-fn)) 

Dann können Sie emacs -my_argument ausführen und es sollte i was passed -my_argument an den Minipuffer drucken. Sie finden weitere Informationen in der GNU elisp reference.

8

Wie in einem anderen Beitrag erwähnt, können Sie Ihre benutzerdefinierten Schalter command-switch-alist hinzufügen und Emacs wird die Handler-Funktion für alle passenden Schalter in der Befehlszeile übergeben. Dieser Vorgang wird jedoch ausgeführt, nachdem Ihre .emacs-Datei ausgewertet worden ist. Das ist in den meisten Fällen in Ordnung, aber Sie möchten vielleicht, dass ein Befehlszeilenargument den Ausführungspfad oder das Verhalten Ihrer .emacs Auswertung ändert; Ich mache das oft um Konfigurations-Chunks zu aktivieren/deaktivieren (hauptsächlich zum Debuggen).

Um dies zu erreichen, können Sie lesen command-line-args und überprüfen Sie für Ihren Schalter manuell und dann löschen Sie es aus der Liste, dies wird aufhören emacs beschweren sich über ein unbekanntes Argument.

(setq my-switch-found (member "-myswitch" command-line-args)) 
(setq command-line-args (delete "-myswitch" command-line-args)) 

Welche Ihre .emacs Auswertung wie so verändern kann:

(unless my-switch-found 
    (message "Didn't find inhibit switch, loading some config.") 
    ...) 

Und man konnte dies in einem einzigen Schritt bauen:

;; This was written in SO text-box, not been tested. 
(defun found-custom-arg (switch) 
    (let ((found-switch (member switch command-line-args))) 
    (setq command-line-args (delete switch command-line-args)) 
    found-switch)) 

(unless (found-custom-arg "-myswitch") 
    (message "Loading config...") 
    ...) 
+0

der Code Getestet markierte "nicht getestet". Es funktioniert genau wie beschrieben. –

Verwandte Themen