rearanged edit hierarchy

added gc edit
fixed small other bugs
added gc icon (that shouldn't be gc-edit, it should be gc canvas,
for the infor stuff)

original commit: c1f41c82ca3aeeb19ccf55f12a70da821d2bb52a
This commit is contained in:
Robby Findler 1997-06-25 02:52:12 +00:00
parent d864ae21d5
commit 24d0620f0e
4 changed files with 522 additions and 401 deletions

View File

@ -35,8 +35,14 @@
(lambda (snip%)
(class snip% args
(inherit set-style)
(public [edit% media-edit%])
(sequence
(apply super-init args)
(cond
[(null? args)
(super-init (make-object edit%))]
[(null? (car args))
(apply super-init (make-object edit%) (cdr args))]
[else (apply super-init args)])
(set-style std)))))))
(define media-snip% (make-snip% wx:media-snip%))
@ -51,7 +57,6 @@
(rename [super-set-modified set-modified]
[super-on-save-file on-save-file]
[super-on-focus on-focus]
[super-set-max-width set-max-width]
[super-lock lock])
(public
@ -76,10 +81,6 @@
[else (get-pasteboard-snip)]))])
(public
[set-max-width
(lambda (x)
(mred:debug:printf 'rewrap "rewrap: set-max-width: ~a" x)
(super-set-max-width x))]
[get-file (lambda (d)
(let ([v (mred:finder:get-file d)])
(if v
@ -89,42 +90,6 @@
(if v
v
'())))]
[auto-set-wrap? (mred:preferences:get-preference 'mred:auto-set-wrap?)]
[set-auto-set-wrap
(lambda (v)
(mred:debug:printf 'rewrap
"rewrap: set-auto-set-wrap: ~a (canvases ~a)"
v canvases)
(set! auto-set-wrap? v)
(for-each (lambda (c) (send c resize-edit)) canvases))]
[rewrap
(lambda ()
(if auto-set-wrap?
(let* ([current-width (get-max-width)]
[w-box (box 0)]
[new-width
(mzlib:function:foldl
(lambda (canvas sofar)
(send canvas call-as-primary-owner
(lambda ()
(send (get-admin)
get-view null null
w-box (box 0))))
(max (unbox w-box) sofar))
0
canvases)])
(mred:debug:printf 'rewrap "rewrap: new-width ~a current-width ~a"
new-width current-width)
(when (and (not (= current-width new-width))
(< 0 new-width))
(set-max-width new-width)
(mred:debug:printf 'rewrap "rewrap: attempted to wrap to: ~a actually wrapped to ~a"
new-width (get-max-width))))
(begin
(mred:debug:printf 'rewrap "rewrap: wrapping to -1")
(set-max-width -1))))]
[mode #f]
[set-mode-direct (lambda (v) (set! mode v))]
[set-mode
@ -133,141 +98,41 @@
(sequence
(apply super-init args)))))
(define make-edit%
(define make-pasteboard% make-std-buffer%)
(define make-media-edit%
(lambda (super%)
(class (make-std-buffer% super%) args
(inherit mode set-mode-direct canvases get-file-format
set-filename find-string get-snip-position
change-style save-file get-admin
invalidate-bitmap-cache split-snip
(class super% args
(inherit canvases get-max-width get-admin split-snip get-snip-position
delete find-snip set-filename invalidate-bitmap-cache
begin-edit-sequence end-edit-sequence
flash-on get-keymap get-start-position
get-end-position last-position
on-default-char on-default-event
set-file-format get-style-list
set-autowrap-bitmap delete
get-snip-location find-snip get-max-width
modified? set-modified
lock get-filename)
set-autowrap-bitmap get-keymap mode set-mode-direct
set-file-format get-file-format
get-style-list modified? change-style set-modified)
(rename [super-on-focus on-focus]
[super-on-paint on-paint]
[super-on-local-event on-local-event]
[super-on-local-char on-local-char]
[super-on-save-file on-save-file]
[super-after-save-file after-save-file]
[super-after-set-position after-set-position]
[super-on-edit-sequence on-edit-sequence]
[super-on-change-style on-change-style]
[super-on-insert on-insert]
[super-on-delete on-delete]
[super-on-set-size-constraint on-set-size-constraint]
[super-after-load-file after-load-file]
[super-load-file load-file]
[super-after-edit-sequence after-edit-sequence]
[super-after-change-style after-change-style]
[super-after-insert after-insert]
[super-after-delete after-delete]
[super-after-set-size-constraint after-set-size-constraint])
[super-after-set-size-constraint after-set-size-constraint]
(private
[styles-fixed-edit-modified? #f]
[restore-file-format void])
[super-set-max-width set-max-width]
[super-load-file load-file]
[super-on-paint on-paint])
(private [styles-fixed-edit-modified? #f])
(public
[move/copy-to-edit
(lambda (dest-edit start end dest-position)
(let ([insert-edit (ivar dest-edit insert)])
(split-snip start)
(split-snip end)
(let loop ([snip (find-snip end wx:const-snip-before)])
(cond
[(or (null? snip) (< (get-snip-position snip) start))
(void)]
[else
(let ([prev (send snip previous)]
[released/copied (if (send snip release-from-owner)
snip
(let* ([copy (send snip copy)]
[snip-start (get-snip-position snip)]
[snip-end (+ snip-start (send snip get-count))])
(delete snip-start snip-end)
snip))])
'(wx:message-box (format "before: ~a" (eq? snip released/copied)))
(insert-edit released/copied dest-position dest-position)
'(wx:message-box (format "after: ~a" (eq? snip released/copied)))
(loop prev))]))))])
(public
[on-save-file
(let ([has-non-text-snips
(lambda ()
(let loop ([s (find-snip 0 wx:const-snip-after)])
(cond
[(null? s) #f]
[(is-a? s wx:text-snip%)
(loop (send s next))]
[else #t])))])
(lambda (name format)
(when (and (or (= format wx:const-media-ff-same)
(= format wx:const-media-ff-copy))
(not (= (get-file-format)
wx:const-media-ff-std)))
(cond
[(= format wx:const-media-ff-copy)
(set! restore-file-format
(let ([f (get-file-format)])
(lambda ()
(set! restore-file-format void)
(set-file-format f))))
(set-file-format wx:const-media-ff-std)]
[(and (has-non-text-snips)
(or (not (mred:preferences:get-preference 'mred:verify-change-format))
(mred:gui-utils:get-choice "Save this file as plain text?" "No" "Yes")))
(set-file-format wx:const-media-ff-std)]
[else (void)]))
(or (super-on-save-file name format)
(begin
(restore-file-format)
#f))))]
[check-lock
(lambda ()
(let* ([filename (get-filename)]
[lock? (and (not (null? filename))
(file-exists? filename)
(not (member
'write
(file-or-directory-permissions
filename))))])
(mred:debug:printf 'permissions
"locking: ~a (filename: ~a)"
lock?
filename)
(lock lock?)))]
[after-save-file
(lambda (success)
(when success
(check-lock))
(super-after-save-file success)
(restore-file-format))]
[autowrap-bitmap mred:icon:autowrap-bitmap]
[load-file
(opt-lambda ([filename null] [format wx:const-media-ff-guess])
(if (file-exists? filename)
(super-load-file filename format)
(set-filename filename)))]
[after-load-file
(lambda (sucessful?)
(when sucessful?
(check-lock))
(super-after-load-file sucessful?))]
[set-mode
(lambda (m)
(if mode
@ -286,8 +151,9 @@
find-named-style "Standard")
set-delta (make-object wx:style-delta%)))))]
[styles-fixed? #f]
[set-styles-fixed (lambda (b) (set! styles-fixed? b))]
[set-styles-fixed (lambda (b) (set! styles-fixed? b))])
(public
[on-focus
(lambda (on?)
(super-on-focus on?)
@ -357,6 +223,82 @@
(send mode after-set-position this))
(super-after-set-position))])
(public
[set-max-width
(lambda (x)
(mred:debug:printf 'rewrap "rewrap: set-max-width: ~a" x)
(super-set-max-width x))]
[auto-set-wrap? (mred:preferences:get-preference 'mred:auto-set-wrap?)]
[set-auto-set-wrap
(lambda (v)
(mred:debug:printf 'rewrap
"rewrap: set-auto-set-wrap: ~a (canvases ~a)"
v canvases)
(set! auto-set-wrap? v)
(for-each (lambda (c) (send c resize-edit)) canvases))]
[rewrap
(lambda ()
(if auto-set-wrap?
(let* ([current-width (get-max-width)]
[w-box (box 0)]
[new-width
(mzlib:function:foldl
(lambda (canvas sofar)
(send canvas call-as-primary-owner
(lambda ()
(send (get-admin)
get-view null null
w-box (box 0))))
(max (unbox w-box) sofar))
0
canvases)])
(mred:debug:printf 'rewrap "rewrap: new-width ~a current-width ~a"
new-width current-width)
(when (and (not (= current-width new-width))
(< 0 new-width))
(set-max-width new-width)
(mred:debug:printf 'rewrap "rewrap: attempted to wrap to: ~a actually wrapped to ~a"
new-width (get-max-width))))
(begin
(mred:debug:printf 'rewrap "rewrap: wrapping to -1")
(set-max-width -1))))])
(public
[move/copy-to-edit
(lambda (dest-edit start end dest-position)
(let ([insert-edit (ivar dest-edit insert)])
(split-snip start)
(split-snip end)
(let loop ([snip (find-snip end wx:const-snip-before)])
(cond
[(or (null? snip) (< (get-snip-position snip) start))
(void)]
[else
(let ([prev (send snip previous)]
[released/copied (if (send snip release-from-owner)
snip
(let* ([copy (send snip copy)]
[snip-start (get-snip-position snip)]
[snip-end (+ snip-start (send snip get-count))])
(delete snip-start snip-end)
snip))])
'(wx:message-box (format "before: ~a" (eq? snip released/copied)))
(insert-edit released/copied dest-position dest-position)
'(wx:message-box (format "after: ~a" (eq? snip released/copied)))
(loop prev))]))))])
(public
[load-file
(opt-lambda ([filename null] [format wx:const-media-ff-guess])
(let ([filename (if (null? filename)
(mred:finder:get-file)
filename)])
(and filename
(if (file-exists? filename)
(super-load-file filename format)
(set-filename filename)))))])
(private
[range-rectangles null]
[recompute-range-rectangles
@ -505,8 +447,23 @@
(send dc set-logical-function old-logical-function)
(send dc set-pen old-pen)
(send dc set-brush old-brush))))
range-rectangles))])
range-rectangles))])
(public
[autowrap-bitmap null])
(sequence
(apply super-init args)
(set-autowrap-bitmap autowrap-bitmap)
(let ([keymap (get-keymap)])
(mred:keymap:set-keymap-error-handler keymap)
(mred:keymap:set-keymap-implied-shifts keymap)
(send keymap chain-to-keymap mred:keymap:global-keymap #f))))))
(define make-searching-edit%
(lambda (super%)
(class super% args
(inherit get-end-position get-start-position last-position
find-string get-snip-position get-admin find-snip
get-keymap)
(public
[find-string-embedded
(opt-lambda (str [direction 1] [start -1]
@ -529,17 +486,17 @@
[end-test
(lambda (snip)
(cond
[(null? snip) flat]
[(and (not (= -1 flat))
(let* ([start (get-snip-position snip)]
[end (+ start (send snip get-count))])
(if (= direction 1)
(and (<= start flat)
(< flat end))
(and (< start flat)
(<= flat end)))))
flat]
[else #f]))]
[(null? snip) flat]
[(and (not (= -1 flat))
(let* ([start (get-snip-position snip)]
[end (+ start (send snip get-count))])
(if (= direction 1)
(and (<= start flat)
(< flat end))
(and (< start flat)
(<= flat end)))))
flat]
[else #f]))]
[pop-out
(lambda ()
(let ([admin (get-admin)])
@ -565,146 +522,143 @@
(loop (send current-snip next))
(loop (send current-snip previous))))])
(cond
[(end-test current-snip) =>
(lambda (x)
(if (and (= x -1) pop-out?)
(pop-out)
(values this x)))]
[(is-a? current-snip wx:media-snip%)
(let-values ([(embedded embedded-pos)
(let ([media (send current-snip get-this-media)])
(and (not (null? media))
(send media find-string-embedded str
direction
(if (= 1 direction)
0
(send media last-position))
-1
get-start case-sensitive?)))])
(if (= -1 embedded-pos)
(next-loop)
(values embedded embedded-pos)))]
[else (next-loop)]))))))])
[(end-test current-snip) =>
(lambda (x)
(if (and (= x -1) pop-out?)
(pop-out)
(values this x)))]
[(is-a? current-snip wx:media-snip%)
(let-values ([(embedded embedded-pos)
(let ([media (send current-snip get-this-media)])
(and (not (null? media))
(send media find-string-embedded str
direction
(if (= 1 direction)
0
(send media last-position))
-1
get-start case-sensitive?)))])
(if (= -1 embedded-pos)
(next-loop)
(values embedded embedded-pos)))]
[else (next-loop)]))))))])
(sequence
(apply super-init args)
(set-autowrap-bitmap autowrap-bitmap)
(let ([keymap (get-keymap)])
(mred:keymap:set-keymap-error-handler keymap)
(mred:keymap:set-keymap-implied-shifts keymap)
(send keymap chain-to-keymap mred:keymap:global-keymap #f))))))
(send keymap chain-to-keymap mred:keymap:global-search-keymap #f))))))
(define edit% (make-edit% mred:connections:connections-media-edit%))
(define make-return-edit%
(define make-file-buffer%
(lambda (super%)
(class super% (return . args)
(rename [super-on-local-char on-local-char])
(class super% args
(inherit get-keymap find-snip
get-filename lock get-style-list
modified? change-style set-modified
get-frame)
(rename [super-on-set-focus on-set-focus]
[super-on-kill-focus on-kill-focus]
[super-after-save-file after-save-file]
[super-after-load-file after-load-file])
(public
[on-local-char
(lambda (key)
(let ([cr-code 13]
[lf-code 10]
[code (send key get-key-code)])
(or (and (or (= lf-code code)
(= cr-code code))
(return))
(super-on-local-char key))))])
(sequence
(apply super-init args)))))
(define return-edit% (make-return-edit% edit%))
(define make-info-edit%
(lambda (super-info-edit%)
(class-asi super-info-edit%
(inherit get-frame get-start-position get-end-position
position-line line-start-position)
(rename [super-after-set-position after-set-position]
[super-after-edit-sequence after-edit-sequence]
[super-on-edit-sequence on-edit-sequence]
[super-after-insert after-insert]
[super-after-delete after-delete]
[super-lock lock]
[super-set-overwrite-mode set-overwrite-mode]
[super-set-anchor set-anchor])
[on-kill-focus
(lambda ()
(super-on-kill-focus)
(let ([frame (get-frame)])
(when frame
(send (get-keymap)
remove-chained-keymap
(ivar frame keymap)))))]
[on-set-focus
(lambda ()
(super-on-set-focus)
(let ([frame (get-frame)])
(when frame
(send (get-keymap)
chain-to-keymap
(ivar frame keymap)
#t))))])
(private
[edit-sequence-depth 0]
[position-needs-updating #f]
[lock-needs-updating #f]
[anchor-needs-updating #f]
[overwrite-needs-updating #f]
[maybe-update-anchor
[check-lock
(lambda ()
(if (= edit-sequence-depth 0)
(send (get-frame) anchor-status-changed)
(set! anchor-needs-updating #t)))]
[maybe-update-overwrite
(lambda ()
(if (= edit-sequence-depth 0)
(send (get-frame) overwrite-status-changed)
(set! overwrite-needs-updating #t)))]
[maybe-update-lock-icon
(lambda ()
(if (= edit-sequence-depth 0)
(send (get-frame) lock-status-changed)
(set! lock-needs-updating #t)))]
[maybe-update-position-edit
(lambda ()
(if (= edit-sequence-depth 0)
(update-position-edit)
(set! position-needs-updating #t)))]
[update-position-edit
(lambda ()
(send (get-frame) edit-position-changed))])
(let* ([filename (get-filename)]
[lock? (and (not (null? filename))
(file-exists? filename)
(not (member
'write
(file-or-directory-permissions
filename))))])
(mred:debug:printf 'permissions
"locking: ~a (filename: ~a)"
lock?
filename)
(lock lock?)))])
(public
[set-anchor
(lambda (x)
(super-set-anchor x)
(maybe-update-anchor))]
[set-overwrite-mode
(lambda (x)
(super-set-overwrite-mode x)
(maybe-update-overwrite))]
[lock
(lambda (x)
(super-lock x)
(maybe-update-lock-icon))]
[after-set-position
(lambda ()
(maybe-update-position-edit)
(super-after-set-position))]
[after-insert
(lambda (start len)
(maybe-update-position-edit)
(super-after-insert start len))]
[after-delete
(lambda (start len)
(maybe-update-position-edit)
(super-after-delete start len))]
[after-edit-sequence
(lambda ()
(set! edit-sequence-depth (sub1 edit-sequence-depth))
(when (= 0 edit-sequence-depth)
(when anchor-needs-updating
(set! anchor-needs-updating #f)
(send (get-frame) overwrite-status-changed))
(when lock-needs-updating
(set! lock-needs-updating #f)
(send (get-frame) anchor-status-changed))
(when position-needs-updating
(set! position-needs-updating #f)
(update-position-edit))
(when lock-needs-updating
(set! lock-needs-updating #f)
(send (get-frame) lock-status-changed)))
(super-after-edit-sequence))]
[on-edit-sequence
(lambda ()
(set! edit-sequence-depth (add1 edit-sequence-depth))
(super-on-edit-sequence))]))))
[after-save-file
(lambda (success)
(when success
(check-lock))
(super-after-save-file success))]
(define info-edit% (make-info-edit% edit%))
[after-load-file
(lambda (sucessful?)
(when sucessful?
(check-lock))
(super-after-load-file sucessful?))]
[autowrap-bitmap mred:icon:autowrap-bitmap])
(sequence
(apply super-init args)
(let ([keymap (get-keymap)])
(mred:keymap:set-keymap-error-handler keymap)
(mred:keymap:set-keymap-implied-shifts keymap)
(send keymap chain-to-keymap mred:keymap:global-file-keymap #f))))))
(define make-clever-file-format-edit%
(lambda (super%)
(class-asi super%
(inherit get-file-format set-file-format find-snip)
(rename [super-on-save-file on-save-file]
[super-after-save-file after-save-file])
(private [restore-file-format void])
(public
[after-save-file
(lambda (success)
(restore-file-format)
(super-after-save-file success))]
[on-save-file
(let ([has-non-text-snips
(lambda ()
(let loop ([s (find-snip 0 wx:const-snip-after)])
(cond
[(null? s) #f]
[(is-a? s wx:text-snip%)
(loop (send s next))]
[else #t])))])
(lambda (name format)
(when (and (or (= format wx:const-media-ff-same)
(= format wx:const-media-ff-copy))
(not (= (get-file-format)
wx:const-media-ff-std)))
(cond
[(= format wx:const-media-ff-copy)
(set! restore-file-format
(let ([f (get-file-format)])
(lambda ()
(set! restore-file-format void)
(set-file-format f))))
(set-file-format wx:const-media-ff-std)]
[(and (has-non-text-snips)
(or (not (mred:preferences:get-preference 'mred:verify-change-format))
(mred:gui-utils:get-choice "Save this file as plain text?" "No" "Yes")))
(set-file-format wx:const-media-ff-std)]
[else (void)]))
(or (super-on-save-file name format)
(begin
(restore-file-format)
#f))))]))))
(define make-backup-autosave-buffer%
(lambda (super-edit%)
@ -785,10 +739,138 @@
(apply super-init args)
(mred:autosave:register-autosave this)))))
(define backup-autosave-edit% (make-backup-autosave-buffer% info-edit%))
(define make-return-edit%
(lambda (super%)
(class super% (return . args)
(rename [super-on-local-char on-local-char])
(public
[on-local-char
(lambda (key)
(let ([cr-code 13]
[lf-code 10]
[code (send key get-key-code)])
(or (and (or (= lf-code code)
(= cr-code code))
(return))
(super-on-local-char key))))])
(sequence
(apply super-init args)))))
(define make-pasteboard% make-std-buffer%)
(define make-info-edit%
(lambda (super-info-edit%)
(class-asi super-info-edit%
(inherit get-frame get-start-position get-end-position
position-line line-start-position)
(rename [super-after-set-position after-set-position]
[super-after-edit-sequence after-edit-sequence]
[super-on-edit-sequence on-edit-sequence]
[super-after-insert after-insert]
[super-after-delete after-delete]
[super-lock lock]
[super-set-overwrite-mode set-overwrite-mode]
[super-set-anchor set-anchor])
(private
[edit-sequence-depth 0]
[position-needs-updating #f]
[lock-needs-updating #f]
[anchor-needs-updating #f]
[overwrite-needs-updating #f]
[maybe-update-anchor
(lambda ()
(if (= edit-sequence-depth 0)
(let ([frame (get-frame)])
(when frame
(send frame anchor-status-changed)))
(set! anchor-needs-updating #t)))]
[maybe-update-overwrite
(lambda ()
(if (= edit-sequence-depth 0)
(let ([frame (get-frame)])
(when frame
(send frame overwrite-status-changed)))
(set! overwrite-needs-updating #t)))]
[maybe-update-lock-icon
(lambda ()
(if (= edit-sequence-depth 0)
(let ([frame (get-frame)])
(when frame
(send frame lock-status-changed)))
(set! lock-needs-updating #t)))]
[maybe-update-position-edit
(lambda ()
(if (= edit-sequence-depth 0)
(update-position-edit)
(set! position-needs-updating #t)))]
[update-position-edit
(lambda ()
(let ([frame (get-frame)])
(when frame
(send frame edit-position-changed))))])
(public
[set-anchor
(lambda (x)
(super-set-anchor x)
(maybe-update-anchor))]
[set-overwrite-mode
(lambda (x)
(super-set-overwrite-mode x)
(maybe-update-overwrite))]
[lock
(lambda (x)
(super-lock x)
(maybe-update-lock-icon))]
[after-set-position
(lambda ()
(maybe-update-position-edit)
(super-after-set-position))]
[after-insert
(lambda (start len)
(maybe-update-position-edit)
(super-after-insert start len))]
[after-delete
(lambda (start len)
(maybe-update-position-edit)
(super-after-delete start len))]
[after-edit-sequence
(lambda ()
(set! edit-sequence-depth (sub1 edit-sequence-depth))
(when (= 0 edit-sequence-depth)
(let ([frame (get-frame)])
(when anchor-needs-updating
(set! anchor-needs-updating #f)
(send frame overwrite-status-changed))
(when lock-needs-updating
(set! lock-needs-updating #f)
(send frame anchor-status-changed))
(when position-needs-updating
(set! position-needs-updating #f)
(update-position-edit))
(when lock-needs-updating
(set! lock-needs-updating #f)
(send frame lock-status-changed))))
(super-after-edit-sequence))]
[on-edit-sequence
(lambda ()
(set! edit-sequence-depth (add1 edit-sequence-depth))
(super-on-edit-sequence))]))))
(define media-edit% (make-media-edit%
(make-std-buffer%
mred:connections:connections-media-edit%)))
(define info-edit% (make-info-edit% media-edit%))
(define searching-edit% (make-searching-edit% info-edit%))
(define clever-file-format-edit% (make-clever-file-format-edit% searching-edit%))
(define file-edit% (make-file-buffer% clever-file-format-edit%))
(define backup-autosave-edit% (make-backup-autosave-buffer% file-edit%))
(define edit% file-edit%)
(define return-edit% (make-return-edit% media-edit%))
(define pasteboard% (make-pasteboard% mred:connections:connections-media-pasteboard%))
(define file-pasteboard% (make-file-buffer% pasteboard%))
(define backup-autosave-pasteboard% (make-backup-autosave-buffer% edit%)))

View File

@ -282,7 +282,7 @@
() wx:const-needed-sb)]
[save-panel (when save-mode? (make-object mred:container:horizontal-panel% main-panel))]
[directory-panel (make-object mred:container:horizontal-panel% main-panel)]
[directory-edit (make-object (class-asi mred:edit:edit%
[directory-edit (make-object (class-asi mred:edit:media-edit%
(rename [super-on-local-char on-local-char])
(public
[on-local-char

View File

@ -50,9 +50,46 @@
(or (not x)
(eq? x #t))))
; This installs the standard keyboard mapping
(define setup-global-keymap
; Define some useful keyboard functions
(define setup-global-search-keymap
(let* ([find-string
(lambda (edit event . extras)
(let ([x-box (box 0)]
[y-box (box 0)]
[canvas (send event get-event-object)])
(send event position x-box y-box)
(send canvas client-to-screen x-box y-box)
(mred:find-string:find-string canvas ()
(- (unbox x-box) 30)
(- (unbox y-box) 30)
(cons 'ignore-case extras))
#t))]
[find-string-reverse
(lambda (edit event)
(find-string edit event 'reverse))]
[find-string-replace
(lambda (edit event)
(find-string edit event 'replace))])
(lambda (kmap)
(let* ([map (lambda (key func)
(send kmap map-function key func))]
[map-meta (lambda (key func)
(send-map-function-meta kmap key func))]
[add (lambda (name func)
(send kmap add-key-function name func))]
[add-m (lambda (name func)
(send kmap add-mouse-function name func))])
(add "find-string" find-string)
(add "find-string-reverse" find-string-reverse)
(add "find-string-replace" find-string-replace)
(map "c:x;c:s" "save-file")
(map "d:s" "save-file")
(map "c:x;c:w" "save-file-as")
(map "c:x;c:f" "load-file")))))
(define setup-global-file-keymap
(let* ([rcs
(let ([last-checkin-string ""])
(mred:preferences:set-preference-default
@ -121,17 +158,6 @@
(send edit get-filename)
(send edit get-file-format))
(wx:message-box "Checkout Failed")))))]))))))))]
[ring-bell
(lambda (edit event)
(let ([c (send edit get-canvas)])
(when c
(let ([f (let loop ([f c])
(if (is-a? f wx:frame%)
f
(loop (send f get-parent))))])
(send f hide-search))))
(wx:bell))]
[save-file-as
(lambda (edit event)
(let ([file (mred:finder:put-file)])
@ -147,25 +173,44 @@
[load-file
(lambda (edit event)
(mred:handler:open-file)
#t)]
[find-string
(lambda (edit event . extras)
(let ([x-box (box 0)]
[y-box (box 0)]
[canvas (send event get-event-object)])
(send event position x-box y-box)
(send canvas client-to-screen x-box y-box)
(mred:find-string:find-string canvas ()
(- (unbox x-box) 30)
(- (unbox y-box) 30)
(cons 'ignore-case extras))
#t))]
[find-string-reverse
#t)])
(lambda (kmap)
(map (lambda (k) (send kmap implies-shift k)) shifted-key-list)
(let* ([map (lambda (key func)
(send kmap map-function key func))]
[map-meta (lambda (key func)
(send-map-function-meta kmap key func))]
[add (lambda (name func)
(send kmap add-key-function name func))]
[add-m (lambda (name func)
(send kmap add-mouse-function name func))])
(add "rcs" rcs)
(add "save-file" save-file)
(add "save-file-as" save-file-as)
(add "load-file" load-file)
(when (eq? wx:platform 'unix)
'(map "c:x;c:q" "rcs"))
(map "c:x;c:s" "save-file")
(map "d:s" "save-file")
(map "c:x;c:w" "save-file-as")
(map "c:x;c:f" "load-file")))))
; This installs the standard keyboard mapping
(define setup-global-keymap
; Define some useful keyboard functions
(let* ([ring-bell
(lambda (edit event)
(find-string edit event 'reverse))]
[find-string-replace
(lambda (edit event)
(find-string edit event 'replace))]
(let ([c (send edit get-canvas)])
(when c
(let ([f (let loop ([f c])
(if (is-a? f wx:frame%)
f
(loop (send f get-parent))))])
(send f hide-search))))
(wx:bell))]
[toggle-anchor
(lambda (edit event)
@ -682,8 +727,6 @@
; Map names to keyboard functions
(add "toggle-overwrite" toggle-overwrite)
(add "rcs" rcs)
(add "exit" (lambda (edit event)
(let ([frame (send edit get-frame)])
(if frame
@ -692,14 +735,6 @@
(add "ring-bell" ring-bell)
(add "save-file" save-file)
(add "save-file-as" save-file-as)
(add "load-file" load-file)
(add "find-string" find-string)
(add "find-string-reverse" find-string-reverse)
(add "find-string-replace" find-string-replace)
(add "flash-paren-match" flash-paren-match)
(add "toggle-anchor" toggle-anchor)
@ -742,12 +777,6 @@
(add "delete-key" delete-key)
; Map keys to functions
; this is not for export -- too much chance it's wrong
; outside of Rice.
(when (eq? wx:platform 'unix)
'(map "c:x;c:q" "rcs"))
(map "c:g" "ring-bell")
(map-meta "c:g" "ring-bell")
(map "c:x;c:g" "ring-bell")
@ -869,15 +898,6 @@
(map "a:c" "copy-clipboard")
(map "d:c" "copy-clipboard")
(map "c:x;c:s" "save-file")
(map "d:s" "save-file")
(map "c:x;c:w" "save-file-as")
(map "c:x;c:f" "load-file")
(map "c:s" "find-string")
(map "c:r" "find-string-reverse")
(map-meta "%" "find-string-replace")
(map-meta "space" "collapse-space")
(map-meta "\\" "remove-space")
(map "c:x;c:o" "collapse-newline")
@ -915,5 +935,10 @@
(map "c:rightbutton" "copy-clipboard")))))
(define global-keymap (make-object wx:keymap%))
(setup-global-keymap global-keymap))
(setup-global-keymap global-keymap)
(define global-file-keymap (make-object wx:keymap%))
(setup-global-file-keymap global-file-keymap)
(define global-search-keymap (make-object wx:keymap%))
(setup-global-search-keymap global-search-keymap))

View File

@ -38,9 +38,8 @@
msg
((debug-info-handler))))))])
(with-handlers ([void h])
(thunk))
)))
(with-handlers ([(lambda (x) #t) h])
(thunk)))))
(define unmarshall
(lambda (p marshalled)
@ -183,21 +182,27 @@
[else (error 'prefs.ss "robby error.2: ~a" ht-value)]))])
(lambda ()
(mred:debug:printf 'prefs "saving user preferences")
(call-with-output-file preferences-filename
(lambda (p)
(mzlib:pretty-print:pretty-print
(hash-table-map preferences marshall-pref) p))
'truncate 'text)
(with-handlers ([(lambda (x) #t)
(lambda (exn)
(mred:gui-utils:message-box
(format "Error saving preferences~n~a"
(exn-message exn))
"Error saving preferences"))])
(call-with-output-file preferences-filename
(lambda (p)
(mzlib:pretty-print:pretty-print
(hash-table-map preferences marshall-pref) p))
'truncate 'text))
(mred:debug:printf 'prefs "saved user preferences"))))
(mred:exit:insert-exit-callback
(lambda ()
(with-handlers ([(lambda (x) #t)
(lambda (exn)
(mred:gui-utils:message-box
(format "error while saving prefs: ~a"
(exn-message exn))
"Saving Prefs"))])
(mred:gui-utils:message-box
(format "error while saving prefs: ~a"
(exn-message exn))
"Saving Prefs"))])
(save-user-preferences))))
(define read-user-preferences
@ -226,31 +231,40 @@
[else (error 'prefs.ss "robby error.3: ~a" ht-pref)]))))])
(lambda ()
(mred:debug:printf 'prefs "reading user preferences")
(when (file-exists? preferences-filename)
(let ([err
(lambda (input)
(wx:message-box (format "found bad pref: ~n~a" input)
"Preferences"))])
(let loop ([input (call-with-input-file preferences-filename
read
'text)])
(cond
[(pair? input)
(let/ec k
(let ([first (car input)])
(when (pair? first)
(let ([arg1 (car first)]
[t1 (cdr first)])
(when (pair? t1)
(let ([arg2 (car t1)]
[t2 (cdr t1)])
(when (null? t2)
(parse-pref arg1 arg2)
(k #t)))))))
(err input))
(loop (cdr input))]
[(null? input) (void)]
[else (err input)]))))
(let/ec k
(when (file-exists? preferences-filename)
(let ([err
(lambda (input)
(mred:gui-utils:message-box (format "found bad pref: ~n~a" input)
"Preferences"))])
(let loop ([input (with-handlers
([(lambda (exn) #t)
(lambda (exn)
(mred:gui-utils:message-box
(format "Error saving preferences~n~a"
(exn-message exn))
"Error reading preferences")
(k #f))])
(call-with-input-file preferences-filename
read
'text))])
(cond
[(pair? input)
(let/ec k
(let ([first (car input)])
(when (pair? first)
(let ([arg1 (car first)]
[t1 (cdr first)])
(when (pair? t1)
(let ([arg2 (car t1)]
[t2 (cdr t1)])
(when (null? t2)
(parse-pref arg1 arg2)
(k #t)))))))
(err input))
(loop (cdr input))]
[(null? input) (void)]
[else (err input)])))))
(mred:debug:printf 'prefs "read user preferences"))))
(define-struct ppanel (title container panel))
@ -285,12 +299,12 @@
(lambda (x) (if x 'std 'common))
(lambda (x) (eq? x 'std)))
;; sleep is not effecient, so we wait for the next release to turn this on.
(make-check 'mred:show-status-line "Show status-line?" id id)
(make-check 'mred:verify-exit "Verify exit?" id id)
(make-check 'mred:verify-change-format "Ask before changing save format?" id id)
(make-check 'mred:auto-set-wrap? "Wordwrap editor buffers?" id id)
(make-check 'mred:show-status-line "Show status-line?" id id)
(make-check 'mred:line-offsets "Count line and column numbers from one?" id id)
main))
#f)))