2010-01-21 15 views
16

प्रलेखन से मैं देख सकता हूं कि मैं कमांड लाइन तर्क (कमांड-लाइन-तर्क) तक पहुंच सकता हूं। मैं अपने स्वयं के तर्क जोड़ना चाहता हूं लेकिन Emacs शुरू होने पर शिकायत करता है कि यह उन्हें पहचान नहीं पाता है।Emacs कस्टम कमांड लाइन तर्क

उदा।

emacs -my_argument 

मैं:

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

अपने कस्टम तर्क को परिभाषित करने और मेरी Emacs सत्र के लिए जानकारी प्रदान करने के लिए एक उचित तरीका क्या है? क्या कमांड लाइन से कोई तर्क पॉप करने का कोई तरीका है?

उत्तर

26

अपने ~/.emacs, ~/.emacs.el, या ~/.emacs.d/init.el फाइल करने के लिए कुछ इस तरह करें:

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

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

तो फिर तुम emacs -my_argument निष्पादित कर सकते हैं और यह minibuffer को i was passed -my_argument प्रिंट चाहिए। आप GNU elisp reference में अधिक जानकारी प्राप्त कर सकते हैं।

8

जैसा कि एक और पोस्ट में कहा गया है, आप command-switch-alist पर अपने कस्टम स्विच जोड़ सकते हैं और emacs कमांड लाइन पर पारित किसी भी मिलान स्विच के लिए हैंडलर फ़ंक्शन को कॉल करेंगे। हालांकि, यह ऑपरेशन आपके .emacs फ़ाइल के मूल्यांकन के बाद किया जाता है। अधिकांश मामलों के लिए यह ठीक है लेकिन आप अपने .emacs मूल्यांकन के निष्पादन पथ या व्यवहार को बदलने के लिए कमांड लाइन तर्क की इच्छा कर सकते हैं; मैं अक्सर कॉन्फ़िगरेशन हिस्सों को सक्षम/अक्षम करने के लिए ऐसा करता हूं (मुख्य रूप से डिबगिंग के लिए)।

इसे प्राप्त करने के लिए आप command-line-args पढ़ सकते हैं और मैन्युअल रूप से अपने स्विच की जांच कर सकते हैं और फिर सूची से इसे हटा सकते हैं, यह emacs किसी अज्ञात तर्क के बारे में शिकायत करेगा।

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

कौन इतना की तरह अपने .emacs मूल्यांकन में परिवर्तन कर सकते हैं:

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

और तुम एक ही चरण में इस बना सकते हैं:

;; 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

परीक्षण किया कोड के रूप में चिह्नित "परीक्षण नहीं किया गया"। यह बिल्कुल वर्णन के रूप में काम करता है। –

संबंधित मुद्दे