Source of Nothingness - 起動

* Menu

About | Profile | まとめ | オリジナル | xyzzy | あんてな | | buzz

* memo : asdf を使う

さくらのサーバにインストールした clispasdf を使うための一連の作業をメモ。

clisp には asdf が付属していないのでソースを取得する。

$ cd $HOME/local/lisp
$ wget "http://cclan.cvs.sourceforge.net/*checkout*/cclan/asdf/asdf.lisp"
$ clisp -c asdf.lisp

ついでにコンパイルしておく。

ここからしばらく clisp での作業。
$HOME/local/lisp/ を lisp ファイル置き場にすることにしたので、ここをロードパスに追加する。
[1]> (push (merge-pathnames "local/lisp/" (user-homedir-pathname)) custom:*load-paths*)
(#P"/home/raido/local/lisp/" #P"./" "~/lisp/**/")

asdf.lisp をロード。
[2]> (load '#:asdf)
;; Loading file /home/raido/local/lisp/asdf.fas ...
;; Loaded file /home/raido/local/lisp/asdf.fas
T

asdf:*central-registry* にパスを追加。$HOME/local/lisp/systems/ にした。
ここに *.asd ファイルへのシンボリックリンクを置くようにする。
[3]> (push (merge-pathnames "local/lisp/systems/" (user-homedir-pathname)) asdf:*central-registry*)
(#P"/home/raido/local/lisp/systems/" *DEFAULT-PATHNAME-DEFAULTS*)

この状態でGUESSを使えるようにする。
ソースをダウンロードして、展開、シンボリックリンクを張る。
$ cd $HOME/local/src/lisp
$ wget http://lispuser.net/files/guess.tar.gz
$ tar xf guess.tar.gz
$ cd ../../lisp/systems/
$ ln -s $HOME/local/src/lisp/guess_0.1.0/guess.asd .

clisp でロード。初回はコンパイルした上でロードしてくれる。
[4]> (asdf:oos 'asdf:load-op :guess)
; loading system definition from /home/raido/local/lisp/systems/guess.asd into #<PACKAGE ASDF0>
;; Loading file /home/raido/local/lisp/systems/guess.asd ...
; registering #<SYSTEM :GUESS #x20538B31> as GUESS
;; Loaded file /home/raido/local/lisp/systems/guess.asd
;; Compiling file /home/raido/local/src/lisp/guess_0.1.0/guess.lisp ...
;; Wrote file /home/raido/local/src/lisp/guess_0.1.0/guess.fas
;; Loading file /home/raido/local/src/lisp/guess_0.1.0/guess.fas ...
;; Loaded file /home/raido/local/src/lisp/guess_0.1.0/guess.fas
0 errors, 0 warnings
NIL
以上。

clisp での作業は初期化ファイルにでも書いておく。clispの場合は $HOME/.clisprc 辺り。
(push (merge-pathnames "local/lisp/" (user-homedir-pathname)) custom:*load-paths*)
(load '#:asdf)
(push (merge-pathnames "local/lisp/systems/" (user-homedir-pathname)) asdf:*central-registry*)
(asdf:oos 'asdf:load-op :guess)
ロードするものが多くなって起動に時間がかかるようになったら、メモリイメージを保存して起動時にこっちを読み込むようにする。

* 2007-05-31

* そこそこまとまっていて役に立つかもしれないもの

* xyzzy : WSHでxyzzy起動

の情報をまとめてみる。

まず起動用のスクリプト。起動時にやることは
// xyzzy.js
var shell  = WScript.CreateObject("Wscript.Shell");
var fs     = WScript.CreateObject("Scripting.FileSystemObject");
var env = shell.Environment("PROCESS");
var dir = env("TMP") + "\\xyzzy";
var path = fs.GetParentFolderName(WScript.ScriptFullName);

if (! fs.FolderExists(dir)) {
  fs.CreateFolder(dir);
}

env("XYZZYHOME") = path;
env("XYZZYCONFIGPATH") = dir;
if (fs.FileExists(path + "\\usr\\xyzzy.ini")) {
  fs.CopyFile(path + "\\usr\\xyzzy.ini", dir + "\\xyzzy.ini");
}
if (fs.FileExists(path + "\\usr\\.xyzzy.history")) {
  fs.CopyFile(path + "\\usr\\.xyzzy.history", dir + "\\.xyzzy.history");
}

shell.Exec("xyzzy -image " + dir + "\\xyzzy.dump");

一度起動した後のことは考えていませんので注意。

さらに、
をやっておくべきでしょう。
(setq lisp::*documentation-path*
      (merge-pathnames "XYZZYDOC"
                       (directory-namestring (si:dump-image-path))))
(delete-hook '*kill-xyzzy-hook* 'ed::save-history-file)
(add-hook '*kill-xyzzy-hook*
          #'(lambda ()
              (ed::save-history-file)
              (let ((ini (merge-pathnames "xyzzy.ini" (user-config-path)))
                    (his (merge-pathnames ".xyzzy.history" (user-config-path))))
                (copy-file ini (merge-pathnames "usr/xyzzy.ini" (si:system-root)) :if-exists :overwrite :if-access-denied :skip)
                (copy-file his (merge-pathnames "usr/.xyzzy.history" (si:system-root)) :if-exists :overwrite :if-access-denied :skip)
                (delete-file ini :if-does-not-exist :skip :if-access-denied :skip)
                (delete-file his :if-does-not-exist :skip :if-access-denied :skip)
                (delete-file (si:dump-image-path) :if-does-not-exist :skip :if-access-denied :skip)
                (delete-file (merge-pathnames "XYZZYDOC" (user-config-path)) :if-does-not-exist :skip :if-access-denied :skip)))
          t)
ただ、*kill-xyzzy-hook*の実行よりも後にxyzzy.iniへ書き込まれる設定があるため、xyzzy.iniの削除は完全ではありません。

煮るなり焼くなりご自由に。
(ReadMore...)

* xyzzy lisp : clone-buffer

とりあえずこんなところか。
主だったところはsession.lから。
outline-tree2をバッファバーの代わりにしつつ、rename-bufferを良く使う人向け。
もしくは*compilation*バッファとかでうっかりそのまま編集して、undoができず残念な思いをする人向け。
(defun clone-buffer (buffer-name &optional (buffer (selected-buffer)))
  (interactive "sClone Buffer: ")
  (let ((major buffer-mode)
        (minor (mapcan #'(lambda (mode)
                           (let ((var (and (consp mode) (car mode))))
                             (and (symbolp var)
                                  (boundp var)
                                  (symbol-value var)
                                  (list var))))
                       *minor-mode-alist*))
        (locals (mapcar #'(lambda (var)
                            (and (symbolp var)
                                 (local-variable-p var)
                                 (cons var (symbol-value var))))
                        *buffer-info-variable-list*))
        (point (point)))
    (set-buffer (create-new-buffer buffer-name))
    (insert-buffer buffer)
    (funcall major)
    (mapc #'(lambda (f) (and (fboundp f) (funcall f))) minor)
    (mapc #'(lambda (x)
              (when (and (car x) (symbolp (car x)))
                (make-local-variable (car x))
                (set (car x) (cdr x))))
          locals)
    (goto-char point)))

メモ:
undo情報をそっくり写せるとうれしいかも。
(ReadMore...)

* memo : コマンドプロンプト周りの環境改善

Cygwin無しでそれなりの環境を作る。

(ReadMore...)

* Scrapbook : nDiki: xyzzy を WSHで起動できるように (2004-07-29)

http://www.naney.org/diki/d/2004-07-29-xyzzy.html

* xyzzy topic : USBメモリからの起動に特化したxyzzy

http://blog.2310.net/contents/individual/000047.php
  • xyzzy.iniを$XYZZY/usrに保存(ユーザ名やOS名でフォルダ分けしない)
  • ダンプファイルをシステムのTempフォルダへ保存/読込
  • unlha32.dll等、各種アーカイバDLLがシステムフォルダや$XYZZY内に存在しない場合は$XYZZY/libも探してもらう
(2006-04-09)

* xyzzy topic : bufbar2, popup-key, www-search更新

http://sazasaza.client.jp/xyzzy/
それぞれ変更点は
bufbar2
起動時のファイル周りの処理を改善。delete-buffer と get-next-buffer とでバッファを文字列指定できるように修正。
popup-key
popup-key-add-doc を追加。
www-search
アンインストール方法を変更。
とのこと。