2013-06-11 12 views
5

के बीच emacs कॉन्फ़िगरेशन साझा करें मैं विभिन्न कंप्यूटरों के बीच आसानी से स्विच करने के लिए संस्करण नियंत्रण के तहत अपने सभी emacs कॉन्फ़िगरेशन को रखने की कोशिश कर रहा हूं। असल में मेरी पसंदीदा प्रणाली ओएसएक्स (10.8.3) है जो emacs 24.3 http://emacsformacosx.com/ से है। लेकिन मैं अन्य प्रणालियों में भी काम कर सकता हूं (संभवतः लिनक्स-आधारित हालांकि विभिन्न वितरण उबंटू/वैज्ञानिक-लिनक्स) जो आम तौर पर इमैक 23.4 से सुसज्जित होते हैं। मैं जो चाहता हूं वह एक init फ़ाइल है जो emacs और ऑपरेटिंग सिस्टम के संस्करण की जांच करता है, emacs पैकेज मैनेजर से आवश्यक संकुल लोड करता है। अब तक मेरी .emacs Emacs 24.3 पर OSX है का पालन के रूप मेंemacs 23 और emacs 24

(require 'package) 
(setq package-archives '(
    ("marmalade" . "http://marmalade-repo.org/packages/") 
    ("org" . "http://orgmode.org/elpa/") 
    ("melpa" . "http://melpa.milkbox.net/packages/"))) 
(package-initialize) 

विन्यास (उदाहरण के

(load "python-sy") 

जो डिफ़ॉल्ट के रूप में स्थापित नहीं कुछ संकुल का उपयोग करता है के लिए के रूप में अलग से भरी हुई हैं उसके बाद के लिए फ़ाइल init: विशेष रूप से

color-theme 
org-mode 
theme-changer 
ess-site 
magit 
auctex 
python.el (fgallina implementation) 

प्लस कुछ अन्य बातों के जो पहले से ही निर्मित संकुल में निर्भर करता है मैं मानता हूं मैं हो पर पता नहीं है कि एक .emacs init फ़ाइल रखने के लिए शुरू करने के लिए w जो सभी उपकरणों में उदासीन रूप से इस्तेमाल किया जा सकता है। इसके अलावा मैं भी सिस्टम विन्यास

(setq url-proxy-services '(("http" . "proxy.server.com:8080"))) 

किसी भी मदद

+0

आप Emacs 23 के लिए 'package.el' का संस्करण प्राप्त कर सकते हैं; [ELPA EmacsWiki पृष्ठ] पर लिंक का पालन करें (http://www.emacswiki.org/emacs/ELPA)। (इसे सुनिश्चित करने के लिए सुनिश्चित करें कि अगर सिस्टम में प्रश्नों को Emacs 24 में अपग्रेड किया गया हो।) – legoscia

उत्तर

4

प्रासंगिक चर system-type और emacs-major-version हैं के लिए धन्यवाद के आधार पर यूआरएल-प्रॉक्सी-सेवाओं लोड करने के लिए एक तरह से करना चाहते हैं। आप नीचे दिए गए

(if (>= emacs-major-version 24) 
    (progn 
     ;; Do something for Emacs 24 or later 
    ) 
    ;; Do something else for Emacs 23 or less 
) 

(cond 
((eq system-type 'windows-nt) 
    ;; Do something on Windows NT 
) 
((eq system-type 'darwind) 
    ;; Do something on MAC OS 
) 
((eq system-type 'gnu/linux) 
    ;; Do something on GNU/Linux 
) 
;; ... 
(t 
    ;; Do something in any other case 
)) 
1

giornado जवाब के साथ साथ की तरह कुछ का उपयोग कर सकते हैं, आप भी एक तरह से अपने पैकेज-विशिष्ट सेटिंग रख सकते हैं वे मूल्यांकन किया जाएगा केवल जब पैकेज (require) परिणाम परीक्षण से मौजूद है। bbdb पैकेज के साथ उदाहरण:

(when (require 'bbdb nil t) 
    (progn ...put your (setq) and other stuff here...)) 
+0

'eval-after-load' बेहतर नहीं है? इससे थोड़ा स्टार्टअप समय कम हो जाता है और आवश्यक होने पर कोड निष्पादित करता है। – giordano

+0

प्रिय Giordano क्या आप मुझे eval-after-load के उपयोग का एक उदाहरण बना सकते हैं? –

+2

@giordano: 'eval-after-load' केवल तभी कोड निष्पादित करने की अनुमति देता है जब आप पैकेज लोड करते हैं। मेरे उदाहरण में ऐसे कई पैकेज हैं जिन्हें मैं स्टार्टअप पर लोड करना चाहता हूं, लेकिन अगर पैक नहीं है तो त्रुटि होने के बिना (मैं लिनक्स, विंडोज और मैक होस्ट्स के बीच अपना '.emacs' साझा करता था, और सभी नहीं प्रत्येक में एक ही पैकेज स्थापित किए गए थे)। – Seki

0

इस स्थिति मैं .emacs के शीर्ष पर कुछ स्थिरांक को परिभाषित के लिए:

(defconst --xemacsp (featurep 'xemacs) "Is this XEmacs?") 
(defconst --emacs24p (and (not --xemacsp) (>= emacs-major-version 24))) 
(defconst --emacs23p (and (not --xemacsp) (>= emacs-major-version 23))) 
(defconst --emacs22p (and (not --xemacsp) (>= emacs-major-version 22))) 
(defconst --emacs21p (and (not --xemacsp) (>= emacs-major-version 21))) 

उदाहरण उपयोग:

(when --emacs24p 
    (require 'epa-file) 
    (epa-file-enable) 
    (setq epa-file-cache-passphrase-for-symmetric-encryption t) ; default is nil 
    ) 

या:

(if --emacs22p 
     (c-toggle-auto-newline 1) 
    (c-toggle-auto-state 1)) 

आदि