* Menu
- 2006-03-28
- SLIME勉強会
- editorパッケージのbuiltin関数
- xyzzy lisp : clone-buffer
- xyzzy lisp : 候補の絞込みをするpopup-list
- xyzzy lisp : Buffer selection
- xyzzy lisp : walk-windowsの代わりに
- xyzzy lisp : へなちょこ補完その3
- xyzzy lisp : へなちょこ補完その2
- xyzzy lisp : へなちょこ補完
- xyzzy lisp : ディレクトリ付きにしてユニークなバッファ名に
- xyzzy topic : $XYZZY/lispのファイルはread-onlyで開く
- xyzzy lisp : outline-treeの表示順にnext-bufferとか
page 0 - << : 0 : >>
* 2006-03-28
「0(ゼロ)」にスラッシュが入ったフォントがいっぱい見つかってうれしくなったので、色設定を見直し。
暗い背景にしてみた。
http://raido.sakura.ne.jp/southly/xyzzy/xyzzy.png
(ReadMore...)
暗い背景にしてみた。
http://raido.sakura.ne.jp/southly/xyzzy/xyzzy.png
(ReadMore...)
* SLIME勉強会
- いろいろと便利な機能を教えてもらいました。
- 気に入ったのは M-x slime-scratch や M-x slime-selector。
- コンパイル主体の開発スタイルも、なるほどと思いました。xyzzyでのやり方に引きずられていたんだなと。
- あとsbclを主体にしないともったいないなと、clispでは使えない機能がいくつかありました。
- 少なくともclispのarglistの件はどうにかしたいな。要調査ということで。
- ビデオを見つつ復習。
- SLIME Quick Reference Card を知ったので、自分用を作ってみようかと。
- SLIME以外の話が半分くらい? colorize は試してみようと思います。
- http://cadr.g.hatena.ne.jp/g000001/20080427
- http://d.hatena.ne.jp/tsz/20080426
- http://cadr.g.hatena.ne.jp/mokehehe/20080426
* 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 lisp : clone-buffer
とりあえずこんなところか。
主だったところはsession.lから。
outline-tree2をバッファバーの代わりにしつつ、rename-bufferを良く使う人向け。
もしくは*compilation*バッファとかでうっかりそのまま編集して、undoができず残念な思いをする人向け。
メモ:
undo情報をそっくり写せるとうれしいかも。
(ReadMore...)
主だったところは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...)
* xyzzy lisp : 候補の絞込みをするpopup-list
http://xyzzy.s53.xrea.com/wiki/index.php?%BC%C1%CC%E4%C8%A2%2F173
上のページにいくつかありますが元のpopup-listと引数が異なっていて置き換えにくいので書き直し。正規表現を使っていなかった佐野さんのがベース。
ちなみに実際に使うときはこれみたいに引数にbase(すでに一致している部分)をとらないといけないような気がしてる。
上のページにいくつかありますが元のpopup-listと引数が異なっていて置き換えにくいので書き直し。正規表現を使っていなかった佐野さんのがベース。
(defun popup-list-loop (list callback &optional point with-insert) (let ((str "") (matched list) matched1 selected input) (loop (if with-insert (insert str)) (popup-list matched (lambda (x) (setq selected x)) point) ; #\ESC (refresh-screen) (while (not (or selected (setq input (read-char-no-hang *keyboard*)))) (do-events)) (if with-insert (delete-region (- (point) (length str)) (point))) (cond (selected (funcall callback selected) (if (eql input #\SPC) (unread-char input)) (return t)) ; ((eql input #\ESC) (return nil)) ((eql input #\C-h) (unless (zerop (length str)) (setq str (substring str 0 -1)))) ((graphic-char-p input) (setq str (format nil "~A~C" str input))) (t (unread-char input) (return nil))) (setq matched1 (remove-if (lambda (x) (or (< (length x) (length str)) (string/= x str :end1 (length str)))) list)) (if (endp matched1) (if with-insert (progn (funcall callback str) (return t)) (setq str (substring str 0 -1))) (setq matched matched1)))))できるだけ元のpopup-listと同じ操作感になるようにしたつもりですが、ウィンドウをESCで閉じたときの動作だけは感知する手段が無くて無理でした。
- 2006-10-19修正。eqで文字を比較するのは処理系依存だったのでeqlに。
ちなみに実際に使うときはこれみたいに引数にbase(すでに一致している部分)をとらないといけないような気がしてる。
* xyzzy lisp : Buffer selection
http://www.geekware.de/software/emacs/#bs
の移植をしてみました。
http://raido.sakura.ne.jp/southly/xyzzy/site-lisp/bs-20060920.lzh
元の動作は知らないのですが、八割程度は動いているような気がします。
どんなものかは
http://www.bookshelf.jp/soft/meadow_28.html#SEC352
気が向いたときにでもNetInstaller用のパッケージにします。
の移植をしてみました。
http://raido.sakura.ne.jp/southly/xyzzy/site-lisp/bs-20060920.lzh
元の動作は知らないのですが、八割程度は動いているような気がします。
どんなものかは
http://www.bookshelf.jp/soft/meadow_28.html#SEC352
気が向いたときにでもNetInstaller用のパッケージにします。
* xyzzy lisp : walk-windowsの代わりに
(defun enum-windows (fn &optional minibuf) (save-excursion (save-window-excursion (do ((win (selected-window) (next-window win minibuf)) (cnt (count-windows minibuf) (1- cnt))) ((zerop cnt) nil) (set-window win) (let ((res (funcall fn win))) (if res (return res)))))))
* xyzzy lisp : へなちょこ補完その3
* xyzzy lisp : へなちょこ補完その2
* xyzzy lisp : へなちょこ補完
* xyzzy lisp : ディレクトリ付きにしてユニークなバッファ名に
機能的にはしょぼしょぼすくりぷとさんと同等。
ひとつ上のディレクトリでやめてしまうみたいだから自分で書いてみた。
ひとつ上のディレクトリでやめてしまうみたいだから自分で書いてみた。
(defun buffer-name-with-directory () (let* ((buffer (selected-buffer)) (name (buffer-name buffer)) dirs) (when (string-match "<[0-9]+>" name) (setq dirs (reverse (pathname-directory (get-buffer-file-name buffer)))) (setq name (format nil "~A/~A" (pop dirs) (file-namestring (get-buffer-file-name buffer)))) (while (and dirs (dolist (x (buffer-list)) (if (string= (buffer-name x) name) (return t)))) (setq name (format nil "~A/~A" (pop dirs) name))) (rename-buffer (abbreviate-display-string name 40) buffer)))) (add-hook '*find-file-hooks* 'buffer-name-with-directory)
* xyzzy topic : $XYZZY/lispのファイルはread-onlyで開く
http://f55.aaa.livedoor.jp/~ynomura/xyzzy/#c_lisp-dir-read-only
素直な方法はファイル属性を読み取り専用にすることだと思いますけど。
Lispでやるのなら自分だったら*lisp-mode-hook*に引っ掛けます。
string-matchp を使うと大差が無いのでこんなで。
って、修正が入ったのは2ch-modeなどのフレームでファイルを開かないようにするのほうでしたね。
素直な方法はファイル属性を読み取り専用にすることだと思いますけど。
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などのフレームでファイルを開かないようにするのほうでしたね。
* xyzzy lisp : outline-treeの表示順にnext-bufferとか
(in-package "outline-tree2") (global-set-key #\C-PageUp #'(lambda () (interactive) (outline-tree-previous-buffer) (outline-tree-select-node-by-buffer (selected-buffer)))) (global-set-key #\C-PageDown #'(lambda () (interactive) (outline-tree-next-buffer) (outline-tree-select-node-by-buffer (selected-buffer))))
outline-treeをバッファバーの代わりにしているから、その見た目どおりに移動したい、
ということで、マウスに触る機会を減らすために。
outline-treeは規模が大きいからなかなか読めない(^^;
page 0 - << : 0 : >>