xyzzy で ~/.xyzzy.d/ 以下の lispファイルを全てロードする方法


`~/.xyzzy.d` 配下にある lisp ファイルを全て起動時に読み込むために

[code]

    (mapcar #'mc-load-file (directory "~/.xyzzy.d/" :absolute t :wild "*.l"))
    
[/code]

と記述していたのですが、久しぶりにxyzzyを使ってみると読み込まなくなってしまっていました。  
`C-x C-e`で該当行を実行すると `(t t t t t t t t t)`とエラー無く終了しているのですがファイルの読み込みができていません。

また `(directory "~/.xyzzy.d/" :absolute t :wild "*.l")` を interactive-mode
で実行し、結果のリストをそのまま `(mapcar #'mc-load-file list)`
の引数として渡すと同様にエラー無く終了し、読み込みが行われているようです。

作業前にダンプファイルは削除して確認しており、xyzzyのバージョンは `0.2.2.252` を使用しています。

何が原因で正常に読み込みが行えないのでしょうか？

一月ほど前に外部のQ&AサービスTeratailに質問させてもらっていたのですが、回答がもらえませんでしたのでこちらで再質問しております。  
<https://teratail.com/questions/4565>

### 2015/01/16 追記

`~/.xyzzy.d/foo.l`を作成して以下の記述をすると`error!`とダイアログボックスは表示されるのですが、`M-x foo`
としても関数を見つけることができませんでした。一度宣言した関数が無効化されてしまっているのでしょうか？

[code]

    (defun foo ()
      (interactive)
      (message "foo!!")
      )
    (error "error!")
    
[/code]




foo.lの `(error "error!")` が実行されているとすると、コマンド関数fooは  
userパッケージではないどこか別のパッケージ内に定義されてしまっている可能性があります。  
`M-x`からパッケージ修飾子ナシで起動出来るコマンドは

  * userパッケージからuse-packageしているパッケージ(初期状態ではlispとeditor)からエクスポートされているコマンド関数
  * userパッケージ内で定義されたコマンド関数

つまりuserパッケージからパッケージ修飾子ナシでアクセスできるシンボルにバインドされているコマンド関数に限られます。

例えば以下のようなbar.lと  

[code]

    (in-package :user)
    (defun bar ()
      (interactive)
      (message "bar"))
    
[/code]

baz.lがあるとして

[code]

    (defun baz ()
      (interactive)
      (message "baz"))
    
[/code]

.xyzzyには以下のようにロードするコードを書くと

[code]

    (in-package :editor)
    (require "bar")
    (require "baz")
    
[/code]

関数`bar`は`user`パッケージで定義されるので`M-x bar`で起動できますが、  
関数`baz`はロード元のカレントパッケージ`editor`内で定義される事になりますので、  
`M-x ed::baz`と入力しないと起動できません。  
(in-package関数でのカレントパッケージ指定は現在ロード中のファイル内で有効です。)

editorパッケージ内で定義したいけど`ed::`ナシで起動したい場合は、

[code]

    (in-package :editor)
    (export '(baz))
    
    (defun baz ()
      (interactive)
      (message "baz"))
    
[/code]

のように書いてシンボルbazをeditorパッケージからエクスポートする必要があります。

というわけで、.xyzzyの中で目的のファイルがロードされるまでにカレントパッケージがuser以外の物に変更されていないか調べてみてください。  
(.xyzzy先頭のカレントパッケージはsiteinit.lの内容にかかわらずuserパッケージだったと思います)

また、初期化ファイルからロードするファイルは、ロード元のカレントパッケージに影響されないようにファイル先頭の方でin-
package関数でパッケージを指定しておくと良いでしょう。

