* Re: bug#13077: guile: add repl-option for customized print [not found] <87hao21nte.fsf@gmail.com> @ 2012-12-04 5:19 ` nalaginrut 2012-12-04 5:34 ` Daniel Hartwig [not found] ` <CAN3veReRKhsGip-jev8YyYf_xbTLFFK-bEN=9bR8BddatGWLKg__21131.9749746055$1354599399$gmane$org@mail.gmail.com> 0 siblings, 2 replies; 10+ messages in thread From: nalaginrut @ 2012-12-04 5:19 UTC (permalink / raw) To: Daniel Hartwig, guile-devel; +Cc: 13077 Hi Daniel! I believe this patch simplified my work, and 'colorized' module has been finished, I'm testing and debugging. I'll post it when it's all done. Thanks! On Tue, 2012-12-04 at 11:46 +0800, Daniel Hartwig wrote: > Package: guile > Severity: wishlist > Tags: patch > X-Debbugs-CC: nalaginrut <nalaginrut@gmail.com> > > Dear maintainer > > The attached patch adds a new repl-option to set a custom print > procedure. > > -- > scheme@(guile-user)> (use-modules (srfi srfi-1)) > scheme@(guile-user)> (iota 20) > $1 = (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19) > scheme@(guile-user)> (define (repl-print* repl val) > (if (not (eq? val *unspecified*)) > (begin > (run-hook before-print-hook val) > (format #t "~20@y" val) > (newline)))) > scheme@(guile-user)> (use-modules (system repl common)) > scheme@(guile-user)> (repl-option-set! (car (fluid-ref *repl-stack*)) 'print repl-print*) > scheme@(guile-user)> (iota 20) > $2 = (0 1 2 3 4 5 6 7 …) > differences between files attachment > (0001-repl-add-repl-option-for-customized-print.patch) > From b0cadcb69a12a4ed2a205f4854af41bf926da20b Mon Sep 17 00:00:00 2001 > From: Daniel Hartwig <mandyke@gmail.com> > Date: Tue, 4 Dec 2012 11:41:35 +0800 > Subject: [PATCH] repl: add repl-option for customized print > > * module/system/repl/common.scm (repl-default-options) > (repl-print): Add option to use customized print procedure. > * doc/ref/scheme-using.texi (REPL Commands): Update. > --- > doc/ref/scheme-using.texi | 4 ++++ > module/system/repl/common.scm | 26 +++++++++++++++++--------- > 2 files changed, 21 insertions(+), 9 deletions(-) > > diff --git a/doc/ref/scheme-using.texi b/doc/ref/scheme-using.texi > index 7eb84de..4f9e6db 100644 > --- a/doc/ref/scheme-using.texi > +++ b/doc/ref/scheme-using.texi > @@ -445,6 +445,10 @@ choice is available. Off by default (indicating compilation). > @item prompt > A customized REPL prompt. @code{#f} by default, indicating the default > prompt. > +@item print > +A procedure of two arguments used to print the result of evaluating each > +expression. The arguments are the current REPL and the value to print. > +By default, @code{#f}, to use the default procedure. > @item value-history > Whether value history is on or not. @xref{Value History}. > @item on-error > diff --git a/module/system/repl/common.scm b/module/system/repl/common.scm > index 346ba99..fd41b09 100644 > --- a/module/system/repl/common.scm > +++ b/module/system/repl/common.scm > @@ -119,6 +119,11 @@ See <http://www.gnu.org/licenses/lgpl.html>, for more details.") > ((thunk? prompt) (lambda (repl) (prompt))) > ((procedure? prompt) prompt) > (else (error "Invalid prompt" prompt))))) > + (print #f ,(lambda (print) > + (cond > + ((not print) #f) > + ((procedure? print) print) > + (else (error "Invalid print procedure" print))))) > (value-history > ,(value-history-enabled?) > ,(lambda (x) > @@ -206,15 +211,18 @@ See <http://www.gnu.org/licenses/lgpl.html>, for more details.") > (% (thunk)))) > > (define (repl-print repl val) > - (if (not (eq? val *unspecified*)) > - (begin > - (run-hook before-print-hook val) > - ;; The result of an evaluation is representable in scheme, and > - ;; should be printed with the generic printer, `write'. The > - ;; language-printer is something else: it prints expressions of > - ;; a given language, not the result of evaluation. > - (write val) > - (newline)))) > + (cond > + ((repl-option-ref repl 'print) > + => (lambda (print) (print repl val))) > + ((not (eq? val *unspecified*)) > + (begin > + (run-hook before-print-hook val) > + ;; The result of an evaluation is representable in scheme, and > + ;; should be printed with the generic printer, `write'. The > + ;; language-printer is something else: it prints expressions of > + ;; a given language, not the result of evaluation. > + (write val) > + (newline))))) > > (define (repl-option-ref repl key) > (cadr (or (assq key (repl-options repl)) ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: bug#13077: guile: add repl-option for customized print 2012-12-04 5:19 ` bug#13077: guile: add repl-option for customized print nalaginrut @ 2012-12-04 5:34 ` Daniel Hartwig 2012-12-04 6:30 ` nalaginrut 2012-12-12 4:03 ` Nala Ginrut [not found] ` <CAN3veReRKhsGip-jev8YyYf_xbTLFFK-bEN=9bR8BddatGWLKg__21131.9749746055$1354599399$gmane$org@mail.gmail.com> 1 sibling, 2 replies; 10+ messages in thread From: Daniel Hartwig @ 2012-12-04 5:34 UTC (permalink / raw) To: nalaginrut; +Cc: 13077, guile-devel [-- Attachment #1: Type: text/plain, Size: 820 bytes --] On 4 December 2012 13:19, nalaginrut <nalaginrut@gmail.com> wrote: > Hi Daniel! > I believe this patch simplified my work, and 'colorized' module has been > finished, I'm testing and debugging. > I'll post it when it's all done. Glad to hear it. Attached is an alternate patch that handles before-print-hook and *unspecified* outside of the custom print procedure, to avoid the need for boilerplate there. -- scheme@(guile-user)> (define (repl-print* repl val) (format #t "~20@y" val) (newline)) scheme@(guile-user)> (use-modules (system repl common)) scheme@(guile-user)> (repl-option-set! (car (fluid-ref *repl-stack*)) 'print repl-print*) scheme@(guile-user)> (use-modules (srfi srfi-1)) scheme@(guile-user)> (iota 20) $1 = (0 1 2 3 4 5 6 7 …) [-- Attachment #2: 0001-repl-add-repl-option-for-customized-print.alt.patch --] [-- Type: application/octet-stream, Size: 2948 bytes --] From 2251a259058524fbe631fd287c95b43882227f79 Mon Sep 17 00:00:00 2001 From: Daniel Hartwig <mandyke@gmail.com> Date: Tue, 4 Dec 2012 11:41:35 +0800 Subject: [PATCH] repl: add repl-option for customized print * module/system/repl/common.scm (repl-default-options) (repl-print): Add option to use customized print procedure. * doc/ref/scheme-using.texi (REPL Commands): Update. --- doc/ref/scheme-using.texi | 4 ++++ module/system/repl/common.scm | 21 +++++++++++++++------ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/doc/ref/scheme-using.texi b/doc/ref/scheme-using.texi index 7eb84de..4f9e6db 100644 --- a/doc/ref/scheme-using.texi +++ b/doc/ref/scheme-using.texi @@ -445,6 +445,10 @@ choice is available. Off by default (indicating compilation). @item prompt A customized REPL prompt. @code{#f} by default, indicating the default prompt. +@item print +A procedure of two arguments used to print the result of evaluating each +expression. The arguments are the current REPL and the value to print. +By default, @code{#f}, to use the default procedure. @item value-history Whether value history is on or not. @xref{Value History}. @item on-error diff --git a/module/system/repl/common.scm b/module/system/repl/common.scm index 346ba99..3f3e785 100644 --- a/module/system/repl/common.scm +++ b/module/system/repl/common.scm @@ -119,6 +119,11 @@ See <http://www.gnu.org/licenses/lgpl.html>, for more details.") ((thunk? prompt) (lambda (repl) (prompt))) ((procedure? prompt) prompt) (else (error "Invalid prompt" prompt))))) + (print #f ,(lambda (print) + (cond + ((not print) #f) + ((procedure? print) print) + (else (error "Invalid print procedure" print))))) (value-history ,(value-history-enabled?) ,(lambda (x) @@ -209,12 +214,16 @@ See <http://www.gnu.org/licenses/lgpl.html>, for more details.") (if (not (eq? val *unspecified*)) (begin (run-hook before-print-hook val) - ;; The result of an evaluation is representable in scheme, and - ;; should be printed with the generic printer, `write'. The - ;; language-printer is something else: it prints expressions of - ;; a given language, not the result of evaluation. - (write val) - (newline)))) + (cond + ((repl-option-ref repl 'print) + => (lambda (print) (print repl val))) + (else + ;; The result of an evaluation is representable in scheme, and + ;; should be printed with the generic printer, `write'. The + ;; language-printer is something else: it prints expressions of + ;; a given language, not the result of evaluation. + (write val) + (newline)))))) (define (repl-option-ref repl key) (cadr (or (assq key (repl-options repl)) -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: bug#13077: guile: add repl-option for customized print 2012-12-04 5:34 ` Daniel Hartwig @ 2012-12-04 6:30 ` nalaginrut 2012-12-04 6:34 ` Daniel Hartwig 2012-12-12 4:03 ` Nala Ginrut 1 sibling, 1 reply; 10+ messages in thread From: nalaginrut @ 2012-12-04 6:30 UTC (permalink / raw) To: Daniel Hartwig; +Cc: 13077, guile-devel I'll post my original guile-colorized which uses 'before-print-hook' to guile-dev. Though I've already tested it, I wish all folks test it for me. And I'll update it to repl-option version after ludo/andy accepts your patch. Or I should post it include your patch altogether? ;-) On Tue, 2012-12-04 at 13:34 +0800, Daniel Hartwig wrote: > On 4 December 2012 13:19, nalaginrut <nalaginrut@gmail.com> wrote: > > Hi Daniel! > > I believe this patch simplified my work, and 'colorized' module has been > > finished, I'm testing and debugging. > > I'll post it when it's all done. > > Glad to hear it. > > Attached is an alternate patch that handles before-print-hook and > *unspecified* outside of the custom print procedure, to avoid the need > for boilerplate there. > > -- > scheme@(guile-user)> (define (repl-print* repl val) > (format #t "~20@y" val) > (newline)) > scheme@(guile-user)> (use-modules (system repl common)) > scheme@(guile-user)> (repl-option-set! (car (fluid-ref *repl-stack*)) > 'print repl-print*) > scheme@(guile-user)> (use-modules (srfi srfi-1)) > scheme@(guile-user)> (iota 20) > $1 = (0 1 2 3 4 5 6 7 …) ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: bug#13077: guile: add repl-option for customized print 2012-12-04 6:30 ` nalaginrut @ 2012-12-04 6:34 ` Daniel Hartwig 0 siblings, 0 replies; 10+ messages in thread From: Daniel Hartwig @ 2012-12-04 6:34 UTC (permalink / raw) To: nalaginrut; +Cc: guile-devel On 4 December 2012 14:30, nalaginrut <nalaginrut@gmail.com> wrote: > And I'll update it to repl-option version after ludo/andy accepts your > patch. > > Or I should post it include your patch altogether? ;-) Separate is easier to work with. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: bug#13077: guile: add repl-option for customized print 2012-12-04 5:34 ` Daniel Hartwig 2012-12-04 6:30 ` nalaginrut @ 2012-12-12 4:03 ` Nala Ginrut 2012-12-12 5:00 ` Daniel Hartwig 1 sibling, 1 reply; 10+ messages in thread From: Nala Ginrut @ 2012-12-12 4:03 UTC (permalink / raw) To: Daniel Hartwig; +Cc: 13077, guile-devel hi Daniel! Custom color-scheme is done now! ;-D But we have a problem... :-( It's OK to test this code in the REPL: --------------------cut------------------- (use-modules (ice-9 colorized)) (add-color-scheme! `((,(lambda (data) (and (number? data) (> data 10000))) MY-LONG-NUM ,color-it (RED)))) (activate-colorized) --------------------end------------------- But when I put these lines into our ~/.guile, it throw error: ----------------err msg---------------- In /usr/local/share/guile/2.0/ice-9/colorized.scm: 31: 0 [activate-colorized] /usr/local/share/guile/2.0/ice-9/colorized.scm:31:20: In procedure activate-colorized: /usr/local/share/guile/2.0/ice-9/colorized.scm:31:20: In procedure car: Wrong type argument in position 1 (expecting pair): () ------------------end------------------ Seems (fluid-ref *repl-stack*) is not a pair/list when REPL is just started? Please checkout here: https://github.com/NalaGinrut/guile-colorized/blob/upstream/ice-9/colorized.scm#L31 Thanks! On Tue, 2012-12-04 at 13:34 +0800, Daniel Hartwig wrote: > On 4 December 2012 13:19, nalaginrut <nalaginrut@gmail.com> wrote: > > Hi Daniel! > > I believe this patch simplified my work, and 'colorized' module has been > > finished, I'm testing and debugging. > > I'll post it when it's all done. > > Glad to hear it. > > Attached is an alternate patch that handles before-print-hook and > *unspecified* outside of the custom print procedure, to avoid the need > for boilerplate there. > > -- > scheme@(guile-user)> (define (repl-print* repl val) > (format #t "~20@y" val) > (newline)) > scheme@(guile-user)> (use-modules (system repl common)) > scheme@(guile-user)> (repl-option-set! (car (fluid-ref *repl-stack*)) > 'print repl-print*) > scheme@(guile-user)> (use-modules (srfi srfi-1)) > scheme@(guile-user)> (iota 20) > $1 = (0 1 2 3 4 5 6 7 …) ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: bug#13077: guile: add repl-option for customized print 2012-12-12 4:03 ` Nala Ginrut @ 2012-12-12 5:00 ` Daniel Hartwig 2012-12-12 5:49 ` Nala Ginrut 0 siblings, 1 reply; 10+ messages in thread From: Daniel Hartwig @ 2012-12-12 5:00 UTC (permalink / raw) To: Nala Ginrut; +Cc: guile-devel [No need to Cc the bug report] On 12 December 2012 12:03, Nala Ginrut <nalaginrut@gmail.com> wrote: > Seems (fluid-ref *repl-stack*) is not a pair/list when REPL is just > started? Correction: is not a pair/list when /guile/ is just started. The program, guile, is not a REPL, that is only an optional component of it. You can't set REPL options before there is a REPL. The rc file (.guile) is applicable to all of guile, and read during initialization which is before any REPL is created. Try repl-default-option-set!. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: bug#13077: guile: add repl-option for customized print 2012-12-12 5:00 ` Daniel Hartwig @ 2012-12-12 5:49 ` Nala Ginrut [not found] ` <CAN3veRdDA-LwBhu7_Uthfj1h7HGzvFOPLoOtkoyd-MQOA+1Xug@mail.gmail.com> 0 siblings, 1 reply; 10+ messages in thread From: Nala Ginrut @ 2012-12-12 5:49 UTC (permalink / raw) To: Daniel Hartwig; +Cc: guile-devel On Wed, 2012-12-12 at 13:00 +0800, Daniel Hartwig wrote: > [No need to Cc the bug report] > > On 12 December 2012 12:03, Nala Ginrut <nalaginrut@gmail.com> wrote: > > Seems (fluid-ref *repl-stack*) is not a pair/list when REPL is just > > started? > > Correction: is not a pair/list when /guile/ is just started. The > program, guile, is not a REPL, that is only an optional component of > it. > > You can't set REPL options before there is a REPL. The rc file > (.guile) is applicable to all of guile, and read during initialization > which is before any REPL is created. > > Try repl-default-option-set!. repl-default-option-set! seems didn't make sense. How can I check the REPL exist? My idea is to do that after I detected the REPL existed. I believe people more like to activate the colored-REPL automatically when ~/.guile is setup. Rather than call (activate-colorized) manually, just like 'readline' module does. Regards. ^ permalink raw reply [flat|nested] 10+ messages in thread
[parent not found: <CAN3veRdDA-LwBhu7_Uthfj1h7HGzvFOPLoOtkoyd-MQOA+1Xug@mail.gmail.com>]
* Re: bug#13077: guile: add repl-option for customized print [not found] ` <CAN3veRdDA-LwBhu7_Uthfj1h7HGzvFOPLoOtkoyd-MQOA+1Xug@mail.gmail.com> @ 2012-12-12 6:03 ` Daniel Hartwig 0 siblings, 0 replies; 10+ messages in thread From: Daniel Hartwig @ 2012-12-12 6:03 UTC (permalink / raw) To: Nala Ginrut, guile-devel On 12 December 2012 14:01, Daniel Hartwig <mandyke@gmail.com> wrote: > On 12 December 2012 13:49, Nala Ginrut <nalaginrut@gmail.com> wrote: >> repl-default-option-set! seems didn't make sense. > > Works fine for me. > >> >> I believe people more like to activate the colored-REPL automatically >> when ~/.guile is setup. Rather than call (activate-colorized) manually, >> just like 'readline' module does. > > Then you rather implement “repl-printer” akin to “repl-reader” used by > the readline module. … and perhaps that makes more sense than using a repl option, given the symmetry between printer and reader. ^ permalink raw reply [flat|nested] 10+ messages in thread
[parent not found: <CAN3veReRKhsGip-jev8YyYf_xbTLFFK-bEN=9bR8BddatGWLKg__21131.9749746055$1354599399$gmane$org@mail.gmail.com>]
* Re: bug#13077: guile: add repl-option for customized print [not found] ` <CAN3veReRKhsGip-jev8YyYf_xbTLFFK-bEN=9bR8BddatGWLKg__21131.9749746055$1354599399$gmane$org@mail.gmail.com> @ 2012-12-04 6:39 ` Thien-Thi Nguyen 2012-12-04 7:36 ` Daniel Hartwig 0 siblings, 1 reply; 10+ messages in thread From: Thien-Thi Nguyen @ 2012-12-04 6:39 UTC (permalink / raw) To: Daniel Hartwig; +Cc: guile-devel, 13077 [-- Attachment #1: Type: text/plain, Size: 650 bytes --] () Daniel Hartwig <mandyke@gmail.com> () Tue, 4 Dec 2012 13:34:52 +0800 patch that handles [...] *unspecified* Can ‘unspecified?’ (the procedure) be used? I seem to recall people wanting to avoid using ‘*unspecified*’ (the unique object) a while back. -- Thien-Thi Nguyen ..................................... GPG key: 4C807502 . NB: ttn at glug dot org is not me . . (and has not been since 2007 or so) . . ACCEPT NO SUBSTITUTES . ........... please send technical questions to mailing lists ........... [-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --] ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: bug#13077: guile: add repl-option for customized print 2012-12-04 6:39 ` Thien-Thi Nguyen @ 2012-12-04 7:36 ` Daniel Hartwig 0 siblings, 0 replies; 10+ messages in thread From: Daniel Hartwig @ 2012-12-04 7:36 UTC (permalink / raw) To: Thien-Thi Nguyen; +Cc: guile-devel, 13077 On 4 December 2012 14:39, Thien-Thi Nguyen <ttn@gnuvola.org> wrote: > () Daniel Hartwig <mandyke@gmail.com> > () Tue, 4 Dec 2012 13:34:52 +0800 > > patch that handles [...] *unspecified* > > Can ‘unspecified?’ (the procedure) be used? I seem to recall people > wanting to avoid using ‘*unspecified*’ (the unique object) a while back. Could do. Though the existing code uses *unspecified*, and changing would be unrelated to the purpose of this patch. ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2012-12-12 6:03 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <87hao21nte.fsf@gmail.com> 2012-12-04 5:19 ` bug#13077: guile: add repl-option for customized print nalaginrut 2012-12-04 5:34 ` Daniel Hartwig 2012-12-04 6:30 ` nalaginrut 2012-12-04 6:34 ` Daniel Hartwig 2012-12-12 4:03 ` Nala Ginrut 2012-12-12 5:00 ` Daniel Hartwig 2012-12-12 5:49 ` Nala Ginrut [not found] ` <CAN3veRdDA-LwBhu7_Uthfj1h7HGzvFOPLoOtkoyd-MQOA+1Xug@mail.gmail.com> 2012-12-12 6:03 ` Daniel Hartwig [not found] ` <CAN3veReRKhsGip-jev8YyYf_xbTLFFK-bEN=9bR8BddatGWLKg__21131.9749746055$1354599399$gmane$org@mail.gmail.com> 2012-12-04 6:39 ` Thien-Thi Nguyen 2012-12-04 7:36 ` Daniel Hartwig
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).