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