From 45f57674d8dbe936cfa5ac73f91b8261c4d5fe49 Mon Sep 17 00:00:00 2001 From: 6cdh Date: Sun, 9 Jul 2023 16:58:38 +0800 Subject: [PATCH] fix editor crash --- editor.rkt | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/editor.rkt b/editor.rkt index fe982d6..a4e544d 100644 --- a/editor.rkt +++ b/editor.rkt @@ -9,16 +9,32 @@ (class object% (define core (new racket:text%)) + ;; workaround for sequence-contract-violation problem + (define/private (reload!) + (define new-core (new racket:text%)) + (send new-core insert (send core get-text) 0) + (set! core new-core)) + (define/private (set-core! new-core) (set! core new-core)) ;; insert str at start (define/public (insert str start) - (send core insert str start)) + (with-handlers ([exn? + (λ _ + (reload!) + ;; only retry once + (send core insert str start))]) + (send core insert str start))) ;; replace text at (range start end) with str (define/public (replace str start end) - (send core insert str start end)) + (with-handlers ([exn? + (λ _ + (reload!) + ;; only retry once + (send core insert str start end))]) + (send core insert str start end))) (define/public (delete start end) (send core delete start end))