LispBox 集成开发环境分析 (二)Mac OSX 版本分析

LispBox 集成开发环境分析 (二)Mac OSX 版本分析

前面写过一篇 LispBox 集成开发环境分析 (一)Windows版本分析,简单分析了windows下的LispBox的运行机制。

鉴于很多人都喜欢在多个平台之间来回鼓捣,再加上 LispBox 在 Mac 平台下确实有一些不太一样的细节,所以,来一个续篇。

接下来就大致分析下 Lispbox 在 Mac OSX 下的工作机制,当然,因为我只用过两个版本的OSX(一个是SnowLeopard,一个是Lion),所以我只讲这两个版本的使用情况,其实是一样的。

先看看 LispBox 的目录:

东西不多,就这么几样,注意那个 Emacs 的程序,它其实是OSX 的一种名为 Bundle 的应用程序,也就是说它其实是一个目录,里面打包了各种结构和程序,鼠标移到 Emacs 图标上,先点 Control 键,再左击,然后从弹出菜单里选择“显示包内容”,如下图操作:

打开“Contents”目录,就看到如下的目录结构,其中的 lispbox.sh 和 lispbox.el 是我们需要重点关注的对象,如下图所示:

接下来看看 lispbox.sh 的具体内容:

#!/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 的具体内容:

(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 的运行机制了。

理解了这个机制,就会发现如果想按照自己的要求去打造一个属于自己的 LispBox 基本上是没什么难度了。

事实上,因为 LispBox 已经停止更新了,所以学会如何去手工更新 LispBox 中中各种软件是必备的技能---如果你想继续享受 LispBox 的种种简便,对于初学者来说,使用打包好的 LispBox 不需要进行任何配置,只需要把它拷贝回来解压运行就行了

转载于:https://my.oschina.net/freeblues/blog/102836

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值