...
original commit: b16379321a741c207f7728bd4944c0fb2d1015d0
This commit is contained in:
parent
52f16a3712
commit
053b5eb67c
|
@ -17,7 +17,6 @@
|
|||
editing-this-file?
|
||||
local-edit-sequence?
|
||||
run-after-edit-sequence
|
||||
default-auto-wrap?
|
||||
get-top-level-window
|
||||
locked?
|
||||
on-close))
|
||||
|
@ -172,12 +171,10 @@
|
|||
(get-top-level-window)])
|
||||
(finder:put-file f d)))])
|
||||
|
||||
(public
|
||||
[default-auto-wrap? (lambda () #t)])
|
||||
(inherit auto-wrap)
|
||||
|
||||
(sequence
|
||||
(apply super-init args)
|
||||
(auto-wrap (default-auto-wrap?)))))
|
||||
(apply super-init args))))
|
||||
|
||||
|
||||
(define -keymap<%> (interface (basic<%>) get-keymaps))
|
||||
(define keymap-mixin
|
||||
|
@ -193,6 +190,30 @@
|
|||
(for-each (lambda (k) (send keymap chain-to-keymap k #f))
|
||||
(get-keymaps))))))
|
||||
|
||||
(define autowrap<%> (interface (basic<%>) default-auto-wrap?))
|
||||
(define autowrap-mixin
|
||||
(mixin (basic<%>) (autowrap<%>) args
|
||||
(public
|
||||
[default-auto-wrap? (lambda () #t)])
|
||||
|
||||
(rename [super-on-close on-close])
|
||||
(override
|
||||
[on-close
|
||||
(lambda ()
|
||||
(remove-callback)
|
||||
(super-on-close))])
|
||||
|
||||
(inherit auto-wrap)
|
||||
(sequence
|
||||
(apply super-init args)
|
||||
(auto-wrap (default-auto-wrap?)))
|
||||
(private
|
||||
[remove-callback
|
||||
(preferences:add-callback
|
||||
'framework:auto-set-wrap?
|
||||
(lambda (p v)
|
||||
(auto-wrap v)))])))
|
||||
|
||||
(define file<%> (interface (-keymap<%>)))
|
||||
(define file-mixin
|
||||
(mixin (-keymap<%>) (file<%>) args
|
||||
|
|
|
@ -87,12 +87,14 @@
|
|||
(define-signature framework:editor^
|
||||
(basic<%>
|
||||
keymap<%>
|
||||
autowrap<%>
|
||||
info<%>
|
||||
file<%>
|
||||
backup-autosave<%>
|
||||
|
||||
basic-mixin
|
||||
keymap-mixin
|
||||
autowrap-mixin
|
||||
info-mixin
|
||||
file-mixin
|
||||
backup-autosave-mixin))
|
||||
|
|
|
@ -64,52 +64,43 @@
|
|||
(letrec ([end-pos (send edit last-position)]
|
||||
[find-nonwhite
|
||||
(lambda (pos d)
|
||||
(let ([c (send edit get-character pos)])
|
||||
(cond
|
||||
[(char=? #\newline c) pos]
|
||||
[(or (and (< pos 0) (= d -1))
|
||||
(and (> pos end-pos) (= d 1)))
|
||||
(if (= d -1)
|
||||
-1
|
||||
end-pos)]
|
||||
[(char-whitespace? c)
|
||||
(find-nonwhite (+ pos d) d)]
|
||||
[else pos])))])
|
||||
(let loop ([pos pos])
|
||||
(if (or (and (= d -1)
|
||||
(= pos 0))
|
||||
(and (= pos end-pos)
|
||||
(= d 1)))
|
||||
pos
|
||||
(let ([c (send edit get-character pos)])
|
||||
(cond
|
||||
[(char=? #\newline c) pos]
|
||||
[(char-whitespace? c) (loop (+ pos d))]
|
||||
[else pos])))))])
|
||||
(let ([sel-start (send edit get-start-position)]
|
||||
[sel-end (send edit get-end-position)])
|
||||
(when (= sel-start sel-end)
|
||||
(let ([start (+ (find-nonwhite (- sel-start 1) -1)
|
||||
(if leave-one? 2 1))]
|
||||
(let ([start
|
||||
(if (= sel-start 0)
|
||||
0
|
||||
(+ (find-nonwhite (- sel-start 1) -1) 1))]
|
||||
[end (find-nonwhite sel-start 1)])
|
||||
(if (< start end)
|
||||
(begin
|
||||
(send edit begin-edit-sequence)
|
||||
(send edit delete start end)
|
||||
(if (and leave-one?
|
||||
(not (char=? #\space
|
||||
(send edit get-character
|
||||
(sub1 start)))))
|
||||
(send edit insert " " (sub1 start) start))
|
||||
(send edit set-position start)
|
||||
(send edit end-edit-sequence))
|
||||
(when leave-one?
|
||||
(let ([at-start
|
||||
(send edit get-character sel-start)]
|
||||
[after-start
|
||||
(send edit get-character
|
||||
(sub1 sel-start))])
|
||||
(cond
|
||||
[(char-whitespace? at-start)
|
||||
(if (not (char=? at-start #\space))
|
||||
(send edit insert " " sel-start
|
||||
(add1 sel-start)))
|
||||
(send edit set-position (add1 sel-start))]
|
||||
[(char-whitespace? after-start)
|
||||
(if (not (char=? after-start #\space))
|
||||
(send edit insert " " (sub1 sel-start)
|
||||
sel-start))]
|
||||
[else
|
||||
(send edit insert " ")])))))))))]
|
||||
(send edit begin-edit-sequence)
|
||||
(cond
|
||||
;; funny case when to delete the newline
|
||||
[(and leave-one?
|
||||
(= (+ start 1) end)
|
||||
(< end end-pos)
|
||||
(char=? #\space (send edit get-character start))
|
||||
(char=? #\newline (send edit get-character end)))
|
||||
(send edit delete end (+ end 1))]
|
||||
[else
|
||||
(send edit delete start end)
|
||||
(cond
|
||||
[leave-one?
|
||||
(send edit insert #\space start)
|
||||
(send edit set-position (+ start 1))]
|
||||
[else
|
||||
(send edit set-position start)])])
|
||||
(send edit end-edit-sequence))))))]
|
||||
|
||||
[collapse-space
|
||||
(lambda (edit event)
|
||||
|
|
|
@ -310,26 +310,9 @@
|
|||
(public
|
||||
[initial-autowrap-bitmap (lambda () (icon:get-autowrap-bitmap))])
|
||||
|
||||
(rename [super-on-close on-close])
|
||||
(override
|
||||
[on-close
|
||||
(lambda ()
|
||||
(remove-callback)
|
||||
(super-on-close))])
|
||||
|
||||
(sequence
|
||||
(apply super-init args)
|
||||
(set-autowrap-bitmap (initial-autowrap-bitmap)))
|
||||
|
||||
(private
|
||||
[remove-callback
|
||||
(preferences:add-callback
|
||||
'framework:auto-set-wrap?
|
||||
(lambda (p v)
|
||||
(auto-wrap v)))])
|
||||
(inherit auto-wrap)
|
||||
(sequence
|
||||
(auto-wrap (preferences:get 'framework:auto-set-wrap?)))))
|
||||
(set-autowrap-bitmap (initial-autowrap-bitmap)))))
|
||||
|
||||
(define searching<%> (interface (editor:keymap<%> basic<%>)))
|
||||
(define searching-mixin
|
||||
|
@ -470,7 +453,8 @@
|
|||
(define basic% (basic-mixin (editor:basic-mixin text%)))
|
||||
(define -keymap% (editor:keymap-mixin basic%))
|
||||
(define return% (return-mixin -keymap%))
|
||||
(define file% (editor:file-mixin -keymap%))
|
||||
(define autowrap% (editor:autowrap-mixin -keymap%))
|
||||
(define file% (editor:file-mixin autowrap%))
|
||||
(define clever-file-format% (clever-file-format-mixin file%))
|
||||
(define backup-autosave% (editor:backup-autosave-mixin clever-file-format%))
|
||||
(define searching% (searching-mixin backup-autosave%))
|
||||
|
|
Loading…
Reference in New Issue
Block a user