improve the performance of typing a close paren
original commit: 0b095382ca537a95fa9fb37a866337006210553a
This commit is contained in:
parent
cf816d725e
commit
366a8a31ff
|
@ -1041,13 +1041,6 @@ added get-regions
|
||||||
;; as a paren, then don't try to change it.
|
;; as a paren, then don't try to change it.
|
||||||
#f))
|
#f))
|
||||||
(define insert-str (if closer closer (string char)))
|
(define insert-str (if closer closer (string char)))
|
||||||
(define-values (next-close-start next-close-end next-close-str next-close-adj?)
|
|
||||||
(find-next-close-paren pos closers))
|
|
||||||
(define-values (outer-close-start outer-close-end outer-close-str)
|
|
||||||
(find-next-outer-paren pos closers))
|
|
||||||
(end-edit-sequence) ;; wraps up the net-zero editing changes done by get-close-paren etc.
|
|
||||||
(undo) ;; to avoid messing up the editor's modified state in case of a simple skip
|
|
||||||
|
|
||||||
(define (insert)
|
(define (insert)
|
||||||
(for ([c (in-string insert-str)])
|
(for ([c (in-string insert-str)])
|
||||||
(on-default-char (new key-event% (key-code c))))
|
(on-default-char (new key-event% (key-code c))))
|
||||||
|
@ -1058,23 +1051,39 @@ added get-regions
|
||||||
|
|
||||||
(define end-pos
|
(define end-pos
|
||||||
(cond
|
(cond
|
||||||
[(not smart-skip) (insert)]
|
[smart-skip
|
||||||
[(eq? smart-skip 'adjacent)
|
(define-values (next-close-start next-close-end next-close-str next-close-adj?)
|
||||||
(if (and next-close-start next-close-adj?
|
(find-next-close-paren pos closers))
|
||||||
(string=? insert-str next-close-str))
|
|
||||||
(skip next-close-end)
|
|
||||||
(insert))]
|
|
||||||
[(eq? smart-skip 'forward)
|
|
||||||
(cond
|
(cond
|
||||||
[(and outer-close-start
|
[(eq? smart-skip 'adjacent)
|
||||||
(or fixup? (string=? insert-str outer-close-str)))
|
(end-edit-sequence) ;; wraps up the net-zero editing changes done by get-close-paren etc.
|
||||||
(skip outer-close-end)]
|
(undo) ;; to avoid messing up the editor's modified state in case of a simple skip
|
||||||
[(and next-close-start
|
(if (and next-close-start next-close-adj?
|
||||||
(or fixup? (string=? insert-str next-close-str)))
|
(string=? insert-str next-close-str))
|
||||||
(skip next-close-end)]
|
(skip next-close-end)
|
||||||
[else (insert)])]
|
(insert))]
|
||||||
[else (error 'insert-close-paren
|
[(eq? smart-skip 'forward)
|
||||||
(format "invalid smart-skip option: ~a" smart-skip))]))
|
(define-values (outer-close-start outer-close-end outer-close-str)
|
||||||
|
(find-next-outer-paren pos closers))
|
||||||
|
(end-edit-sequence) ;; wraps up the net-zero editing changes done by get-close-paren etc.
|
||||||
|
(undo) ;; to avoid messing up the editor's modified state in case of a simple skip
|
||||||
|
(cond
|
||||||
|
[(and outer-close-start
|
||||||
|
(or fixup? (string=? insert-str outer-close-str)))
|
||||||
|
(skip outer-close-end)]
|
||||||
|
[(and next-close-start
|
||||||
|
(or fixup? (string=? insert-str next-close-str)))
|
||||||
|
(skip next-close-end)]
|
||||||
|
[else (insert)])]
|
||||||
|
[else
|
||||||
|
(end-edit-sequence) ;; wraps up the net-zero editing changes done by get-close-paren etc.
|
||||||
|
(undo) ;; to avoid messing up the editor's modified state in case of a simple skip
|
||||||
|
(error 'insert-close-paren
|
||||||
|
(format "invalid smart-skip option: ~a" smart-skip))])]
|
||||||
|
[else
|
||||||
|
(begin0
|
||||||
|
(insert)
|
||||||
|
(end-edit-sequence))]))
|
||||||
|
|
||||||
(when (and flash? (not stopped?)) (flash-from end-pos)))
|
(when (and flash? (not stopped?)) (flash-from end-pos)))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user