elisp練習
起点ディレクトリ以下のディレクトリをload-pathに追加。
(defun list-directory-tree (directory) (let ((dirs (list directory))) (mapcar (lambda (x) (and (file-directory-p x) (append-to-list 'dirs (list-directory-tree x)))) (directory-files directory t "^[^\.]")) dirs)) (append-to-list 'load-path (list-directory-tree "~/.emacs.d/site-lisp/"))
tokyo-emacs #x01参加してきました。
コピペ厨のためのemacs勉強会 tokyo-emacs#x01に参加してきました。
後一人って所でギリギリ定員割れだったけど、
主催者であるid:hayamizさんに直接連絡したら
前日の深夜に一人キャンセルが出てくれたらしい。
⊂(^ω^)⊃ セフセフ!!
;;;
;;; 以下、個人的に気になった点とか感想とかの箇条書き。
;;;
emacsの基本を勉強しなおそう市民連合会
参加条件:情熱
いつの間にか入ってた。
'(',')'は空気。
S式言語が読めない奴はKYってことなんですねわかります。
pabbrev.el
不覚にもしらなかった。
動的に略語を登録してくれるabbrevらしい。
.abbrev_defに書きこんでくれるのかな?
anythingと連携させたらフリーザ倒せそう。
moz.el/moz-plus.el
emacsからtelnet経由でfirefoxを操作できるelisp。
気にはなっていた使い道が思い浮ばなかったlispの一つ。
これを機にさっそくinstall-elisp。
鬼軍曹.el
使っwwてwwwるwwwww
sense-region.el
矩形選択を簡単にするelisp。
以前入れたけど矩形選択の標準bindに使わなかった記憶がある。
再インストール。
files.el
中身を皆で覗いてみた。
interpreter-mode-alistとかmagic-mode-aliasとか全てが未知の世界。
標準のelispのバイトコンパイルする前のソースをいれかただけ覚えた。
id:IMAKADOさんのきもかわいすぎる。
anythingによるperlの入力補完すげぇぇぇーー。
今度anything設定をemacs-wikiとかに上げてくれないかな。
かがみん
かがみんかわいいよかがみんevalしちゃいたいぐらいかわいいよ。
;;;
;;; 小ネタ系
;;;
(debug)
elispからのdebuggerの起動。
その後eでeval。
(setq skk-show-tooltip t)
skkの変換をtooltipに表示
試しに会場で使ってみたら表示真っ白w
色の設定か?
M-x ansi-term
emacs内でterminaleを実行。
zshも動く。すげーすげー!!
C+M+q
indent-pp-sexp。
indent-regionつかってたけどこっちのほうが便利ね。
やっぱり今のご時世にemacsやろうなんて奴等は大変お馬鹿でいいね。
懇談会の居酒屋で繰り広げられるlisp談義とかemacsを使ったナンパ術とても良い刺激になりました。
俺もああなっちゃうぞーー。うふふふふふ。
後、2008/07/04に8488回目のlinuxカーネル勉強会があるらしい。
全然ついてけなさそうだけどこっちも参加してみようかな。
継続と遅延評価
「プログラミングGauche」で理解できずに読み飛ばしてしまっていた「継続」を
大変わかりやすく解説してくれたエントリーをみつけ、思わず欲情欲情してしまった。
本を読む FizzBuzzとGaucheで学ぶ遅延評価の基礎の基礎
とてもおおざっぱにいうと、
遅延評価は関数型プログラミングで、継続渡しは手続き型プログラミング
例も交えてみると大変納得。
この予備知識をもとに「プログラミングGauche」を再度読み直してみようと思います。
emasaka様に多謝。
Seasar Conference 2008 Spring
社内プロジェクトにSAStruts採用していることもあって、
知り合いと「Seasar Conference 2008 Spring」に参加してきました。
セッションはTeeda・S2DAO・DBFlute・Uluma・SAStruts
そして新プロジェクトとなる「Slim」
既存のSeasar2プロジェクトはどれもチュートリアル的な紹介。
ネットで調べれば簡単にみつかるような内容で
態々見にくる必要性はなかったな。
最後はSeasar2の枠組みからはずれた
国際向けの新プロジェクト「Slim(Simple, Less is More)」
どうやら今日はこれの発表会だった様子。
コンセプトは「Less is more.(建築用語で"より少ないことは、より豊かなこと")」
Seasar2が勝手に色々な事をやり過ぎていた部分をシンプルにした感じ。
特にゴチャゴチャとした印象だったdiconファイル周りが簡素になるのは良い。
まぁそれも直ぐにmediaに取り上げられる内容なので全体としては微妙な内容。
付き合わせた皆さんごめんね。
その後は新宿の善次郎でたらふくホルモン焼食ってきましたとさ。
正規表現に詰まりまくってた。
- #/regexp-spec/で'|(or)'が使えない。
(#/a|b/ "abcdf") ; エラー
どうも'|'を使用するとシンボル名として解釈しにいってしまう様子。
正規表現に限らず'|'がEmacsのScameモードで上手く解釈できないらしい。
(string->regexp "a|b")なら正常動作するので通るのでとりあえずはそれでやり過ごす。
- (#/b+/ "aaabbccbbb")が一件しかマッチしない。
(rxmatch-num-matches (#/b+/ "aaabbccbbb")) 1 ; 想定してた数は2
マッチする文字列をリストが欲しいのだが、これではマッチ後の文字列を更に正規表現にかけなくてはならない。
どうやらこれは正しい仕様の様子。
(define (rxmatch-list regexp string) (cond [(regexp string) => (lambda(x) (cons (x) (rxmatch-list regexp (x 'after))))] [else '()]))
マッチする全ての文字列のリストが欲しい場合はこんな感じか?
Gaucheのバージョンが0.8.8-2(現在apt-getで手に入るバージョン)では動かないかも。