LispBox 集成開發環境分析 (二)Mac OSX 版本分析

LispBox 集成開發環境分析 (二)Mac OSX 版本分析 shell

前面寫過一篇 LispBox 集成開發環境分析 (一)Windows版本分析,簡單分析了windows下的LispBox的運行機制。 windows

鑑於不少人都喜歡在多個平臺之間來回鼓搗,再加上 LispBox 在 Mac 平臺下確實有一些不太同樣的細節,因此,來一個續篇。 bash

接下來就大體分析下 Lispbox 在 Mac OSX 下的工做機制,固然,由於我只用過兩個版本的OSX(一個是SnowLeopard,一個是Lion),因此我只講這兩個版本的使用狀況,實際上是同樣的。 app

先看看 LispBox 的目錄: ide

東西很少,就這麼幾樣,注意那個 Emacs 的程序,它實際上是OSX 的一種名爲 Bundle 的應用程序,也就是說它實際上是一個目錄,裏面打包了各類結構和程序,鼠標移到 Emacs 圖標上,先點 Control 鍵,再左擊,而後從彈出菜單裏選擇「顯示包內容」,以下圖操做: ui

打開「Contents」目錄,就看到以下的目錄結構,其中的 lispbox.sh 和 lispbox.el 是咱們須要重點關注的對象,以下圖所示: .net

接下來看看 lispbox.sh 的具體內容: unix

#!/bin/bash
if [ "${0:0:2}" = "./" ]; then
    export LISPBOX_HOME=`pwd`/../../..
else
    export LISPBOX_HOME=`dirname $0`/../../..
fi
export SBCL_HOME=${LISPBOX_HOME}/sbcl-1.0.42/lib/sbcl
exec ${LISPBOX_HOME}/Emacs.app/Contents/MacOS/Emacs --no-init-file --no-site-file --eval='(progn (load "lispbox") (slime))'

再看看 Lispbox.el 的具體內容: rest

(require 'cl)

(defun lispbox-list-to-filename (list)
  (apply 
   #'concat 
   (maplist
    #'(lambda (cons)
        (if (cdr cons) (file-name-as-directory (car cons)) (car cons)))
    list)))

(defun lispbox-file (rest)
  (concat 
   (file-name-as-directory
    (expand-file-name
     (or (getenv "LISPBOX_HOME")
         (file-name-directory load-file-name))))
   rest))

(defun lispbox-find-lisps ()
  (dolist (file (file-expand-wildcards (lispbox-file "*/lispbox-register.el")))
    (load file)))

(defun lispbox-install-lisp-license (license-path lisp-name)
  (let ((license (concat (file-name-directory load-file-name) (lispbox-list-to-filename license-path))))
    (if (not (file-exists-p license))
      (let* ((prompt (format "Need to install license for %s . Please enter name of file where you saved it: " lisp-name))
             (to-install (read-file-name prompt)))
        (copy-file (expand-file-name to-install) license)))))

(global-font-lock-mode t)

(setq load-path (cons (lispbox-file "slime-20110205.092829") load-path))
(setenv "SBCL_HOME" (lispbox-file "sbcl-1.0.42/lib/sbcl"))
(setenv "CCL_DEFAULT_DIRECTORY" (lispbox-file "ccl-1.6-darwinx86"))

(set-language-environment "utf-8")
(add-to-list 'load-path "~/Downloads/lispbox-0.7/ccl-1.6-darwinx86/")  ;or wherever you put it

;;; Note that if you save a heap image, the character
;;; encoding specified on the command line will be preserved,
;;; and you won't have to specify the -K utf-8 any more.
(setq inferior-lisp-program "dx86cl64 -K utf-8")


(require 'slime)
(setq slime-net-coding-system 'utf-8-unix)
(slime-setup '(slime-fancy slime-asdf slime-banner))
(lispbox-find-lisps)

(provide 'lispbox)

lispbox.sh 是啓動 Emacs 時執行的具體內容,而 lispbox.el 則是 Emacs 啓動以後加載的各類內容,看到這裏,相信你們都應該明白 OSX 版本的 LispBox 的運行機制了。 code

理解了這個機制,就會發現若是想按照本身的要求去打造一個屬於本身的 LispBox 基本上是沒什麼難度了。

事實上,由於 LispBox 已經中止更新了,因此學會如何去手工更新 LispBox 中中各類軟件是必備的技能---若是你想繼續享受 LispBox 的種種簡便,對於初學者來講,使用打包好的 LispBox 不須要進行任何配置,只須要把它拷貝回來解壓運行就好了

相關文章
相關標籤/搜索