diff --git a/pkgs/drracket-pkgs/drracket/drracket/private/module-language-tools.rkt b/pkgs/drracket-pkgs/drracket/drracket/private/module-language-tools.rkt index 433e7e72dc..fe9bd498e5 100644 --- a/pkgs/drracket-pkgs/drracket/drracket/private/module-language-tools.rkt +++ b/pkgs/drracket-pkgs/drracket/drracket/private/module-language-tools.rkt @@ -34,7 +34,8 @@ (define-local-member-name set-lang-toolbar-buttons get-lang-toolbar-buttons - get-online-expansion-monitor-pcs) + get-online-expansion-monitor-pcs + with-language-specific-default-extensions-and-filters) (define tab-mixin (mixin (drracket:unit:tab<%>) (drracket:module-language-tools:tab<%>) @@ -83,6 +84,12 @@ (send toolbar-button-panel change-children (λ (l) (send new-tab get-lang-toolbar-buttons))) (sort-toolbar-buttons-panel))) + + (define/override (file-menu:open-callback menu evt) + (send (get-definitions-text) with-language-specific-default-extensions-and-filters + (λ () + (super file-menu:open-callback menu evt)))) + (super-new) (inherit get-button-panel) (set! toolbar-button-panel (new panel:horizontal-discrete-sizes% @@ -217,6 +224,22 @@ (send (send (get-tab) get-ints) set-lang-wants-big-defs/ints-labels? lang-wants-big-defs/ints-labels?) + (set! extra-default-filters + (if info-result + (or (ctc-on-info-proc-result + (or/c #f (listof (list/c string? string?))) + (info-proc 'drracket:default-filters #f)) + '()) + '())) + + (set! default-extension + (if info-result + (or (ctc-on-info-proc-result + (or/c #f (and/c string? (not/c #rx"[.]"))) + (info-proc 'drracket:default-extension #f)) + "") + "")) + (when info-result (register-new-buttons (ctc-on-info-proc-result @@ -324,6 +347,25 @@ (is-a? (drracket:language-configuration:language-settings-language settings) drracket:module-language:module-language<%>)) (inner (void) after-set-next-settings settings)) + + (define/override (put-file dir default-name) + (with-language-specific-default-extensions-and-filters + (λ () + (super put-file dir default-name)))) + (define/override (get-file dir) + (with-language-specific-default-extensions-and-filters + (λ () + (super get-file dir)))) + + (define extra-default-filters '()) + (define default-extension "") + (define/public (with-language-specific-default-extensions-and-filters t) + (parameterize ([finder:default-extension default-extension] + [finder:default-filters + (append extra-default-filters (finder:default-filters))]) + (t))) + + (super-new) (set! in-module-language? (is-a? (drracket:language-configuration:language-settings-language (get-next-settings)) diff --git a/pkgs/drracket-pkgs/drracket/scribblings/tools/tools.scrbl b/pkgs/drracket-pkgs/drracket/scribblings/tools/tools.scrbl index e397310e92..e4f47e95ab 100644 --- a/pkgs/drracket-pkgs/drracket/scribblings/tools/tools.scrbl +++ b/pkgs/drracket-pkgs/drracket/scribblings/tools/tools.scrbl @@ -239,6 +239,8 @@ as the @racket[_key] argument to the @racket[_get-info] function to do so: @itemize[@item{@language-info-ref[drracket:toolbar-buttons]} @item{@language-info-ref[drracket:opt-out-toolbar-buttons]} @item{@language-info-ref[definitions-text-surrogate]} + @item{@language-info-ref[drracket:default-filters]} + @item{@language-info-ref[drracket:default-extension]} @item{@language-info-ref[color-lexer]}] If the call to @racket[read-language] raises an error, DrRacket logs the @@ -262,6 +264,21 @@ The recognized token styles (specified implicitly via @method[color:text<%> star @item{@indexed-racket['other]}] These precise colors for these identifiers are controlled by the preferences dialog in DrRacket. +@language-info-def[drracket:default-filters]{ + When a language's @racket[_get-info] procedure responds to + @racket['drracket:default-filters], it is expected to return + @racket[(listof (list/c string? string?))].} +These results are added as a prefix to @racket[finder:default-filters], +extending the default that DrRacket normally uses, namely: +@racketblock[`(["Racket Sources" "*.rkt;*.scrbl;*.rktl;*.rktd;*.ss;*.scm"] + ["Any" "*.*"])] + +@language-info-def[drracket:default-extension]{ + When a language's @racket[_get-info] procedure responds to @racket['drracket:default-extension], + it is expected to return @racket[(and/c string? (not/c #rx"[.]"))]; the result is used + as the default extension when saving files by setting @racket[finder:default-extension]. +} + @subsection{Adding Module-based Languages to DrRacket} For backwards compatibility, DrRacket also supports