2013-06-11 32 views
5

Tôi đang cố gắng đặt tất cả cấu hình emacs của mình trong điều khiển phiên bản để dễ dàng chuyển đổi giữa các máy tính khác nhau. Trên thực tế hệ thống ưa thích của tôi là OSX (10.8.3) với emacs 24.3 từ http://emacsformacosx.com/. Nhưng tôi cũng có thể làm việc trong các hệ thống khác (nhiều khả năng dựa trên Linux mặc dù phân phối khác nhau ubuntu/science-linux) mà thường được trang bị với các emacs 23.4. Những gì tôi muốn có là một tập tin init mà kiểm tra phiên bản của emacs và hệ điều hành, tải các gói cần thiết từ quản lý gói emacs. Cho đến nay emacs tôi init nộp cho emacs 24,3 trên OSX là như sauchia sẻ cấu hình emacs giữa emacs 23 và 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) 

Sau đó có cấu hình (nạp riêng biệt như ví dụ

(load "python-sy") 

trong đó sử dụng một số gói không được cài đặt như mặc định: cụ thể là

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

và một số thứ khác dựa vào gói đã được cài sẵn Tôi thừa nhận rằng tôi không biết gì về ho w để bắt đầu để có một tập tin init .emacs có thể được sử dụng một cách thờ ơ trong tất cả các thiết bị. Hơn nữa tôi cũng muốn có một cách để nạp url-proxy-dịch vụ dựa trên cấu hình hệ thống

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

Cảm ơn bạn đã giúp đỡ bất kỳ

+0

Bạn có thể nhận phiên bản 'package.el' cho Emacs 23; theo liên kết trên trang [EMPA EmacsWiki] (http://www.emacswiki.org/emacs/ELPA). (Hãy chắc chắn để di chuyển nó ra khỏi con đường nếu/khi các hệ thống trong câu hỏi được nâng cấp lên Emacs 24.) – legoscia

Trả lời

4

biến liên quan là system-typeemacs-major-version. Bạn có thể sử dụng giống như sau

(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

Cùng với câu trả lời giornado, bạn cũng có thể đặt các cài đặt gói cụ thể của bạn trong một cách mà họ sẽ được đánh giá chỉ khi gói hiện diện bằng cách kiểm tra (require) kết quả. Ví dụ với gói bbdb:

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

Không phải là 'eval-sau-tải' tốt hơn? Điều đó làm giảm thời gian khởi động hơi và chỉ thực thi mã khi cần thiết. – giordano

+0

Kính gửi Giordano bạn có thể làm cho tôi một ví dụ về việc sử dụng eval-after-load không? –

+2

@giordano: 'eval-after-load' chỉ cho phép thực thi mã nếu bạn tải một gói. Trong ví dụ của tôi có nhiều gói mà tôi muốn tải lúc khởi động, nhưng không có lỗi nếu packahe không có mặt (tôi đã sử dụng để chia sẻ '.emacs' giữa Linux, Windows và máy Mac, và không phải tất cả các gói tương tự đã được cài đặt trong mỗi gói). – Seki

0

Đối với tình huống này, tôi xác định vài hằng số ở đầu 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))) 

dụ sử dụng:

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

Hoặc:

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

vv