[plt-scheme] can't get undo (from add-text-keymap-functions) working

From: Robby Findler (robby at eecs.northwestern.edu)
Date: Sun Apr 5 09:12:21 EDT 2009

Yes, the undo history is, by default, 0. See set-max-undo-history.

Robby

On Sun, Apr 5, 2009 at 1:15 AM, Martin DeMello <martindemello at gmail.com> wrote:
> I have inherited a class from text%, and assigned it a keymap. The
> keymap has been seeded with add-text-keymap-functions. However,
> undo/redo don't work - is there anything extra I need to add to get
> undo support? Here's the relevant code (I've pasted the full class in,
> in case something else is interfering with undo):
>
> (define editor-keymap
>  (let ((keymap (make-object keymap%)))
>    (add-text-keymap-functions keymap)
>    (send keymap map-function "c:left" "backward-word")
>    (send keymap map-function "c:right" "forward-word")
>    (send keymap map-function "s:c:left" "backward-select-word")
>    (send keymap map-function "s:c:right" "forward-select-word")
>    (send keymap map-function "c:insert" "copy-clipboard")
>    (send keymap map-function "s:insert" "paste-clipboard")
>    (send keymap map-function "c:z" "undo")
>    (send keymap map-function "c:y" "redo")
>    keymap))
>
> (define editable-text%
>  (class text%
>    (init-field on-height-changed)
>    (init-field next-editor)
>    (init-field prev-editor)
>    (init-field set-active)
>    (init-field (initial-text ""))
>    ;; height acts as a cache for the number of lines
>    ;; so we can tell if insert/delete has changed it
>    (define height 0)
>    (define (set-height) (set! height (last-line)))
>    (define (check-height)
>      (when (<> height (last-line)) (on-height-changed)))
>    (inherit last-line position-line get-start-position insert set-keymap)
>    (define (current-line) (position-line (get-start-position)))
>    (define (last-line?) (= (current-line) (last-line)))
>    (define (first-line?) (= (current-line) 0))
>    (define/public (nlines) (+ 1 (last-line)))
>    (define/augment (on-insert a b) (set-height))
>    (define/augment (on-delete a b) (set-height))
>    (define/augment (after-insert a b) (check-height))
>    (define/augment (after-delete a b) (check-height))
>    (define/override (on-focus on?) (when on? (set-active)))
>    (define/override (on-local-char key)
>      (let ([code (send key get-key-code)])
>        (cond [(and (equal? code 'down) (last-line?)) (next-editor) ]
>              [(and (equal? code 'up) (first-line?)) (prev-editor) ]
>              [else (super on-local-char key)])))
>
>    ;; initialize
>    (super-instantiate ())
>    (set-keymap editor-keymap)
>    (insert initial-text 0)
>    ))
>
> martin
> _________________________________________________
>  For list-related administrative tasks:
>  http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>


Posted on the users mailing list.