c3abbfaa10981db299376b68f2e386029409de82
xyzzy 0.2.2.242 では grep-dialog などでの無視ディレクトリの指定や、 complete+ 利用時に時々クラッシュする問題の修正などを行なっています。
インストーラはありませんので zip を展開するだけです。 インストールから初期設定までは以下を参照してください。
以下の手順で 0.2.2.235 からアップデートしてください。
lisp/ 配下や etc/ 配下をカスタマイズしている場合は 上書き後に再度カスタマイズをお願いします。
grep-dialog
, gresreg-dialog
で無視ディレクトリを指定できるようになりました (x022235, #198)
再帰的にファイルを検索する時に無視したいディレクトリ名を
ed:*grep-ignored-directories*
で指定します。
デフォルトでは以下が設定されています。
"SCCS", "RCS", "CVS", "MCVS", ".svn", ".git", ".hg", ".bzr",
"_MTN", "_darcs", "{arch}"
追加で tmp/ を無視したい場合は以下のようにします。
(require "grepd")
(pushnew "tmp" *grep-ignored-directories* :test #'string-equal)
非表示バッファ選択時にもタイトルバーを変更するようにしました (x022235, #336)
ファイルを開くときに XML のエンコード宣言にしたがってエンコードを決定するようにしました (x022235, #339)
ミニバッファでファイル名の補完時に時々クラッシュする問題を修正しました (x022235, #321)
Vista 以降で complete+ を利用していると高確率で発生していた問題です。 complete+ の問題ではなく xyzzy 本体の問題でした。
etc/extract.exe がウィルス感染ファイルであると誤認識される問題を修正しました (x022235, #342)
ハッシュダイジェストをバイナリ値で取得できるようにしました (x022235, #47)
Amazon Web Services や OAuth などは HMAC-SHA-256 のバイナリ値を base64 でエンコードしたものが必要になります。
今までは si:hmac-sha-256
などが返した 16 進文字列からバイナリ値を
得るために無駄な再変換が必要でしたが、以下の関数に :binary
引数を
指定することでバイナリ値を直接生成できるようにしました。
:binary
引数が non-nil
なら計算結果をバイナリ値を文字列で返します。
nil
の場合は従来通り 16 進文字列に変換して返します。
(setq sha256bin (map 'list 'char-code (si:sha-256 "xyzzy" :binary t)))
=> (24 72 88 160 15 215 151 31 129 8 72 38 110 188 236 238 94 139 105
151 44 95 250 237 98 47 94 224 120 103 26 237)
(format nil "~{~2,'0X~}" sha256bin)
=> "184858a00fd7971f810848266ebcecee5e8b69972c5ffaed622f5ee078671aed"
(si:sha-256 "xyzzy")
=> "184858a00fd7971f810848266ebcecee5e8b69972c5ffaed622f5ee078671aed"
乱数の生成アルゴリズムをメルセンヌ・ツイスターに変更しました (x022235, #142)
実装には松本眞氏と斎藤睦夫氏によって開発された Double precision SIMD-oriented Fast Mersenne Twister (dSFMT) を利用しています (周期はビルド時に 219937 - 1 で固定)。
参考: 良い乱数・悪い乱数
directory
関数に :test
引数を追加しました (x022235, #198)
見つかったファイルを引数にして :test
で指定した関数を funcall
します。
関数が nil
を返した場合、そのファイルは無視します。
ディレクトリの場合はディレクトリ配下のファイルをすべて無視します
(そのディレクトリ配下の探索自体を行いません)。
;; .git ディレクトリを無視したい場合
(directory "." :test #'(lambda (path)
(not (and (file-directory-p path)
(string-equal ".git" (pathname-name path)))))
:absolute t :recursive t)
備考: CL の directory 関数には :test
引数はありませんが、
もともと xyzzy の directory
関数は CL とは大きく異なるため追加しました。
この仕様は CL-FAD の walk-directory 関数を参考にしました。
flet
, labels
で作成した局所関数に印字用の名前を付けました (youz, x022235, #323)
*Trace Output*
バッファでも名前付きで出力されるためデバッグがしやすくなりました。
(flet ((foo ()))
(labels ((bar ()))
(list #'foo #'bar)))
;=> (#<lexical-closure: (flet foo)> #<lexical-closure: (labels bar)>)
; 0.2.2.241 では (#<lexical-closure: (anonymous)> #<lexical-closure: (anonymous)>)
random-state
をほぼ同時に作成すると同じ乱数が生成される問題を修正しました (x022235, #142)
乱数の seed を時刻から CryptGenRandom で生成した乱数に変更しました。
(let ((s1 (make-random-state t))
(s2 (make-random-state t)))
(dotimes (_ 10)
(format t "~S~%" (list (random 100 s1) (random 100 s2)))))
(48 63)
(53 47)
(32 70)
(83 27)
(36 25)
(99 81)
(54 22)
(36 82)
(63 35)
(67 14)
; 0.2.2.241 では以下のように同じ乱数が生成される
(72 72)
(44 44)
(92 92)
(54 54)
(89 89)
(72 72)
(22 22)
(93 93)
(19 19)
(72 72)
make-process
の :show
パラメータが動作しない問題を修正しました (x022235, #315)
make-process
は xyzzyenv.exe 経由で指定したコマンドを実行しますが、
:show
パラメータが指定したコマンドではなく xyzzyenv.exe に反映されていました。
(make-process "notepad" :show :maximize)
;=> メモ帳が最大化して起動
; 0.2.2.241 では xyzzyenv.exe が最大化して起動
また、ed:*xyzzyenv-show-flag*
で xyzzyenv.exe の表示方法を指定することができます。
; xyzzyenv.exe はタスクバーに表示しない
(let ((*xyzzyenv-show-flag* :hide))
(make-process "notepad" :show :maximize))
マクロ・特殊形式の引数間違い時のエラーメッセージを改善しました (x022235, #329)
(if 1 2 3 4)
;=> 引数が多すぎます: (if 1 2 3 4)
; 0.2.2.241 では「引数が多すぎます: (#1=#:|| . #1#)」
(defmacro foo (a b)
`(+ ,a ,b))
(foo 1)
;=> 引数が少なすぎます: (foo 1)
; 0.2.2.241 では「引数が少なすぎます: (#1=#:|| . #1#)」
*scratch*
バッファで評価すると *Trace Output*
に警告が出力される問題を修正しました (x022235, #334)
reduce
の :from-end
パラメータに t を指定した時の不具合を修正しました (youz, #335)
0.2.2.241 でのデグレードでした。
(provide "xyzzy-0.2.2.242")