プロジェクトの site-lisp を *load-path* に追加する

xyzzy の拡張書くときは ~/work/<プロジェクト名> にこんな風にファイルが配置される。 ~/work/<プロジェクト名>/ README.md site-lisp/ <プロジェクト名>.l <プロジェクト名>/ packages.l util.l ... 最初は <プロジェクト名>.l に全部書いてるんだけど、何…

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

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

defvar で再定義

lisp を書いてると defvar の初期値を変更して読み込んでも値は変わらなくて、「めんどくせーな」とか言いながら repl から setf し直すハメになることがちょくちょくあるので、defvar で再定義したときに最初(前回)の初期値から変更されてなければ値を更…

Common Lisp で JavaScript の JSON.stringify?

Common LispでJavaScriptのJSON.stringify←→JSON.parseのようなことをする - @peccul is peccuを見てちょっと気になったので。乱暴に言うと Common Lisp の出力には2種類あって、正しい呼び方があるような気がするけど知らないので "PRINC出力" "PRIN1出力" …

キーワードテーブルが大文字小文字を区別するかどうか

結論: (hash-table-test ) が equal なら区別する、equalp なら同一視する (defun keyword-table-ignore-case-p (table) (eql (keyword-table-test table) 'equalp)) 説明 キーワードテーブルは load-keyword-file でキーワードファイルを読み込むと作成され…

Yosemite + Karabiner で Dvorak の設定

Mac

とりあえず Windows で使ってたのと同程度に使えるようにしたかった。 その Windows で使ってた配列が困ったこと窓使いの憂鬱依存なのだけど、なんとかそれっぽい設定にできたのでメモ。 目標とする設定 基本的な配列は Dvorak Space が SandS 左Ctrl が単独…

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

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

[xyzzy] C-x a で変数をセットするやつ

2014-10-19 * バッファローカルな変数をちゃんとセットできてなかったのを修正 * 標準の関数上書きするのをやめた主に lisp 書いてて *buffer-package* を修正するのに使ってる。けど微妙に使いにくいので余計なことをしてみた。 値を入力するときに元の値と…

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

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

パッケージ名をキーワードで書く理由

一言で言うと: xyzzy でも CL でも同じように書けるから 文字列で書くと... xyzzy でも CL でも文字列は大文字/小文字の変換などされないので、小文字はそのまま扱われる。defpackage でパッケージ名を文字列で書くと、パッケージ名に小文字を含んだパッケー…

main-loop と {exit,quit}-recursive-edit

昔見つけたのをちょいと調べてみた。 main-loop 呼び出すと、現在実行中の処理をポーズしたまま xyzzy が操作を受け付けるようになる。ミニバッファに突入しない read-string みたいな感じ。 {exit,quit}-recursive-edit main-loop のポーズを解除して元の処…

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…

ロカール関数で (setf READER) を諦めた記録

CL だとこんなことができる。 ;; Clozure CL での例 CL-USER> (let ((table (make-hash-table))) (labels ((key (key) (gethash key table)) ((setf key) (value key) (setf (gethash key table) value))) (setf (key 1) "foo" (key 2) "bar") (maphash (lam…

ansify 0.02.00 ごちゃごちゃ更新

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

local-window-flag

http://xyzzy.s53.xrea.com/reference/wiki.cgi?p=set-local-window-flags で設定する行番号とかのやつ。 フラグは on か off か未設定か window と buffer がそれぞれにフラグを覚えてる 優先順位は buffer > window > (グローバルな設定) `get-local-win…

ansify 0.01.01 バグ修正

早速 id:miyamuko さんからバグ報告もらったので修正しました。毎度ありがとうございます。 case, typecase で `ansify::otherwise` ではなく `lisp:otherwise` を使うように修正 xyzzy には otherwise は無いものと思い込んでたけどあった print-unreadable…

case の途中で (otherwise ...)

keys---a designator for a list of objects. In the case of case, the symbols t and otherwise may not be used as the keys designator. To refer to these symbols by themselves as keys, the designators (t) and (otherwise), respectively, must be…

setf-values 0.01.02 更新しました

しょーもないミスでおかしな展開形になってたのを修正した(miyamuko さんからパッチ頂きました。ありがとうございます。)のと、変数以外の atom に setf しようとしたのはマクロ展開時にエラーに。 NetInstaller 用 packages.l 手動ダウンロード用 setf-va…

ansify 0.01.00 をリリースしました

今までバラバラに作ってた ANSI Common Lisp からもらってきたようなものを1つにまとめました。 具体的には NetInstaller 対応してたもの condition-restart symbol-macrolet typespec+ GitHub あたりでこっそり作ってたもの GitHub - bowbow99/xyzzy.typeca…

XTAGS #2 飛ぶ

タグジャンプ(jump-tag)できるようにするための何やら。 ローカル変数 ed:tags-find-target この変数にセットした関数が引数なしで呼び出されるので、カーソル位置の単語を調べて クラス名 名前 関数か否か を多値で返す。 3つ目の値は、nil なら変数、'li…

XTAGS #1 作る

XTAGS を作る(make-tags-file)ための何やら。 変数 ed::*maketag-list* XTAGS を作る時は ed::*maketag-list* に設定された (タグ作る関数 ワイルドカード...) に従ってワイルドカードにマッチするファイルをタグ作る関数で処理していく。ワイルドカードの…

Yet Another Common Lisp Problems #7 subseq

●問題7 リスト xs の n 番目から m - 1 番目までの要素を部分リストとして取り出す関数 subseq xs n m を定義してください。なお、リストの要素は 0 から数え始めるものとします。Common Lisp には同等の機能を持つ関数 subseq がありますので、ここでは関…

Yet Another Common Lisp Problems #6 drop

再開。 ●問題6 リスト xs の先頭から n 個の要素を取り除く関数 drop xs n を定義してください。なお、Common Lisp には同等の機能を持つ関数 nthcdr があります。 > (drop '(a b c d e) 3) (d e) > (drop '(a b c d e) 0) (a b c d e) > (drop '(a b c d e…

setf-values を更新しました

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

symbol-macrolet 更新しました。

NetInstaller 用 packages.l multiple-value-bind の body の先頭に symbol-macro を置いた場合に展開されなかったのを修正。どうして以前 lambda でほぼ同じバグを潰した時に修正しておかなかったのかと小一時間問い詰めたい。 ついでにリファレンスのファ…

Yet Another Common Lisp Problems #5 take

●問題5 リスト xs の先頭から n 個の要素を取り出す関数 take xs n を定義してください。 > (take '(a b c d e) 3) (a b c) > (take '(a b c d e) 0) () > (take '(a b c d e) 6) (a b c d e) 解答 ホームページ移転のお知らせ - Yahoo!ジオシティーズ 無駄…

Yet Another Common Lisp Problems #4 my-last, my-butlast

●問題4 リスト xs の最後尾を求める関数 last と、最後尾の要素を取り除く関数 butlast を定義してください。Common Lisp には同等の機能を持つ関数 last と butlast がありますので、ここでは関数名を my-last と my-butlast としました。 > (my-last '(a …

Yet Another Common Lisp Problems #3 longerp

●問題3 リスト xs はリスト ys よりも長いか調べる述語 longerp xs ys を定義してください。 > (longerp '(a b c) '(a b)) t > (longerp '(a b) '(a b)) nil > (longerp '(a) '(a b)) nil 解答 ホームページ移転のお知らせ - Yahoo!ジオシティーズ これも O…

Yet Another Common Lisp Problems #2 doublep

●問題2 リストの要素が二つあるか調べる述語 doublep を定義してください。 > (doublep '(a b)) t > (doublep '(a b c)) nil > (doublep '(a)) nil 解答 ホームページ移転のお知らせ - Yahoo!ジオシティーズ doublep って double-float-p と間違えそうだ。…