「xyzzy備忘録: xyzzyのLisp用例 -- らいおさむのお屋敷」から
--------------------------------------------------------------
Lispコードのファイルをロードする。
Lispコードのファイルの内容をLispオブジェクトの形でLisp環境に取り込みます。ロードするファイルのコードは、Lisp式のソースコードかバイトコンパイル済みコードである必要があります。
以下は、各種ロード関係の関数の違いについてです。
load
インタプリタでloadします。
load-library
*.lcがあればそれをロードします。*.lcがなければ*.lをロードします。
autoload
関数1つ単位で、呼ばれたときロードするようにできます。関数が呼ばれるまではロードされません。
require
あるライブラリをロードします。ただし、既にロード済みならロードしません。
*modules*
この変数を見ると今どのモジュールがロード済か分かります。既にロード済だともうロードしません。
次の例では、foo.lというファイルをロードする。
(load "foo.l")
ロードパスの追加
load-library等でライブラリをロードする対象パスを*load-path*にリストで設定することもできます。
;; ライブラリをロードするパスを追加する。 (setq *load-path* (cons (merge-pathnames "bar" (user-homedir-pathname)) *load-path*))
この例は、ユーザのホームディレクトリにあるbarというサブディレクトリもライブラリをロードする際の検索対象となる。但し、追加されるパスのサブディレクトリについては、検索対象から除外される。
.xyzzyに大量のLispコードを記述する場合には、.xyzzy.lという別の名前のファイルへ内容をコピーして、それをバイトコンパイルし、.xyzzyでは下記の様にloadでバイトコンパイル済みファイル(.xyzzy.lc)をロードする記述のみしておくと良い。
(load ".xyzzy.lc")
この例は、次の様に工夫すると何かと便利である。
(defvar *init-file-name* (merge-pathnames ".xyzzy.l" (user-homedir-pathname))) ;; コンパイル済みファイルがあれば、それを対象とする。 (if (file-exist-p (concat *init-file-name* "c")) (setq *init-file-name* (concat *init-file-name* "c"))) ;; Lispファイルのロード (if (file-exist-p *init-file-name*) (load *init-file-name*) ;; .xyzzy.lファイルが無い場合は、デフォルトの初期化ファイルを利用する。 ;; 但し、user-homedir-pathname と si:system-root が異なる場合のみ。 (unless (equalp (user-homedir-pathname) (si:system-root)) (load (merge-pathnames ".xyzzy" (si:system-root))))) この例は、.xyzzy.lc(コンパイル済みの.xyzzy.l)ファイルがあればそれをロードし、 コンパイル済みで無ければ.xyzzy.lをロードするが、それも無ければ全てのユーザ 共通の初期化ファイルを(マルチユーザ環境の場合のみ)ロードする。
次の例では、前記と同様の結果を得ることができる。
(unless (equalp (user-homedir-pathname) (si:system-root)) (setq *load-path* (cons (merge-pathnames "site-lisp" (user-homedir-pathname)) *load-path*)) ) (if (file-exist-p (merge-pathnames ".xyzzy.*" (user-homedir-pathname))) (require "../.xyzzy") (unless (equalp (user-homedir-pathname) (si:system-root)) (load (merge-pathnames ".xyzzy" (si:system-root))))) この例では、マルチユーザ環境であれば、*load-path*に ~/site-lispディレクトリ を追加するので、当該ユーザの為のライブラリの管理にも便利である。
--------------------------------------------------------------
「xyzzy備忘録: xyzzyの導入手順 -- らいおさむのお屋敷」より
yzzyでは、ユーザのホームディレクトリは、以下の順番で決定されます。
iniファイル内の[init]homeDir 環境変数 XYZZYHOME 環境変数 HOME 環境変数 HOMEDRIVE+ HOMEPATH iniファイル内の[init]logDir xyzzy.exeのpath
ご利用環境に応じた最適な方法を上記の何れかを選択し、次項目の解説を参考にしてユーザのホームディレクトリの設定を行ってください。
iniファイルによる設定
xyzzyの初回起動時に、通常xyzzyをインストールしたディレクトリ(以下、$XYZZYと表記)のサブディレクトリusrに、自動的にユーザ毎のディレクトリが生成され、このディレクトリに使用しているOS毎に異なる名称のサブディレクトリにxyzzy.ini(ユーザー毎に自動的に作成される設定)ファイルを生成・収容します。このiniファイルにホームディレクトリを指定する記述を追加することで、ホームディレクトリを指定ディレクトリに設定できます。
次の例は、xyzzy上の ~/の位置をC:\Users\username\Documents\xyzzyに指定している。
[init] homedir=C:\Users\username\Documents\xyzzy