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 不须要进行任何配置,只须要把它拷贝回来解压运行就好了