Gauche:REPL
Gaucheの対話環境について。
Replの改善
Gauche:Replの改善
- Chaton 2013/04/24
- yamasushi
gosh -Eと同じことを、replでできたら便利じゃないかなと思います。というのは、gosh>d hoge とよくやってしまうからです。
特定の文字だけに反応して、括弧を補完してくれればいいかなと。今の場合だと、dです。(個人的には$もあると便利だなと。)
試しに入れてみたいのですけれど、これはどこをいじるといいのでしょうか?
- shiro
それだと、dという変数そのものを評価したい時と区別がつかないのでまずいんですが、「行頭に特殊な文字を入れることでシェルのような行指向モードにする」というのは有りです。Allegro CLではREPLプロンプトにコロンで始めるとそういうモードになります。Scheme処理系でも、コンマで始めることで行指向コマンドになるのがあったはず。
で、Gaucheでもそういうのを実験的にREPLに組み込んでみたことがあります。
http://blog.practical-scheme.net/gauche/20100426a-better-repl
これのShell Like Commandsのところですね。コードはリンクした先にあります。ここで試した機能のうち、ヒストリに関しては既にHEADに入っています。Shell Like Commandsも試したければ、該当する部分を lib/gauche/interactive.scm に入れてください。
- yamasushi
yamasushi(2013/04/25 10:16:11 UTC) 本体のreplはそのままにして、xreplを改造してみました。
; xreplのrepl.scm ; 括弧を補完する (define (paren-less) (let1 line (string-trim-both (read-line)) ($ read-from-string $ format #f "(~a)" line) ) ) ; 特別なヘルプ関数infojを呼ぶ (define (invoke-info) (let1 line (string-trim-both (read-line)) ($ read-from-string $ format #f "(infoj ~s)" line ) ) ) ; 変数・関数を定義する (define (define-var) (let1 line (string-trim-both (read-line)) ($ read-from-string $ format #f "(define ~a)" line ) ) ) (define (reader) (case (peek-non-ws-char) [(#\,) (read-char) (read-toplevel-command) ] [(#\:) (read-char) (paren-less) ] [(#\?) (read-char) (invoke-info) ] [(#\=) (read-char) (define-var) ] [else => (^c (if (eof-object? c) c (read)))]))
gosh> = hoge 123 hoge gosh> hoge 123 gosh> = (foo x y) (cons x y) foo gosh> :foo 123 456 (123 . 456) gosh>
初期状態にもどる機能について
- |comments:Gauche:Replの改善::001 Gauche:Replの改善
- skimu (2009/11/24 19:47:10)
すべてを忘れて初期状態にもどる機能(BASIC の NEW みたいなの)があるとうれしいです。 - shiro (2009/11/25 01:27:34)
環境はreplの支配下にないからそれは難しいかなあ。完全に初期状態に戻るにはgoshを立ち上げ直すしかないけど… 自動で自分自身を立ち上げ直せばいいのか?
- skimu (2009/11/24 19:47:10)
rlwrap
その他
Tag: REPL