xyzzy

特定の場合のみ違うことをするコマンドを作る

たとえば C-k (kill-line) は普通、現在位置から行末を kill して改行が残るんだけど、行頭でやったら改行も含めて kill する(1行まるっと kill)にしたい。という場合。 よくあるやり方は、そういうコマンドを作って置き換えるパターン。xyzzyの音 - 編集 …

lisp-mode で保存したら *buffer-package* を設定する

ファイルの先頭付近にあるアレ ;;; -*- mode: lisp; package: editor -*- を見て、*buffer-package* を設定するやつ。*buffer-package* をちゃんとしておかないと ac-mode が上手く補完してくれないとかインデントがおかしいとか色々調子悪いんで。 ;;;; Set…

昨日の日記を今日書く人なので

via 前後の日付を挿入 - 象徴ヶ淵前置引数で数を指定した場合はその文前後にずらすでいいけど、夜寝てしまったとかで昨日の日記を書く事が多々あるので -1 を指定したいことが多い。けど C-u - 1 F5 とかめんどいので C-u F5 は昨日の日付にしてみた。 (defv…

ansify 0.03.00 微妙に更新

大したものは実装してないんですが一区切りしたい気分だったのでリリースしておきます。 変更点 一部の型指定子をグローバルに修正するようにした xl-alexandria の `positive-real` 型などの問題が解消されるはず `(defun (setf READER) ...)` あたりを使え…

jaunte 0.00.01

Good night, Posterous の画像や説明を見て何となく実装してみました。たぶん大体似てる。 前回までのあらすじ window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; if (d.getElementById(id)) retu…

ansify 0.02.00 ごちゃごちゃ更新

パッケージ "ansify" とは別に パッケージ "ansify.ext" を作っりました。ANSI 標準以外の物はこっちから export するようにしま(す|した)。"ansify.ext" からは以下の関数が export されてます。 ansify.ext:optimize-type-check ansify.ext:canonicaliz…

setf-values を更新しました

NetInstaller 用 packages.l 変更点 values の setf expander がインチキだったのをマシに subforms の setf expansion を使うようにした 戻り値にセットした多値を返すようにした lisp::setf-expand-1 のコード見直し 不要と思しきコードを削除した オリジ…

-*- encoding: UTF-8 -*- とか

coding: UTF-8 も使えるように UTF-8 は BOM なしの方で 保存するときに指定した文字コードで ;;; -*- encoding: XXX -*- を取ってくる ;;; encoding じゃなくて coding でもおk(emacs がそうなってるみたい?) (defun file-param-encoding (&optional bu…

addref > info-modoki-mode

xyzzy-lisp 書いてるときは引数とか忘れたら F1 で info-modoki-mode 見てて、それだと reference に入ってないものが見れないんで自分で追加する方法。 必要なもの 全部 netinstaller からインストールできる。 info-modoki-mode: 見るために addref: 追加…

入力乗っ取り+疑似バックグラウンド実行

よい子は真似しちゃダメ ;;; キーボードの入力を乗っ取る ;;; とりあえず乗っ取ってみたかっただけなので、入力されたキーを ;;; そのまま buffer に insert ;;; C-g か RET で終了 (defun read-input () (popup-string "*** キーボード入力 横取り中 ***" (…

define-key で多ストロークを設定

keymap というのは car が editor:keymap とゆー symbol で、cdr が (key . command) の alist らしい。 (setq *keymap* (make-sparse-keymap)) => (keymap) (define-key *keymap* #\C-b 'command) => t *keymap* => (keymap (#\C-b . command)) んで、多ス…

ちょびっと便利なコマンド

息抜きとか思ってちょっとだけ xyzzy lisp。やっぱり「こーゆーことさせたい」から実装するまでのフリクションが低い。慣れの問題だろうか。 行頭とインデントのとこ行ったり来たりする C-a (defun beginning-of-line+ () (interactive) (if (and (bolp) (eq…

format の "~n@A"

;;; on xyzzy * (format t "~10A" :foo) foo => nil * (format t "~10@A" :foo) foo => nil * (format t "~10A" "foo") foo => nil * (format t "~10@A" "foo") foo => nil @ つけると string => 左 symbol => 右 ;;; on SBCL * (format t "~10A" :foo) FOO …

どこの .xyzzy を読んでるか確認する

こないだ twitter で xyzzy の設定で困ってるっぽい人がいたので .xyzxy に (msgbox "hello") とか書いといて、ちゃんと.xyzzy 読んでるか確認してみては とだけ言って寝ちゃったんだけど、その後ちゃんとできたみたい でよかったよかった。せっかくなので、…

minibuffer で何かする

コマンドとか実行中に minibuffer で入力させて文字列を受け取るのに、なんか色々する方法。単に文字列を入力させるなら `completing-read` 使えばいいんだけど、キーマップを変更したりインクリメンタルに何かしたりするには `*enter-minibuffer-hook*` と …

macroexpand-all

執拗な再帰マクロ展開 - 象徴ヶ淵 を見て「あー、あー(詳細は後述)」とか思ったので書き始めてみた。のだけど思ったよりめんどかったので、途中まで書いて GitHub に突っ込んどいた=>http://github.com/bowbow99/xyzzy.macroexpand-all/treeとりあえず単純…

setf-values と symbol-macrolet を公開しました。

http://bowbow99.sakura.ne.jp/xyzzy/packages.l symbol-macrolet が setf-values に依存してます。どっちも require するだけで使えます。使い方は使いたいと思うような人ならわかるだろうという希望的観測に基づいてまだ書いてません。ごめんなさい。さっ…

symbol-macrolet 内外での macrolet 問題

symbol-macrolet と macrolet symbol-macrolet 内で定義された symbol-macro は、macrolet で定義された local-macro の 展開時に変数として参照される symbol 展開後に変数として参照される symbol の両方を symbol-macro として展開する。 手順 macrolet …

macroexpand と environment object

ちょっと諦め気味なので、メモだけ残しておく。昨日からメモりすぎだけど。こんなマクロを書いた。 (defmacro merge-env (&environment env &optional outer) (if outer `(macroexpand '(merge-env) ,outer) env)) merge-env が呼ばれた環境の environment-o…

symbol-macrolet で shadowing しなきゃならん special-form

書いてて気づいたんだけど、単純に除外するんじゃなくて、たとえば (let (foo ...) ...) なら foo は symbol-macro じゃないけど他の bar とかは symbol-macro になるから、bar とかはちゃんと置換しなきゃいけないんだ。うん。で。 関数で lexical scope を…

netinstaller 対応メモ

とりあえず /site-lisp/ni/howto.txt 読め。話はそれからだ。 必要なもの packages.l 配布物のアーカイブ サイト 名前どうしよう?「ローカルでテストするだけだからいいや」とてきとーに名付けたら「もやし」になってた。url はたぶんホームページの url を…

virtual-file-pscp

なんか思ってたのと違った。けどせっかく調べたので書いておく。とりあえず xyzzy の ext-lisp は netinstaller で install したら、該当するファイルを開いて冒頭のコメントを読む。大抵そこに使い方とか書いてある。virtual-file-pscp は *._pscp とゆーフ…

values への setf 対応させる patch

昨日の values への setf で書いたコード(lisp/setf.l への patch)貼るの忘れてたので、http://xyzzy.s53.xrea.com/wiki/index.php?patch%2F30 に貼っておいた。(たしか)Cygwin の diff -u で作ったんだけど、なんか改行が不可思議なことになってたので …

values への setf

defsetf とか define-setf-method とかの使い方はよく知らんのだけど、まぁ何とかなるかなーと思ってた。世の中そんなに甘くなかった。 define-setf-method (setf (access-fn args) new-value) とゆー風に呼び出される access-fn への setf を定義する defin…

GitHub に置いときました

http://github.com/bowbow99/ xl-expectations.l symbol-macrolet.l どっちも「リリースしました!」とか言える状態ではないんで、えーと、その、お察しください。GitHub のリポジトリは、管理画面からリポジトリ名の変更とかリポジトリの削除をできそうなん…

なんちゃって symbol-macrolet

(defmacro symbol-macrolet (defs &body body) (labels ((rplatom (old new forms) (cond ((null forms) nil) ((atom forms) (if (eq forms old) new forms)) (t (cons (rplatom old new (car forms)) (rplatom old new (cdr forms))))))) `(progn ,@(dolist…

そろそろ公開する準備しよう

簡単なとこ(utility とか)のみだけど自分の spec 書いて自分で verify できるようになった。 (specify values-of (expect (values-of '(a b c d) #'car #'cadr #'cddr) (returns 'a 'b '(c d))) (expect (values-of 'a #'identity) (returns 'a)) (expect …

なにかあったら出力

(format t "~:[~;~:*~S~]" <なにか>) #1: nil/non-nil で分岐 "~:[こっち~;そっち~]" という format 文字列を置いとくと、そこに与えられる引数が nil なら "こっち" が、non-nil なら "そっち" が出力される。 (format t "~:[nil だぉ・・・~;non-nil だぉ!!…

xl-expectations.l minimal なの

(expect (+ 1 2 3) (returns 6)) => t (expect (concat "foo" "bar") (returns "foobar")) => t (expect (add 1 2 3) (returns 6)) (add 1 2 3) Expected: return 6 Actually: signaled undefined-function. => nil (expect (+ 'foo 'bar) (signals type-err…

パッケージと名前のプレフィックス

xyzzy の拡張 lisp では「-」みたいな名前をつける習慣がある。たとえば complete+-select-prev-item みたいな。たぶん package system の無い emacs での習慣をそのまま持ってきたんだと思う。これは拡張ごとに package 作っちゃって「:以下、"extension" …