diff --git a/pkgs/drracket-pkgs/drracket-plugin-lib/drracket/private/drsig.rkt b/pkgs/drracket-pkgs/drracket-plugin-lib/drracket/private/drsig.rkt index b2657982e2..7b08bdbd2c 100644 --- a/pkgs/drracket-pkgs/drracket-plugin-lib/drracket/private/drsig.rkt +++ b/pkgs/drracket-pkgs/drracket-plugin-lib/drracket/private/drsig.rkt @@ -46,7 +46,11 @@ (define-signature drracket:modes^ extends drracket:modes-cm^ (add-mode get-modes - (struct mode (name surrogate repl-submit matches-language) + (struct mode (name + surrogate + repl-submit + matches-language + intended-to-edit-programs?) #:omit-constructor))) (define-signature drracket:modes/int^ extends drracket:modes^ (add-initial-modes)) diff --git a/pkgs/drracket-pkgs/drracket/drracket/private/local-member-names.rkt b/pkgs/drracket-pkgs/drracket/drracket/private/local-member-names.rkt index edaab96e55..a413a31402 100644 --- a/pkgs/drracket-pkgs/drracket/drracket/private/local-member-names.rkt +++ b/pkgs/drracket-pkgs/drracket/drracket/private/local-member-names.rkt @@ -57,7 +57,8 @@ ;; mode changing definitions text mixin (define-local-member-name maybe-change-language - change-mode-to-match) + change-mode-to-match + get-current-mode) (provide (struct-out drracket:language-configuration:language-settings)) @@ -80,4 +81,4 @@ (provide (struct-out drracket:modes:mode)) -(struct drracket:modes:mode (name surrogate repl-submit matches-language)) +(struct drracket:modes:mode (name surrogate repl-submit matches-language intended-to-edit-programs?)) diff --git a/pkgs/drracket-pkgs/drracket/drracket/private/modes.rkt b/pkgs/drracket-pkgs/drracket/drracket/private/modes.rkt index e469363f61..39a3df96a2 100644 --- a/pkgs/drracket-pkgs/drracket/drracket/private/modes.rkt +++ b/pkgs/drracket-pkgs/drracket/drracket/private/modes.rkt @@ -15,27 +15,30 @@ (define mode-surrogate drracket:modes:mode-surrogate) (define mode-repl-submit drracket:modes:mode-repl-submit) (define mode-matches-language drracket:modes:mode-matches-language) +(define mode-intended-to-edit-programs? drracket:modes:mode-intended-to-edit-programs?) (define struct:mode struct:drracket:modes:mode) - (define modes (list)) (define (get-modes) modes) -(define (add-mode name surrogate repl-submit matches-language) - (let ([new-mode (drracket:modes:mode name - surrogate - repl-submit - matches-language)]) - (for ([old-mode (in-list modes)]) - (when (equal? (mode-name old-mode) name) - (raise-argument-error - 'drracket:modes:add-mode - "name that is not already used by any other mode" - 0 - name surrogate repl-submit matches-language))) - (set! modes (cons new-mode modes)) - new-mode)) +(define (add-mode name surrogate repl-submit matches-language + #:intended-to-edit-programs? [intended-to-edit-programs? #t]) + (define new-mode + (drracket:modes:mode name + surrogate + repl-submit + matches-language + intended-to-edit-programs?)) + (for ([old-mode (in-list modes)]) + (when (equal? (mode-name old-mode) name) + (raise-argument-error + 'drracket:modes:add-mode + "name that is not already used by any other mode" + 0 + name surrogate repl-submit matches-language))) + (set! modes (cons new-mode modes)) + new-mode) (define (not-a-language-language? l) (and (not (null? l)) @@ -66,4 +69,5 @@ (λ (l) (and l (or (not-a-language-language? l) - (ormap (λ (x) (regexp-match #rx"Algol" x)) l)))))) + (ormap (λ (x) (regexp-match #rx"Algol" x)) l)))) + #:intended-to-edit-programs? #f)) diff --git a/pkgs/drracket-pkgs/drracket/drracket/private/module-language.rkt b/pkgs/drracket-pkgs/drracket/drracket/private/module-language.rkt index c8fa6837c2..1d724dbd03 100644 --- a/pkgs/drracket-pkgs/drracket/drracket/private/module-language.rkt +++ b/pkgs/drracket-pkgs/drracket/drracket/private/module-language.rkt @@ -2537,9 +2537,12 @@ ;; in-module-language : tab -> module-language-settings or #f (define (tab-in-module-language tab) - (define settings (send (send tab get-defs) get-next-settings)) + (define defs (send tab get-defs)) + (define settings (send defs get-next-settings)) + (define mode (send defs get-current-mode)) (and (is-a? (drracket:language-configuration:language-settings-language settings) module-language<%>) + (drracket:modes:mode-intended-to-edit-programs? mode) (drracket:language-configuration:language-settings-settings settings))) (define (initialize-prefs-panel) @@ -2635,6 +2638,7 @@ (define current-mode #f) + (define/public (get-current-mode) current-mode) (define/public (set-current-mode mode) (set! current-mode mode) (define surrogate (drracket:modes:mode-surrogate mode)) diff --git a/pkgs/drracket-pkgs/drracket/drracket/tool-lib.rkt b/pkgs/drracket-pkgs/drracket/drracket/tool-lib.rkt index cbe8c68c6f..74f5f39988 100644 --- a/pkgs/drracket-pkgs/drracket/drracket/tool-lib.rkt +++ b/pkgs/drracket-pkgs/drracket/drracket/tool-lib.rkt @@ -105,7 +105,7 @@ all of the names in the tools library, for use defining keybindings (language:simple-settings #t case-sensitive printing-style fraction-style show-sharing insert-newlines annotations) - (modes:mode #t name surrogate repl-submit matches-language)) + (modes:mode #t name surrogate repl-submit matches-language intended-to-edit-programs?)) (provide-signature-elements drracket:tool-cm^) ;; provide all of the classes & interfaces (provide-signature-elements drscheme:tool-cm^) ;; provide the classes & interfaces w/ drscheme: prefix @@ -1066,12 +1066,14 @@ all of the names in the tools library, for use defining keybindings (proc-doc/names drracket:modes:add-mode - (-> string? - (or/c #f (is-a?/c mode:surrogate-text<%>)) - (-> (is-a?/c drracket:rep:text%) number? boolean?) - (-> (or/c #f (listof string?)) boolean?) - drracket:modes:mode?) - (name surrogate repl-submit matches-language) + (->* (string? + (or/c #f (is-a?/c mode:surrogate-text<%>)) + (-> (is-a?/c drracket:rep:text%) number? boolean?) + (-> (or/c #f (listof string?)) boolean?)) + (#:intended-to-edit-programs? boolean?) + drracket:modes:mode?) + ((name surrogate repl-submit matches-language) + ([intended-to-edit-programs? #t])) @{Adds a mode to DrRacket. Returns a mode value that identifies the mode. @@ -1103,22 +1105,35 @@ all of the names in the tools library, for use defining keybindings that correspond to the names of the language in the language dialog. + The @racket[intended-to-edit-programs?] boolean indicates + if this mode is intended to be for editing programs + (as opposed to some other kind of file content). If it is + @racket[#f], online expansion is disabled and DrRacket + won't look for @tt{(module} at the front of the buffer + to try to guess the intended filename. + Modes are tested in the opposite order that they are added. That is, the last mode to be added gets tested first when the filename changes or when the language changes. See also - @racket[drracket:modes:get-modes].}) + @racket[drracket:modes:get-modes]. + + @history[#:changed "1.1" @list{Added the @racket[intended-to-edit-programs?] argument.}] + }) (struct-doc drracket:modes:mode ([name string?] [surrogate (or/c #f (is-a?/c mode:surrogate-text<%>))] [repl-submit (-> (is-a?/c drracket:rep:text%) number? boolean?)] - [matches-language (-> (or/c #f (listof string?)) boolean?)]) + [matches-language (-> (or/c #f (listof string?)) boolean?)] + [intended-to-edit-programs? boolean?]) #:omit-constructor - @{See @racket[drracket:modes:add-mode] for details on modes.}) + @{See @racket[drracket:modes:add-mode] for details on modes. + + @history[#:changed "1.1" @list{Added the @racket[intended-to-edit-programs?] field.}]}) (thing-doc drracket:modes:struct:mode diff --git a/pkgs/drracket-pkgs/drracket/info.rkt b/pkgs/drracket-pkgs/drracket/info.rkt index 662a6c1b60..afe4d82694 100644 --- a/pkgs/drracket-pkgs/drracket/info.rkt +++ b/pkgs/drracket-pkgs/drracket/info.rkt @@ -57,3 +57,5 @@ (define pkg-desc "The DrRacket programming environment") (define pkg-authors '(robby)) + +(define version "1.1")