diff --git a/collects/drracket/private/main.rkt b/collects/drracket/private/main.rkt index 436474d1b6..a0d4262663 100644 --- a/collects/drracket/private/main.rkt +++ b/collects/drracket/private/main.rkt @@ -64,6 +64,8 @@ (application:current-app-name (string-constant drscheme)) +(preferences:set-default 'drracket:logger-scroll-to-bottom? #t boolean?) + (preferences:set-default 'drracket:submodules-to-choose-from '((main) (test)) (cons/c (list/c 'main) diff --git a/collects/drracket/private/rep.rkt b/collects/drracket/private/rep.rkt index c15af7a6db..e3aeff8172 100644 --- a/collects/drracket/private/rep.rkt +++ b/collects/drracket/private/rep.rkt @@ -1264,7 +1264,7 @@ TODO (thread (λ () - (struct gui-event (start? msec name) #:prefab) + (struct gui-event (start end name) #:prefab) ;; forward system events the user's logger, and record any ;; events that happen on the user's logger to show in the GUI (let ([sys-evt (make-log-receiver drracket:init:system-logger 'debug)] diff --git a/collects/drracket/private/unit.rkt b/collects/drracket/private/unit.rkt index 5a44f9e0cc..22f237ad49 100644 --- a/collects/drracket/private/unit.rkt +++ b/collects/drracket/private/unit.rkt @@ -1465,8 +1465,9 @@ module browser threading seems wrong. ;; it becomes a tab-panel, it is always a tab-panel (altho the tab panel might not always be shown) (define logger-gui-tab-panel #f) (define logger-gui-canvas #f) + (define logger-checkbox #f) - ;; logger-gui-text: (or/c #f (is-a?/c tab-panel%)) + ;; logger-gui-text: (or/c #f (is-a?/c text%)) ;; this is #f when the GUI has not been built or when the logging panel is hidden ;; in that case, the logging messages aren't begin saved in an editor anywhere (define logger-gui-text #f) @@ -1523,6 +1524,12 @@ module browser threading seems wrong. (new-logger-text) (set! logger-gui-canvas (new editor-canvas% [parent logger-panel] [editor logger-gui-text])) + (set! logger-checkbox + (new check-box% + [label (string-constant logger-scroll-on-output)] + [callback (λ (a b) (preferences:set 'drracket:logger-scroll-to-bottom? (send logger-checkbox get-value)))] + [parent logger-panel] + [value (preferences:get 'drracket:logger-scroll-to-bottom?)])) (send logger-menu-item set-label (string-constant hide-log)) (update-logger-window #f) (send logger-parent-panel change-children (lambda (l) (append l (list logger-panel)))))]) @@ -1536,7 +1543,9 @@ module browser threading seems wrong. (member logger-panel (send logger-parent-panel get-children)))) (define/private (new-logger-text) - (set! logger-gui-text (new (text:hide-caret/selection-mixin text:line-spacing%))) + (set! logger-gui-text (new (text:hide-caret/selection-mixin + (editor:standard-style-list-mixin + text:line-spacing%)))) (send logger-gui-text lock #t)) (define/public (update-logger-window command) @@ -1560,6 +1569,9 @@ module browser threading seems wrong. (let ([msg (cdr command)]) (when (or (not level) (eq? (vector-ref msg 0) level)) + (define scroll? (if (object? logger-checkbox) + (send logger-checkbox get-value) + #t)) (send logger-gui-text begin-edit-sequence) (send logger-gui-text lock #f) (case (car command) @@ -1567,15 +1579,23 @@ module browser threading seems wrong. [(clear-last-and-add-line) (send logger-gui-text delete 0 - (send logger-gui-text paragraph-start-position 1))]) + (send logger-gui-text paragraph-start-position 1) + #f)]) (send logger-gui-text insert "\n" (send logger-gui-text last-position) - (send logger-gui-text last-position)) + (send logger-gui-text last-position) + #f) (send logger-gui-text insert (vector-ref msg 1) (send logger-gui-text last-position) - (send logger-gui-text last-position)) + (send logger-gui-text last-position) + #f) + (when scroll? + (send logger-gui-text scroll-to-position + (send logger-gui-text + paragraph-start-position + (send logger-gui-text last-paragraph)))) (send logger-gui-text end-edit-sequence) (send logger-gui-text lock #t)))] [else diff --git a/collects/string-constants/private/english-string-constants.rkt b/collects/string-constants/private/english-string-constants.rkt index 6ff3feba9d..7994a07856 100644 --- a/collects/string-constants/private/english-string-constants.rkt +++ b/collects/string-constants/private/english-string-constants.rkt @@ -312,6 +312,7 @@ please adhere to these guidelines: (show-log "Show &Log") (hide-log "Hide &Log") (logging-all "All") ;; in the logging window in drscheme, shows all logs simultaneously + (logger-scroll-on-output "Scroll to show new output") ; a checkbox in the logger pane ;; modes (mode-submenu-label "Modes")