remove 'create executable' functionality from drracket for all

langauges except The Racket Language and the HtDP and DMdA languages
This commit is contained in:
Robby Findler 2013-01-05 12:17:35 -06:00
parent 89373c7850
commit cce6f28d4d
9 changed files with 86 additions and 76 deletions

View File

@ -1350,7 +1350,9 @@
;; add-deinprogramm-language : (instanceof deinprogramm-language<%>) -> void ;; add-deinprogramm-language : (instanceof deinprogramm-language<%>) -> void
(define (add-deinprogramm-language o) (define (add-deinprogramm-language o)
(drscheme:language-configuration:add-language o)) (drscheme:language-configuration:add-language
o
#:allow-executable-creation? #t))
(define (phase1) (void)) (define (phase1) (void))

View File

@ -147,7 +147,8 @@
make-language-settings make-language-settings
get-settings-preferences-symbol get-settings-preferences-symbol
language-dialog language-dialog
fill-language-dialog)) fill-language-dialog
language-allows-executable-creation?))
(define-signature drracket:language-configuration/internal^ extends drracket:language-configuration^ (define-signature drracket:language-configuration/internal^ extends drracket:language-configuration^
(add-info-specified-languages (add-info-specified-languages

View File

@ -84,26 +84,33 @@
;; all of the languages supported in DrRacket ;; all of the languages supported in DrRacket
(define languages null) (define languages null)
(define languages-allowing-executable-creation '())
(define (language-allows-executable-creation? lang)
(and (memq lang languages-allowing-executable-creation)
#t))
;; add-language : (instanceof language%) -> void ;; add-language : (instanceof language%) -> void
;; only allows addition on phase2 ;; only allows addition on phase2
;; effect: updates `languages' ;; effect: updates `languages'
(define add-language (define (add-language language [front? #f] #:allow-executable-creation? [allow-executable-creation? #f])
(λ (language [front? #f])
(drracket:tools:only-in-phase 'drracket:language:add-language 'phase2)
(drracket:tools:only-in-phase 'drracket:language:add-language 'phase2) (for-each
(for-each (λ (i<%>)
(λ (i<%>) (unless (is-a? language i<%>)
(unless (is-a? language i<%>) (error 'drracket:language:add-language
(error 'drracket:language:add-language "expected language ~e to implement ~e, forgot to use `drracket:language:get-default-mixin'?"
"expected language ~e to implement ~e, forgot to use `drracket:language:get-default-mixin'?" language i<%>)))
language i<%>))) (drracket:language:get-language-extensions))
(drracket:language:get-language-extensions))
(ensure-no-duplicate-numbers language languages)
(ensure-no-duplicate-numbers language languages) (when allow-executable-creation?
(set! languages (set! languages-allowing-executable-creation
(if front? (cons language languages-allowing-executable-creation)))
(cons language languages) (set! languages
(append languages (list language)))))) (if front?
(cons language languages)
(append languages (list language)))))
(define (ensure-no-duplicate-numbers l1 languages) (define (ensure-no-duplicate-numbers l1 languages)
(for-each (for-each
@ -1956,25 +1963,6 @@
[else (inner [else (inner
(drracket:language:get-capability-default key) (drracket:language:get-capability-default key)
capability-value key)])) capability-value key)]))
(define/override (create-executable setting parent program-filename)
(let ([executable-fn
(drracket:language:put-executable
parent
program-filename
#t
mred-launcher?
(if mred-launcher?
(string-constant save-a-mred-launcher)
(string-constant save-a-mzscheme-launcher)))])
(when executable-fn
(drracket:language:create-module-based-launcher
program-filename
executable-fn
(get-module)
(get-transformer-module)
(get-init-code setting)
mred-launcher?
(use-namespace-require/copy-from-setting? setting)))))
(super-new))))] (super-new))))]
[make-simple [make-simple
(λ (module id position numbers mred-launcher? one-line-summary extra-mixin) (λ (module id position numbers mred-launcher? one-line-summary extra-mixin)

View File

@ -647,14 +647,7 @@
(module-based-language-front-end port (get-reader))) (module-based-language-front-end port (get-reader)))
(define/public (front-end/interaction port settings) (define/public (front-end/interaction port settings)
(module-based-language-front-end port (get-reader))) (module-based-language-front-end port (get-reader)))
(define/public (create-executable setting parent program-filename) (define/public (create-executable setting parent program-filename) (void))
(create-module-based-language-executable parent
program-filename
(get-module)
(get-transformer-module)
(get-init-code setting)
(use-mred-launcher)
(use-namespace-require/copy-from-setting? setting)))
(define/public (extra-repl-information _1 _2) (void)) (define/public (extra-repl-information _1 _2) (void))
(define/public (get-reader-module) #f) (define/public (get-reader-module) #f)
(define/public (get-metadata a b) #f) (define/public (get-metadata a b) #f)

View File

@ -80,7 +80,8 @@
(drracket:language:simple-module-based-language->module-based-language-mixin (drracket:language:simple-module-based-language->module-based-language-mixin
drracket:language:simple-module-based-language%))))) drracket:language:simple-module-based-language%)))))
(drracket:language-configuration:add-language (drracket:language-configuration:add-language
(new module-language%))) (new module-language%)
#:allow-executable-creation? #t))
;; collection-paths : (listof (union 'default string)) ;; collection-paths : (listof (union 'default string))
;; command-line-args : (vectorof string) ;; command-line-args : (vectorof string)

View File

@ -405,29 +405,39 @@ module browser threading seems wrong.
;; create-executable : (instanceof drracket:unit:frame<%>) -> void ;; create-executable : (instanceof drracket:unit:frame<%>) -> void
(define (create-executable frame) (define (create-executable frame)
(let* ([definitions-text (send frame get-definitions-text)] (define definitions-text (send frame get-definitions-text))
[program-filename (send definitions-text get-filename)]) (define program-filename (send definitions-text get-filename))
(cond (define settings (send definitions-text get-next-settings))
[(not program-filename) (cond
(message-box (string-constant create-executable-title) [(not (drracket:language-configuration:language-allows-executable-creation?
(string-constant must-save-before-executable) (drracket:language-configuration:language-settings-language settings)))
frame (message-box (string-constant drscheme)
#:dialog-mixin frame:focus-table-mixin)] (string-append
[else "Executable creation in DrRacket is supported only in the teaching languages and"
(when (or (not (send definitions-text is-modified?)) " when the #lang line specifies the language (in “The Racket Language”)"
(gui-utils:get-choice "\n\n"
(string-constant definitions-not-saved) "Consider using the raco exe command-line tool instead.")
(string-constant yes) frame
(string-constant no) #:dialog-mixin frame:focus-table-mixin)]
(string-constant drscheme) [(not program-filename)
#f (message-box (string-constant create-executable-title)
frame)) (string-constant must-save-before-executable)
(let ([settings (send definitions-text get-next-settings)]) frame
(send (drracket:language-configuration:language-settings-language settings) #:dialog-mixin frame:focus-table-mixin)]
create-executable [else
(drracket:language-configuration:language-settings-settings settings) (when (or (not (send definitions-text is-modified?))
frame (gui-utils:get-choice
program-filename)))]))) (string-constant definitions-not-saved)
(string-constant yes)
(string-constant no)
(string-constant drscheme)
#f
frame))
(send (drracket:language-configuration:language-settings-language settings)
create-executable
(drracket:language-configuration:language-settings-settings settings)
frame
program-filename))]))
(define-values (get-program-editor-mixin add-to-program-editor-mixin) (define-values (get-program-editor-mixin add-to-program-editor-mixin)
(let* ([program-editor-mixin (let* ([program-editor-mixin

View File

@ -1156,14 +1156,23 @@ all of the names in the tools library, for use defining keybindings
(proc-doc/names (proc-doc/names
drracket:language-configuration:add-language drracket:language-configuration:add-language
((and/c (is-a?/c drracket:language:language<%>) (->* ((and/c (is-a?/c drracket:language:language<%>)
drracket:language:object/c) drracket:language:object/c))
. -> . void?) (#:allow-executable-creation? boolean?)
(language) void?)
((language) ((allow-executable-creation? #f)))
@{@phase[2] @{@phase[2]
Adds @racket[language] to the languages offerend by DrRacket.}) Adds @racket[language] to the languages offered by DrRacket.
If @racket[allow-executable-creation?] is @racket[#f], then
choosing the @onscreen{Create Executable...} menu item results
in a dialog box saying that executable creation is disabled.
If it is @racket[#t], then the
@method[drracket:language:language<%> create-executable]
is called when that menu item is selected (after checking
to make sure the file is saved).})
(proc-doc/names (proc-doc/names
drracket:language-configuration:get-settings-preferences-symbol drracket:language-configuration:get-settings-preferences-symbol

View File

@ -1153,7 +1153,9 @@
;; add-htdp-language : (instanceof htdp-language<%>) -> void ;; add-htdp-language : (instanceof htdp-language<%>) -> void
(define (add-htdp-language o) (define (add-htdp-language o)
(drscheme:language-configuration:add-language o)) (drscheme:language-configuration:add-language
o
#:allow-executable-creation? #t))
(define (phase1) (void)) (define (phase1) (void))

View File

@ -2,6 +2,10 @@
Version 5.3.2 Version 5.3.2
------------------------------ ------------------------------
. Removed 'Create Executable...' functionality from DrRacket,
except in the "The Racket Language" (#lang-based) language
and the teaching languages (HtDP and DMdA).
. DrRacket is more responsive when editing . DrRacket is more responsive when editing
. The language dialog has been revamped to encourage people even . The language dialog has been revamped to encourage people even