Source of Nothingness - lisp"

* Menu

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

* 2008-11-17 :

(ReadMore...)

* 2008-03-09 :

(ReadMore...)

* 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)
ロードするものが多くなって起動に時間がかかるようになったら、メモリイメージを保存して起動時にこっちを読み込むようにする。

* editorパッケージのbuiltin関数

以下で調べて652個
(let ((count 0))
  (do-symbols (sym (find-package "editor") (format t "~%count: ~d~%" count))
    (when (and (not (find-symbol (symbol-name sym) "lisp"))
               (fboundp sym)
               (si:*builtin-function-p (symbol-function sym)))
      (format t "~a~%" sym)
      (incf count))))
(ReadMore...)

* xyzzy topic : reftex-mode更新

http://f55.aaa.livedoor.jp/~ynomura/xyzzy/#reftex-mode

分からないので引用。
  • オートロード時に "elisp" パッケージが見つからないとエラーが発生するのを修正。
  • 対応するレファレンスの表示機能(View Crossref)が動くようになった。
  • View Crossref のアイドル時の自動表示オプションをメニューから選択できるようにした。
  • \thebibliography 環境の参考文献にも一応対応(非推奨)。
  • Reference 挿入時に、カーソル位置の文字によっては挿入がうまくいかないのを修正。
とのこと。(2006-04-10)

* xyzzy topic : $XYZZY/lispのファイルはread-onlyで開く

http://f55.aaa.livedoor.jp/~ynomura/xyzzy/#c_lisp-dir-read-only

素直な方法はファイル属性を読み取り専用にすることだと思いますけど。
Lispでやるのなら自分だったら*lisp-mode-hook*に引っ掛けます。
string-matchp を使うと大差が無いのでこんなで。
(add-hook '*lisp-mode-hook*
          #'(lambda ()
              (let ((lpath (append-trail-slash (merge-pathnames (si:system-root) "lisp"))))
                (if (string-equal lpath (get-buffer-file-name (selected-buffer)) :end2 (length lpath))
                    (toggle-read-only t)))))

って、修正が入ったのは2ch-modeなどのフレームでファイルを開かないようにするのほうでしたね。