From bf7341c5e91e004fce60efcdd6587ab4ceddff78 Mon Sep 17 00:00:00 2001 From: "Paolo G. Giarrusso" Date: Sun, 4 Oct 2015 20:42:58 +0200 Subject: [PATCH 1/4] Refactor new code --- handin-client/client-gui.rkt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/handin-client/client-gui.rkt b/handin-client/client-gui.rkt index c056053..4dcc59c 100644 --- a/handin-client/client-gui.rkt +++ b/handin-client/client-gui.rkt @@ -730,9 +730,9 @@ void)) (define (get-lang-prefix modname) - (let* ([pref (preferences:get (drracket:language-configuration:get-settings-preferences-symbol))] - [lang (drracket:language-configuration:language-settings-language pref)] - [settings (drracket:language-configuration:language-settings-settings pref)]) + (let* ([lang-settings (preferences:get (drracket:language-configuration:get-settings-preferences-symbol))] + [lang (drracket:language-configuration:language-settings-language lang-settings)] + [settings (drracket:language-configuration:language-settings-settings lang-settings)]) (send lang get-metadata modname settings))) (define (with-fake-header editor) From 1348760243d9b989acb8a71d8a6f7a8f82652960 Mon Sep 17 00:00:00 2001 From: "Paolo G. Giarrusso" Date: Sun, 4 Oct 2015 20:44:15 +0200 Subject: [PATCH 2/4] Get language header correctly --- handin-client/client-gui.rkt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/handin-client/client-gui.rkt b/handin-client/client-gui.rkt index 4dcc59c..9d2c614 100644 --- a/handin-client/client-gui.rkt +++ b/handin-client/client-gui.rkt @@ -729,15 +729,15 @@ (dynamic-require `(lib "updater.rkt" ,this-collection-name) 'bg-update) void)) - (define (get-lang-prefix modname) - (let* ([lang-settings (preferences:get (drracket:language-configuration:get-settings-preferences-symbol))] + (define (get-lang-prefix modname editor) + (let* ([lang-settings (send editor get-next-settings)] [lang (drracket:language-configuration:language-settings-language lang-settings)] [settings (drracket:language-configuration:language-settings-settings lang-settings)]) (send lang get-metadata modname settings))) (define (with-fake-header editor) (let ([new-editor (send editor copy-self)] - [text (get-lang-prefix 'handin)]) + [text (get-lang-prefix 'handin editor)]) (when text (send new-editor set-position 0) (send new-editor insert-port (open-input-string text))) From 9bc3bc78c9cdec531a1fd17a8c459d6bf6310627 Mon Sep 17 00:00:00 2001 From: "Paolo G. Giarrusso" Date: Sun, 4 Oct 2015 23:27:03 +0200 Subject: [PATCH 3/4] Refactor: move string->editor! in unit scope --- handin-client/client-gui.rkt | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/handin-client/client-gui.rkt b/handin-client/client-gui.rkt index 9d2c614..ae7303c 100644 --- a/handin-client/client-gui.rkt +++ b/handin-client/client-gui.rkt @@ -708,16 +708,6 @@ (define handin-icon (scale-by-half (in-this-collection "icon.png"))) -(define (string->editor! str defs) - (let* ([base (make-object editor-stream-in-bytes-base% str)] - [stream (make-object editor-stream-in% base)]) - (read-editor-version stream base #t) - (read-editor-global-header stream) - (send* defs (begin-edit-sequence #f) - (erase) (read-from-file stream) - (end-edit-sequence)) - (read-editor-global-footer stream))) - (define tool@ (unit (import drracket:tool^) @@ -753,6 +743,16 @@ (write-editor-global-footer stream) (send base get-bytes))) + (define (string->editor! str defs) + (let* ([base (make-object editor-stream-in-bytes-base% str)] + [stream (make-object editor-stream-in% base)]) + (read-editor-version stream base #t) + (read-editor-global-header stream) + (send* defs (begin-edit-sequence #f) + (erase) (read-from-file stream) + (end-edit-sequence)) + (read-editor-global-footer stream))) + (define tool-button-label (bitmap-label-maker button-label/h handin-icon)) (define (make-new-unit-frame% super%) From 638aba20999c9f35c4e19d5b5f0a03827f4a8ed6 Mon Sep 17 00:00:00 2001 From: "Paolo G. Giarrusso" Date: Sun, 4 Oct 2015 23:50:06 +0200 Subject: [PATCH 4/4] Restore language on retrieval This uses many internal APIs, but I don't see how to do that otherwise. I already simplified significantly the code (as done elsewhere in the handin-client), removing various calls to internal APIs in the process. --- handin-client/client-gui.rkt | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/handin-client/client-gui.rkt b/handin-client/client-gui.rkt index ae7303c..a7f18b2 100644 --- a/handin-client/client-gui.rkt +++ b/handin-client/client-gui.rkt @@ -2,6 +2,7 @@ (require racket/class racket/unit racket/file racket/gui/base net/sendurl mrlib/switchable-button mrlib/bitmap-label drracket/tool framework + drracket/private/auto-language "info.rkt" "client.rkt" "this-collection.rkt") (provide tool@) @@ -743,14 +744,30 @@ (write-editor-global-footer stream) (send base get-bytes))) + ; Adapted from + ; https://github.com/racket/drracket/blob/a2f8efc910ffd5e0992279ff59bfe7145598d5ba/drracket/drracket/private/unit.rkt#L619-L643 + (define (guess-language defs) + (let-values ([(matching-language settings) + (pick-new-language + defs + (drracket:language-configuration:get-languages) + #f #f)]) + (when matching-language + (send defs set-next-settings + (drracket:language-configuration:language-settings + matching-language + settings) + #f)))) + (define (string->editor! str defs) (let* ([base (make-object editor-stream-in-bytes-base% str)] [stream (make-object editor-stream-in% base)]) (read-editor-version stream base #t) (read-editor-global-header stream) (send* defs (begin-edit-sequence #f) - (erase) (read-from-file stream) - (end-edit-sequence)) + (erase) (read-from-file stream)) + (guess-language defs) + (send defs end-edit-sequence) (read-editor-global-footer stream))) (define tool-button-label (bitmap-label-maker button-label/h handin-icon))