improved not-a-language language
svn: r1241
This commit is contained in:
parent
2fe1e5fc49
commit
40517379bd
|
@ -47,6 +47,7 @@
|
|||
|
||||
(define lang%
|
||||
(class* object% (drscheme:language:language<%>)
|
||||
(define/public (first-opened) (void))
|
||||
(define/public (config-panel parent)
|
||||
(case-lambda
|
||||
[() null]
|
||||
|
|
|
@ -1380,16 +1380,24 @@
|
|||
not-a-language-extra-mixin))))
|
||||
|
||||
(define (not-a-language-extra-mixin %)
|
||||
(class %
|
||||
(class* % (not-a-language-language<%>)
|
||||
(define/override (get-style-delta) drscheme:rep:error-delta)
|
||||
|
||||
(define/override (first-opened)
|
||||
(not-a-language-message)
|
||||
(fprintf (current-error-port) "\n"))
|
||||
|
||||
(define/override (front-end/interaction input settings teachpack-cache)
|
||||
(not-a-language-message)
|
||||
(λ () eof))
|
||||
(define/override (front-end/complete-program input settings teachpack-cache)
|
||||
(not-a-language-message)
|
||||
(λ () eof))
|
||||
(super-new)))
|
||||
(super-new)))
|
||||
|
||||
;; used for identification only
|
||||
(define not-a-language-language<%>
|
||||
(interface ()))
|
||||
|
||||
|
||||
;
|
||||
|
@ -1410,14 +1418,28 @@
|
|||
|
||||
(define (not-a-language-message)
|
||||
(define (main)
|
||||
(o (string-constant must-choose-language))
|
||||
(o "\n")
|
||||
(o "Either select the \"Choose Language...\" item in the \"Language\" menu, or ")
|
||||
(o (new link-snip%
|
||||
[words "get guidance"]
|
||||
[callback (lambda (snip)
|
||||
(not-a-language-dialog (find-parent-from-snip snip)))]))
|
||||
(o "."))
|
||||
(when (language-still-unchanged?)
|
||||
(o (string-constant must-choose-language))
|
||||
(o "\n")
|
||||
(o (string-constant get-guidance-before))
|
||||
(o (new link-snip%
|
||||
[words (string-constant get-guidance-during)]
|
||||
[callback (lambda (snip)
|
||||
(not-a-language-dialog (find-parent-from-snip snip)))]))
|
||||
(o (string-constant get-guidance-after))))
|
||||
|
||||
(define (language-still-unchanged?)
|
||||
(let ([rep (drscheme:rep:current-rep)])
|
||||
(cond
|
||||
[rep
|
||||
(let* ([next-settings (send (send rep get-definitions-text) get-next-settings)]
|
||||
[next-lang (language-settings-language next-settings)])
|
||||
(is-a? next-lang not-a-language-language<%>))]
|
||||
|
||||
;; if we cannot get the REP
|
||||
;; (because a tool is processing the progrm like check syntax)
|
||||
;; then just assume it has not changed.
|
||||
[else #t])))
|
||||
|
||||
(define o
|
||||
(case-lambda
|
||||
|
|
|
@ -49,6 +49,7 @@
|
|||
front-end/interaction
|
||||
config-panel
|
||||
on-execute
|
||||
first-opened
|
||||
render-value/format
|
||||
render-value
|
||||
|
||||
|
@ -502,6 +503,7 @@
|
|||
(inherit get-module get-transformer-module use-namespace-require/copy?
|
||||
get-init-code use-mred-launcher get-reader)
|
||||
|
||||
(define/public (first-opened) (void))
|
||||
(define/public (get-comment-character) (values "; " #\;))
|
||||
(define/public (order-manuals x) (values x #t))
|
||||
|
||||
|
|
|
@ -1073,103 +1073,103 @@ TODO
|
|||
(semaphore-post eval-thread-state-sema)
|
||||
(semaphore-post eval-thread-queue-sema))
|
||||
|
||||
(define/private init-evaluation-thread ; =Kernel=
|
||||
(λ ()
|
||||
(set! user-language-settings (send definitions-text get-next-settings))
|
||||
(define/private (init-evaluation-thread) ; =Kernel=
|
||||
(set! user-language-settings (send definitions-text get-next-settings))
|
||||
|
||||
(set! user-custodian (make-custodian))
|
||||
; (custodian-limit-memory user-custodian 10000000 user-custodian)
|
||||
(set! user-eventspace-box (make-weak-box
|
||||
(parameterize ([current-custodian user-custodian])
|
||||
(make-eventspace))))
|
||||
(set! user-break-parameterization (parameterize-break
|
||||
#t
|
||||
(current-break-parameterization)))
|
||||
(set! user-break-enabled #t)
|
||||
(set! eval-thread-thunks null)
|
||||
(set! eval-thread-state-sema (make-semaphore 1))
|
||||
(set! eval-thread-queue-sema (make-semaphore 0))
|
||||
|
||||
(let* ([init-thread-complete (make-semaphore 0)]
|
||||
[goahead (make-semaphore)])
|
||||
|
||||
(set! user-custodian (make-custodian))
|
||||
; (custodian-limit-memory user-custodian 10000000 user-custodian)
|
||||
(set! user-eventspace-box (make-weak-box
|
||||
(parameterize ([current-custodian user-custodian])
|
||||
(make-eventspace))))
|
||||
(set! user-break-parameterization (parameterize-break
|
||||
#t
|
||||
(current-break-parameterization)))
|
||||
(set! user-break-enabled #t)
|
||||
(set! eval-thread-thunks null)
|
||||
(set! eval-thread-state-sema (make-semaphore 1))
|
||||
(set! eval-thread-queue-sema (make-semaphore 0))
|
||||
|
||||
(let* ([init-thread-complete (make-semaphore 0)]
|
||||
[goahead (make-semaphore)]
|
||||
[queue-user/wait
|
||||
(λ (thnk)
|
||||
(let ([wait (make-semaphore 0)])
|
||||
(parameterize ([current-eventspace (get-user-eventspace)])
|
||||
(queue-callback
|
||||
(λ ()
|
||||
(thnk)
|
||||
(semaphore-post wait))))
|
||||
(semaphore-wait wait)))])
|
||||
|
||||
; setup standard parameters
|
||||
(let ([snip-classes
|
||||
; the snip-classes in the DrScheme eventspace's snip-class-list
|
||||
(drscheme:eval:get-snip-classes)])
|
||||
(queue-user/wait
|
||||
(λ () ; =User=, =No-Breaks=
|
||||
; No user code has been evaluated yet, so we're in the clear...
|
||||
(break-enabled #f)
|
||||
(set! user-thread-box (make-weak-box (current-thread)))
|
||||
(initialize-parameters snip-classes))))
|
||||
|
||||
;; disable breaks until an evaluation actually occurs
|
||||
(send context set-breakables #f #f)
|
||||
|
||||
;; initialize the language
|
||||
(send (drscheme:language-configuration:language-settings-language user-language-settings)
|
||||
on-execute
|
||||
(drscheme:language-configuration:language-settings-settings user-language-settings)
|
||||
queue-user/wait)
|
||||
|
||||
;; installs the teachpacks
|
||||
;; must happen after language is initialized.
|
||||
; setup standard parameters
|
||||
(let ([snip-classes
|
||||
; the snip-classes in the DrScheme eventspace's snip-class-list
|
||||
(drscheme:eval:get-snip-classes)])
|
||||
(queue-user/wait
|
||||
(λ () ; =User=, =No-Breaks=
|
||||
(drscheme:teachpack:install-teachpacks
|
||||
user-teachpack-cache)))
|
||||
|
||||
(parameterize ([current-eventspace (get-user-eventspace)])
|
||||
(queue-callback
|
||||
(λ ()
|
||||
(let ([drscheme-error-escape-handler
|
||||
(λ ()
|
||||
((current-error-escape-k)))])
|
||||
(error-escape-handler drscheme-error-escape-handler))
|
||||
|
||||
(set! in-evaluation? #f)
|
||||
(update-running #f)
|
||||
(send context set-breakables #f #f)
|
||||
|
||||
;; let init-thread procedure return,
|
||||
;; now that parameters are set
|
||||
(semaphore-post init-thread-complete)
|
||||
|
||||
; We're about to start running user code.
|
||||
|
||||
; Pause to let killed-thread get initialized
|
||||
(semaphore-wait goahead)
|
||||
|
||||
(let loop () ; =User=, =Handler=, =No-Breaks=
|
||||
; Wait for something to do
|
||||
(unless (semaphore-try-wait? eval-thread-queue-sema)
|
||||
; User event callbacks run here; we turn on
|
||||
; breaks in the dispatch handler.
|
||||
(yield eval-thread-queue-sema))
|
||||
; About to eval something
|
||||
(semaphore-wait eval-thread-state-sema)
|
||||
(let ([thunk (car eval-thread-thunks)])
|
||||
(set! eval-thread-thunks (cdr eval-thread-thunks))
|
||||
(semaphore-post eval-thread-state-sema)
|
||||
; This thunk evals the user's expressions with appropriate
|
||||
; protections.
|
||||
(thunk))
|
||||
(loop)))))
|
||||
(semaphore-wait init-thread-complete)
|
||||
; Start killed-thread
|
||||
(initialize-killed-thread)
|
||||
; Let user expressions go...
|
||||
(semaphore-post goahead))))
|
||||
; No user code has been evaluated yet, so we're in the clear...
|
||||
(break-enabled #f)
|
||||
(set! user-thread-box (make-weak-box (current-thread)))
|
||||
(initialize-parameters snip-classes))))
|
||||
|
||||
;; disable breaks until an evaluation actually occurs
|
||||
(send context set-breakables #f #f)
|
||||
|
||||
;; initialize the language
|
||||
(send (drscheme:language-configuration:language-settings-language user-language-settings)
|
||||
on-execute
|
||||
(drscheme:language-configuration:language-settings-settings user-language-settings)
|
||||
(let ([run-on-user-thread (lambda (t) (queue-user/wait t))])
|
||||
run-on-user-thread))
|
||||
|
||||
;; installs the teachpacks
|
||||
;; must happen after language is initialized.
|
||||
(queue-user/wait
|
||||
(λ () ; =User=, =No-Breaks=
|
||||
(drscheme:teachpack:install-teachpacks
|
||||
user-teachpack-cache)))
|
||||
|
||||
(parameterize ([current-eventspace (get-user-eventspace)])
|
||||
(queue-callback
|
||||
(λ ()
|
||||
(let ([drscheme-error-escape-handler
|
||||
(λ ()
|
||||
((current-error-escape-k)))])
|
||||
(error-escape-handler drscheme-error-escape-handler))
|
||||
|
||||
(set! in-evaluation? #f)
|
||||
(update-running #f)
|
||||
(send context set-breakables #f #f)
|
||||
|
||||
;; let init-thread procedure return,
|
||||
;; now that parameters are set
|
||||
(semaphore-post init-thread-complete)
|
||||
|
||||
; We're about to start running user code.
|
||||
|
||||
; Pause to let killed-thread get initialized
|
||||
(semaphore-wait goahead)
|
||||
|
||||
(let loop () ; =User=, =Handler=, =No-Breaks=
|
||||
; Wait for something to do
|
||||
(unless (semaphore-try-wait? eval-thread-queue-sema)
|
||||
; User event callbacks run here; we turn on
|
||||
; breaks in the dispatch handler.
|
||||
(yield eval-thread-queue-sema))
|
||||
; About to eval something
|
||||
(semaphore-wait eval-thread-state-sema)
|
||||
(let ([thunk (car eval-thread-thunks)])
|
||||
(set! eval-thread-thunks (cdr eval-thread-thunks))
|
||||
(semaphore-post eval-thread-state-sema)
|
||||
; This thunk evals the user's expressions with appropriate
|
||||
; protections.
|
||||
(thunk))
|
||||
(loop)))))
|
||||
(semaphore-wait init-thread-complete)
|
||||
; Start killed-thread
|
||||
(initialize-killed-thread)
|
||||
; Let user expressions go...
|
||||
(semaphore-post goahead)))
|
||||
|
||||
(define/private (queue-user/wait thnk)
|
||||
(let ([wait (make-semaphore 0)])
|
||||
(parameterize ([current-eventspace (get-user-eventspace)])
|
||||
(queue-callback
|
||||
(λ ()
|
||||
(thnk)
|
||||
(semaphore-post wait))))
|
||||
(semaphore-wait wait)))
|
||||
|
||||
(field (shutting-down? #f))
|
||||
|
||||
|
@ -1319,6 +1319,12 @@ TODO
|
|||
; =User=, =Non-Handler=, =No-Breaks=
|
||||
(primitive-dispatch-handler eventspace)])))))))
|
||||
|
||||
(define/public (new-empty-console)
|
||||
(queue-user/wait
|
||||
(λ () ; =User=, =No-Breaks=
|
||||
(send (drscheme:language-configuration:language-settings-language user-language-settings)
|
||||
first-opened))))
|
||||
|
||||
(define/public (reset-console)
|
||||
(when (thread? thread-killed)
|
||||
(kill-thread thread-killed))
|
||||
|
@ -1402,6 +1408,12 @@ TODO
|
|||
(thaw-colorer)
|
||||
(send context disable-evaluation)
|
||||
(reset-console)
|
||||
|
||||
(queue-user/wait
|
||||
(λ () ; =User=, =No-Breaks=
|
||||
(send (drscheme:language-configuration:language-settings-language user-language-settings)
|
||||
first-opened)))
|
||||
|
||||
(insert-prompt)
|
||||
(send context enable-evaluation)
|
||||
(end-edit-sequence)
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
|
||||
(define (honu-lang-mixin level)
|
||||
(class* object% (drscheme:language:language<%>)
|
||||
(define/public (first-opened) (void))
|
||||
(define/public (get-comment-character) (values "//" #\*))
|
||||
|
||||
(define/public (default-settings)
|
||||
|
|
|
@ -132,6 +132,7 @@
|
|||
(define (java-lang-mixin level name number one-line dyn?)
|
||||
(when dyn? (dynamic? #t))
|
||||
(class* object% (drscheme:language:language<%>)
|
||||
(define/public (first-opened) (void))
|
||||
|
||||
(define/public (order-manuals x)
|
||||
(let* ((beg-list '(#"profj-beginner" #"tour" #"drscheme" #"help"))
|
||||
|
|
|
@ -1006,13 +1006,13 @@ please adhere to these guidelines:
|
|||
|
||||
(seasoned-plt-schemer? "Seasoned PLT Schemer?")
|
||||
(looking-for-standard-scheme? "Looking for standard Scheme?")
|
||||
|
||||
; some of these belong ...
|
||||
;(otherwise-use-before "Otherwise, use ")
|
||||
;(otherwise-use-between ",\nor choose for yourself from the ")
|
||||
;(otherwise-use-language-dialog "language dialog") ; this one will become clickable and will open the language dialog
|
||||
;(otherwise-use-after ".")
|
||||
|
||||
|
||||
; the three string constants are concatenated together and the middle
|
||||
; one is hyperlinked to the dialog that suggests various languages
|
||||
(get-guidance-before "Either select the “Choose Language...” item in the “Language” menu, or ")
|
||||
(get-guidance-during "get guidance")
|
||||
(get-guidance-after ".")
|
||||
|
||||
;;; debug language
|
||||
(unknown-debug-frame "[unknown]")
|
||||
(backtrace-window-title "Backtrace - DrScheme")
|
||||
|
|
Loading…
Reference in New Issue
Block a user