add drracket:default-filters and drracket:default-extension support

This commit is contained in:
Robby Findler 2014-05-26 19:37:03 -05:00
parent 70a70166d1
commit e8bfd42d36
2 changed files with 60 additions and 1 deletions

View File

@ -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))

View File

@ -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