lispmode.lの解析、その2
で、知りたいこと
今の所は*3この二つを拡張したい、
のでLet's hack lispmode.l
lispmodeのindentについて調査
36-94行に延々と、
各関数名のシンボルを
'lisp-indent-hookプロパティとして、
インデント数を設定してるみたい。
そのプロパティをcalc-lisp-indent関数で参照、インデント数として使用しているみたい
と、推測してみた( ̄ー+ ̄)
(setf (get 'lambda 'lisp-indent-hook) 'defun) (setf (get 'interactive 'lisp-indent-hook) 1) ;;;以下、いっぱい続く
村瀬の疑問: 'lambda等のシンボルは関数名のシンボル?
なのでちょっと確認。
info-modoki-modeよりgetを検索
使用例: ;;; シンボルにプロパティを設定してみる。 (get 'clyde 'species) => nil (setf (get 'clyde 'species) 'elephant) => elephant (get 'clyde 'species) => elephant ;;; 関数の説明を取得してみる。 (defun foo (x) "increment" (1+ x)) => foo (get 'foo 'lisp::function-documentation) => "increment"
ん〜、関数名みたい。
プロパティの設定って、メタデータの設定って感じなのかな*4?
じゃあ、変数名のシンボルにメタデータ設定できないのかな?
(setf foo 7) ;=> 7 (defun foo (x) "sqrt number" (* x x)) ;=> foo (foo foo) ;=> 49 foo ;=>7 'foo ;=>foo (get 'foo 'lisp::function-documentation) ;=>"sqrt number"
ぐぁ〜、わからんw;
lisp-2なので、変数と関数が分かれていることは確かみたいだけど
用法としてどう使い分けんだったけ?*5
で、インデント動作の確認w;
(setf (get SYMBOL 'lisp-indent-hook) VALUE)
;(setf (get 'lambda 'lisp-indent-hook) 'defun) (setf (get 'lambda 'lisp-indent-hook) '6) ;(setf (get 'interactive 'lisp-indent-hook) 1) (setf (get 'interactive 'lisp-indent-hook) 3)
lambda等のインデントを上記の用に弄ってみる、前に
インデントの確認(分かりづらいので、「スペース、タブ」=>「ドット」にしてます)
(lambda ..(interactive ......))
で、弄ってみて確認。
(lambda ....(interactive ........))
あれ、イメージと違うw;
どうも、意図したとおりにうごいてない。
関数シンボル等のインデントに
上記のプロパティを使ってないのだろうか?