racket / drracket

DrRacket, IDE for Racket
http://www.racket-lang.org/
Other
444 stars 93 forks source link

classify-position: called on a color:text<%> whose colorer is stopped. #665

Closed sorawee closed 3 months ago

sorawee commented 4 months ago

Steps to reproduce:

  1. Clear the definition pane (including the #lang line).
  2. Edit > Modes > Text mode
  3. Type an open parenthesis.

Then this error will occur:

classify-position: called on a color:text<%> whose colorer is stopped.
rfindler commented 3 months ago

Sorry it too me so long to get to this one. I'm not doubting that it happens but I'm not able to make it happen with those steps. I don't suppose you got a stacktrace, did you?

sorawee commented 3 months ago

I can still reproduce it with the above steps. Here's the stack trace.

classify-position: called on a color:text<%> whose colorer is stopped.
  context...:
   /Users/sorawee/projects/racket/extra-pkgs/gui/gui-lib/framework/private/color.rkt:1032:4: classify-position method in text-mixin
   /Users/sorawee/projects/racket/extra-pkgs/gui/gui-lib/framework/private/racket.rkt:1500:0: maybe-insert-brace-pair
   /Users/sorawee/projects/racket/extra-pkgs/gui/gui-lib/mred/private/wxme/keymap.rkt:739:2: call-function method in keymap%
   /Users/sorawee/projects/racket/extra-pkgs/gui/gui-lib/mred/private/wxme/keymap.rkt:511:2: chain-handle-key-event method in keymap%
   [repeats 2 more times]
   /Users/sorawee/projects/racket/extra-pkgs/gui/gui-lib/mred/private/wxme/keymap.rkt:462:2: handle-key-event method in keymap%
   /Users/sorawee/projects/racket/extra-pkgs/gui/gui-lib/mred/private/wxme/editor.rkt:215:2: on-local-char method in editor%
   /Users/sorawee/projects/racket/extra-pkgs/gui/gui-lib/mred/private/wxme/editor-canvas.rkt:504:2: on-char method in editor-canvas%
   /Users/sorawee/projects/racket/racket/collects/racket/private/more-scheme.rkt:148:2: call-with-break-parameterization
   /Users/sorawee/projects/racket/racket/collects/ffi/unsafe/atomic.rkt:73:13
   /Users/sorawee/projects/racket/extra-pkgs/gui/gui-lib/mred/private/wx/cocoa/window.rkt:889:4: dispatch-on-char method in window%
   /Users/sorawee/projects/racket/extra-pkgs/gui/gui-lib/mred/private/wx/common/queue.rkt:436:6
   /Users/sorawee/projects/racket/extra-pkgs/gui/gui-lib/mred/private/wx/common/queue.rkt:487:32
   /Users/sorawee/projects/racket/extra-pkgs/gui/gui-lib/mred/private/wx/common/queue.rkt:639:3
rfindler commented 3 months ago

[ edit -- oops, too many nots ]

Oh, this may just be the tip of the iceberg wrt to text mode (as the colorer is disabled), but does this fix it?

$  git diff
diff --git a/gui-lib/framework/private/racket.rkt b/gui-lib/framework/private/racket.rkt
index 9eb88080..751da49c 100644
--- a/gui-lib/framework/private/racket.rkt
+++ b/gui-lib/framework/private/racket.rkt
@@ -1501,7 +1501,8 @@
   (define open-parens
     (for/list ([x (racket-paren:get-paren-pairs)]) (string-ref (car x) 0)))
   (cond
-    [(not (preferences:get 'framework:automatic-parens))
+    [(or (not (preferences:get 'framework:automatic-parens))
+         (send text is-stopped?))
      (define startpos (send text get-start-position))
      (if (and (send text get-overwrite-mode)
               (= startpos (send text get-end-position)))
sorawee commented 3 months ago

That appears to fix the problem, yes. Thank you!