gauche+rlwrapで関数補完を行う
.bashrcに以下を追加
export RLWRAP_HOME=~/.rlwrap function gosh(){ if [ $# -ge 1 ] && [ $1 == '-e' ]; then echo "$2">$$.scm;shift 2;`which gosh` $$.scm "$@";rm $$.scm; else rlwrap -b '(){}[],#\";| ' `which gosh` "$@";fi }
補完リスト作成
$ gosh -e '(for-each print (sort (map symbol->string (let loop ((mod (all-modules))) (if (null? mod) () (append (hash-table-keys (module-table (car mod))) (loop (cdr mod))))))))' > .rlwrap/gosh_completions
これでコマンドラインでgoshを立ち上げた際に関数補完を行う。
ロードしていないモジュールとか考えるともう少し色々しなきゃいけないんだろうが困ったときにまたやるということで。
環境がスキルよりもオーバースペックだ(笑
以下は備忘録
userモジュール以下が束縛している変数一覧を得る
(for-each print (sort (map symbol->string (let loop ((mod (module-precedence-list (current-module)))) (if (null? mod) () (append (hash-table-keys (module-table (car mod))) (loop (cdr mod))))))))
ロードされているモジュールのエクスポートしているリストを得る
(for-each print (sort (map symbol->string (append-map module-exports (all-modules)))))
と、おもったら見事にはまった
(Gauche release 0.7.3から、`.gaucherc'はgoshがスクリプトモードで起動された時は読まれなくなりました。)
残念、今度ライブラリを全部ロードして作り直すか
$ cat .gaucherc (use srfi-1) (use srfi-27)(random-source-randomize! default-random-source) (read-eval-print-loop #f #f (lambda results (map (cut print "=>" <>) results)) (lambda () (display "\n>>") (flush))) (display "\nbye...\n") (exit) $ gosh -e '(for-each print (sort (map symbol->string (map module-name (all-modules)))))' gauche gauche.gf gauche.internal gauche.object gauche.vm.debugger null scheme srfi-10 srfi-17 srfi-2 srfi-6 srfi-8 user $ gosh >>(for-each print (sort (map symbol->string (map module-name (all-modules))))) gauche gauche.collection gauche.defvalues gauche.gf gauche.interactive gauche.internal gauche.object gauche.procedure gauche.sequence gauche.uvector gauche.vm.debugger math.mt-random null scheme srfi-1 srfi-10 srfi-17 srfi-2 srfi-26 srfi-27 srfi-4 srfi-6 srfi-8 user util.queue =>#<undef> >>