2012-03-30 27 views
8

मैं अपने एमैक्स सेट अप में थोड़ा सा रिफैक्टरिंग कर रहा हूं और निष्कर्ष पर आया हूं कि मैं डिफ़ॉल्ट से एक अलग init फ़ाइल का उपयोग करना चाहता हूं। तो बुनियादी तौर पर, मेरे ~/.emacs फ़ाइल में, मैं इस है:Emacs: उस फ़ंक्शन को परिभाषित करें जो फ़ाइल को लोड करता है जहां फ़ंक्शन स्वयं परिभाषित किया गया है

(load "/some/directory/init.el") 

अब तक, कि बस ठीक काम कर रहा गया है।

(defun conf() 
    "Open a buffer with the user init file." 
    (interactive) 
    (find-file user-init-file)) 

आप देख सकते हैं, इस ~/.emacs कोई फर्क नहीं पड़ता कि मुझे क्या करना खुल जाएगा: हालांकि, अब मैं एक पुराने आदेश है कि मैं उम्र के लिए उपयोग किया है, जो मेरे init फ़ाइल को खोलता है फिर से परिभाषित करना चाहते हैं। मैं इसे /some/directory/init.el खोलना चाहता हूं, या जहां भी conf कमांड स्वयं परिभाषित किया गया है।

मैं यह कैसे करूँगा?

+0

@RandyMorris: नहीं, मैं, केवल लोड-फ़ाइल-नाम का उपयोग नहीं कर सकते हैं क्योंकि यह 'निष्पादन के समय nil' हो जाएगा। – damd

+0

मुझे पता चला कि मैं इसके लिए '(प्रतीक-फ़ाइल 'conf) का उपयोग कर सकता हूं। – damd

+0

मुझे एहसास हुआ कि मैंने उस टिप्पणी को पोस्ट करने के तुरंत बाद, मेरा बुरा। –

उत्तर

6

आप इस के लिए find-function उपयोग कर सकते हैं:

(defun conf() 
    "Open a buffer with the user init file." 
    (interactive) 
    (find-function this-command)) 
+0

उस आदेश के बजाए बफर की शुरुआत में प्रारंभ करने के लिए अंतिम कोष्ठक से पहले "(शुरुआत-बफर)" पंक्ति जोड़ें। – PascalVKooten

3

तुम भी एक sneakier तरीके से उपयोग कर सकते हैं:

(defun conf() "blabla" (सहभागी) (लगता है फ़ाइल # $))

क्योंकि # $ सी में __FILE__ की तरह एक सा काम करता है: यह फ़ाइल नाम के द्वारा बदल दिया है, जब फ़ाइल पढ़ा जाता है।

+0

यह बहुत अच्छा है, लेकिन मुझे इसके बारे में Emacs के अपने दस्तावेज़ में कैसे पता चला होगा? यहां तक ​​कि एक स्पष्ट '(apropos" # $ ") 'मुझे कुछ भी नहीं बताता है। – Glyph

+0

ठीक है, मैंने कहा "स्नीकर"। मुझे नहीं लगता कि यह दस्तावेज (या होना चाहिए) दस्तावेज है। इसका उपयोग आंतरिक रूप से .elc फ़ाइलों के प्रारूप में किया जाता है और .el और .elc फ़ाइलों को वास्तव में उसी तरह संसाधित किया जाता है, इसलिए यह चाल भी .el फ़ाइलों में काम करती है। – Stefan

+0

मुझे लगता है कि ऐसा करने का थोड़ा कम बुरा तरीका है '(प्रतीक-कार्य' कुछ 'defun) '? – Glyph

0

यह मेरे लिए काम करता है।

;;; mymodule.el --- does my thing 

(defvar mymodule--load-path nil "load path of the module") 

    ... 

(defun mymodule-load-datafile() 
    "load a data file from the directory in which the .el resides" 
    (let* ((dir-name (concat 
         (file-name-directory mymodule--load-path))) 
     (data-file-name (concat dir-name "datafile.csv"))) 
    (if (file-exists-p data-file-name) 
     ...))) 

;; remember load time path 
(setq mymodule--load-path load-file-name) 

(provide 'mymodule) 
संबंधित मुद्दे