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,11 +84,15 @@
;; 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
@ -100,10 +104,13 @@
(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-allowing-executable-creation
(cons language languages-allowing-executable-creation)))
(set! languages (set! languages
(if front? (if front?
(cons language languages) (cons language languages)
(append languages (list language)))))) (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,9 +405,20 @@ 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))
(define settings (send definitions-text get-next-settings))
(cond (cond
[(not (drracket:language-configuration:language-allows-executable-creation?
(drracket:language-configuration:language-settings-language settings)))
(message-box (string-constant drscheme)
(string-append
"Executable creation in DrRacket is supported only in the teaching languages and"
" when the #lang line specifies the language (in “The Racket Language”)"
"\n\n"
"Consider using the raco exe command-line tool instead.")
frame
#:dialog-mixin frame:focus-table-mixin)]
[(not program-filename) [(not program-filename)
(message-box (string-constant create-executable-title) (message-box (string-constant create-executable-title)
(string-constant must-save-before-executable) (string-constant must-save-before-executable)
@ -422,12 +433,11 @@ module browser threading seems wrong.
(string-constant drscheme) (string-constant drscheme)
#f #f
frame)) frame))
(let ([settings (send definitions-text get-next-settings)])
(send (drracket:language-configuration:language-settings-language settings) (send (drracket:language-configuration:language-settings-language settings)
create-executable create-executable
(drracket:language-configuration:language-settings-settings settings) (drracket:language-configuration:language-settings-settings settings)
frame frame
program-filename)))]))) 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