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
(define (add-deinprogramm-language o)
(drscheme:language-configuration:add-language o))
(drscheme:language-configuration:add-language
o
#:allow-executable-creation? #t))
(define (phase1) (void))

View File

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

View File

@ -84,26 +84,33 @@
;; all of the languages supported in DrRacket
(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
;; only allows addition on phase2
;; effect: updates `languages'
(define add-language
(λ (language [front? #f])
(drracket:tools:only-in-phase 'drracket:language:add-language 'phase2)
(for-each
(λ (i<%>)
(unless (is-a? language i<%>)
(error 'drracket:language:add-language
"expected language ~e to implement ~e, forgot to use `drracket:language:get-default-mixin'?"
language i<%>)))
(drracket:language:get-language-extensions))
(ensure-no-duplicate-numbers language languages)
(set! languages
(if front?
(cons language languages)
(append languages (list language))))))
(define (add-language language [front? #f] #:allow-executable-creation? [allow-executable-creation? #f])
(drracket:tools:only-in-phase 'drracket:language:add-language 'phase2)
(for-each
(λ (i<%>)
(unless (is-a? language i<%>)
(error 'drracket:language:add-language
"expected language ~e to implement ~e, forgot to use `drracket:language:get-default-mixin'?"
language i<%>)))
(drracket:language:get-language-extensions))
(ensure-no-duplicate-numbers language languages)
(when allow-executable-creation?
(set! languages-allowing-executable-creation
(cons language languages-allowing-executable-creation)))
(set! languages
(if front?
(cons language languages)
(append languages (list language)))))
(define (ensure-no-duplicate-numbers l1 languages)
(for-each
@ -1956,25 +1963,6 @@
[else (inner
(drracket:language:get-capability-default 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))))]
[make-simple
(λ (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)))
(define/public (front-end/interaction port settings)
(module-based-language-front-end port (get-reader)))
(define/public (create-executable setting parent program-filename)
(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 (create-executable setting parent program-filename) (void))
(define/public (extra-repl-information _1 _2) (void))
(define/public (get-reader-module) #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%)))))
(drracket:language-configuration:add-language
(new module-language%)))
(new module-language%)
#:allow-executable-creation? #t))
;; collection-paths : (listof (union 'default string))
;; command-line-args : (vectorof string)

View File

@ -405,29 +405,39 @@ module browser threading seems wrong.
;; create-executable : (instanceof drracket:unit:frame<%>) -> void
(define (create-executable frame)
(let* ([definitions-text (send frame get-definitions-text)]
[program-filename (send definitions-text get-filename)])
(cond
[(not program-filename)
(message-box (string-constant create-executable-title)
(string-constant must-save-before-executable)
frame
#:dialog-mixin frame:focus-table-mixin)]
[else
(when (or (not (send definitions-text is-modified?))
(gui-utils:get-choice
(string-constant definitions-not-saved)
(string-constant yes)
(string-constant no)
(string-constant drscheme)
#f
frame))
(let ([settings (send definitions-text get-next-settings)])
(send (drracket:language-configuration:language-settings-language settings)
create-executable
(drracket:language-configuration:language-settings-settings settings)
frame
program-filename)))])))
(define definitions-text (send frame get-definitions-text))
(define program-filename (send definitions-text get-filename))
(define settings (send definitions-text get-next-settings))
(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)
(message-box (string-constant create-executable-title)
(string-constant must-save-before-executable)
frame
#:dialog-mixin frame:focus-table-mixin)]
[else
(when (or (not (send definitions-text is-modified?))
(gui-utils:get-choice
(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)
(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
drracket:language-configuration:add-language
((and/c (is-a?/c drracket:language:language<%>)
drracket:language:object/c)
. -> . void?)
(language)
(->* ((and/c (is-a?/c drracket:language:language<%>)
drracket:language:object/c))
(#:allow-executable-creation? boolean?)
void?)
((language) ((allow-executable-creation? #f)))
@{@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
drracket:language-configuration:get-settings-preferences-symbol

View File

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

View File

@ -2,6 +2,10 @@
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
. The language dialog has been revamped to encourage people even