xyzzyの整理

xyzzy備忘録: xyzzyLisp用例 -- らいおさむのお屋敷」から
--------------------------------------------------------------
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から.xyzzy.lをロードする。

.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