improved keybindings for search
svn: r11668 original commit: cce9d7d6e59e9e38b0ee5a5ec1ee39ad6f940f88
This commit is contained in:
commit
5d4394a043
|
@ -1673,7 +1673,6 @@
|
|||
(define searchable<%> (interface (basic<%>)
|
||||
search
|
||||
search-replace
|
||||
search-skip
|
||||
replace-all
|
||||
|
||||
get-text-to-search
|
||||
|
@ -1985,6 +1984,8 @@
|
|||
|
||||
(define searchable-mixin
|
||||
(mixin (standard-menus<%>) (searchable<%>)
|
||||
(inherit edit-menu:get-show/hide-replace-item)
|
||||
|
||||
(define super-root 'unitiaialized-super-root)
|
||||
|
||||
(define case-sensitive-search? (preferences:get 'framework:case-sensitive-search?))
|
||||
|
@ -2006,12 +2007,26 @@
|
|||
#t)
|
||||
(define/override (edit-menu:create-find?) #t)
|
||||
|
||||
(define/override (edit-menu:find-again-callback menu evt) (search 'forward) #t)
|
||||
(define/override (edit-menu:create-find-again?) #t)
|
||||
(define/override (edit-menu:find-next-callback menu evt) (search 'forward) #t)
|
||||
(define/override (edit-menu:create-find-next?) #t)
|
||||
|
||||
(define/override (edit-menu:find-again-backwards-callback menu evt) (search 'backward) #t)
|
||||
(define/override (edit-menu:create-find-again-backwards?) #t)
|
||||
(define/override (edit-menu:find-previous-callback menu evt) (search 'backward) #t)
|
||||
(define/override (edit-menu:create-find-previous?) #t)
|
||||
|
||||
(define/override (edit-menu:create-show/hide-replace?) #t)
|
||||
(define/override (edit-menu:show/hide-replace-callback a b) (set-replace-visible? (not replace-visible?)))
|
||||
(define/override (edit-menu:show/hide-replace-string)
|
||||
(if replace-visible?
|
||||
(string-constant hide-replace-menu-item)
|
||||
(string-constant show-replace-menu-item)))
|
||||
(define/override (edit-menu:show/hide-replace-on-demand item)
|
||||
(send item enable (not hidden?)))
|
||||
|
||||
(define/override (edit-menu:replace-callback a b) (search-replace))
|
||||
(define/override (edit-menu:create-replace?) #t)
|
||||
(define/override (edit-menu:replace-on-demand item)
|
||||
(send item enable (and (not hidden?) replace-visible?)))
|
||||
|
||||
(define/override (edit-menu:find-case-sensitive-callback menu evt)
|
||||
(set! case-sensitive-search? (not case-sensitive-search?))
|
||||
(preferences:set 'framework:case-sensitive-search? case-sensitive-search?)
|
||||
|
@ -2100,10 +2115,7 @@
|
|||
(unhide-search #f)
|
||||
(send find-edit search searching-direction #t))
|
||||
|
||||
(define/public (search-replace) (skip/replace #t))
|
||||
(define/public (search-skip) (skip/replace #f))
|
||||
|
||||
(define/private (skip/replace replace?)
|
||||
(define/public (search-replace)
|
||||
(let ([text-to-search (get-text-to-search)])
|
||||
(when text-to-search
|
||||
(let ([replacee-start (send text-to-search get-replace-search-hit)])
|
||||
|
@ -2111,9 +2123,8 @@
|
|||
(let ([replacee-end (+ replacee-start (send find-edit last-position))])
|
||||
(send text-to-search begin-edit-sequence)
|
||||
(send text-to-search set-position replacee-end replacee-end)
|
||||
(when replace?
|
||||
(send text-to-search delete replacee-start replacee-end)
|
||||
(copy-over replace-edit 0 (send replace-edit last-position) text-to-search replacee-start))
|
||||
(send text-to-search delete replacee-start replacee-end)
|
||||
(copy-over replace-edit 0 (send replace-edit last-position) text-to-search replacee-start)
|
||||
(let ([str (send find-edit get-text)])
|
||||
(send text-to-search set-searching-state
|
||||
(if (equal? str "") #f str)
|
||||
|
@ -2123,18 +2134,18 @@
|
|||
;; if a relacement has happened.
|
||||
(send text-to-search get-start-position))
|
||||
|
||||
;; move the insertion point to the start of the editor if there are
|
||||
;; more replacements to do starting there
|
||||
|
||||
;; set the selection to the next place to replace
|
||||
(let-values ([(before-caret-hits hits) (send text-to-search get-search-hit-count)])
|
||||
(unless (zero? hits)
|
||||
(unless (send text-to-search get-replace-search-hit)
|
||||
(send text-to-search set-position 0 0))))
|
||||
(unless (send text-to-search get-replace-search-hit)
|
||||
(send text-to-search set-position 0 0))
|
||||
(let ([next-start (send text-to-search get-replace-search-hit)])
|
||||
(when next-start ;; this shouldn't ever matter ...?
|
||||
(send text-to-search set-position next-start (+ next-start (send find-edit last-position)))))))
|
||||
|
||||
(search-hits-changed))
|
||||
(send text-to-search end-edit-sequence)
|
||||
(let ([next-hit (send text-to-search get-replace-search-hit)])
|
||||
(when next-hit
|
||||
(send text-to-search scroll-to-position next-hit)))
|
||||
#t))))))
|
||||
|
||||
(define/private (copy-over src-txt src-start src-end dest-txt dest-pos)
|
||||
|
@ -2215,8 +2226,15 @@
|
|||
(unless (equal? replace-visible? r?)
|
||||
(set! replace-visible? r?)
|
||||
(preferences:set 'framework:replace-visible? r?)
|
||||
(show/hide-replace)
|
||||
(send (edit-menu:get-show/hide-replace-item) set-label
|
||||
(if replace-visible?
|
||||
(string-constant hide-replace-menu-item)
|
||||
(string-constant show-replace-menu-item)))
|
||||
(search-parameters-changed)))
|
||||
|
||||
(define show/hide-replace void)
|
||||
|
||||
(define/private (build-search-gui-in-frame)
|
||||
(unless search-gui-built?
|
||||
(set! search-gui-built? #t)
|
||||
|
@ -2258,6 +2276,12 @@
|
|||
[parent search-panel]
|
||||
[callback (λ (x y) (search 'forward))]
|
||||
[font small-control-font]))
|
||||
(define search-prev-button (new button%
|
||||
[label (string-constant search-previous)]
|
||||
[vert-margin 0]
|
||||
[parent search-panel]
|
||||
[callback (λ (x y) (search 'backward))]
|
||||
[font small-control-font]))
|
||||
|
||||
(define hits-panel (new vertical-panel%
|
||||
[parent search-panel]
|
||||
|
@ -2303,35 +2327,33 @@
|
|||
[vert-margin 0]
|
||||
[parent replace-panel]
|
||||
[font small-control-font]
|
||||
[callback (λ (x y) (search-skip))]))
|
||||
[callback (λ (x y) (search 'forward))]))
|
||||
|
||||
(define show-replace-button
|
||||
(new button%
|
||||
[label (string-constant search-show-replace)]
|
||||
[font small-control-font]
|
||||
[callback (λ (a b)
|
||||
(set-replace-visible? #t)
|
||||
(show/hide-replace))]
|
||||
[callback (λ (a b) (set-replace-visible? #t))]
|
||||
[parent replace-panel]))
|
||||
(define hide-replace-button
|
||||
(new button%
|
||||
[label (string-constant search-hide-replace)]
|
||||
[font small-control-font]
|
||||
[callback (λ (a b)
|
||||
(set-replace-visible? #f)
|
||||
(show/hide-replace))]
|
||||
[callback (λ (a b) (set-replace-visible? #f))]
|
||||
[parent replace-panel]))
|
||||
|
||||
(define (show/hide-replace)
|
||||
(send replace-panel begin-container-sequence)
|
||||
(cond
|
||||
[replace-visible?
|
||||
(send replace-panel change-children (λ (l) all-replace-children))
|
||||
(send replace-panel stretchable-width #t)]
|
||||
[else
|
||||
(send replace-panel change-children (λ (l) (list show-replace-button)))
|
||||
(send replace-panel stretchable-width #f)])
|
||||
(send replace-panel end-container-sequence))
|
||||
(define stupid-internal-definitions-syntax2
|
||||
(set! show/hide-replace
|
||||
(λ ()
|
||||
(send replace-panel begin-container-sequence)
|
||||
(cond
|
||||
[replace-visible?
|
||||
(send replace-panel change-children (λ (l) all-replace-children))
|
||||
(send replace-panel stretchable-width #t)]
|
||||
[else
|
||||
(send replace-panel change-children (λ (l) (list show-replace-button)))
|
||||
(send replace-panel stretchable-width #f)])
|
||||
(send replace-panel end-container-sequence))))
|
||||
|
||||
(define all-replace-children
|
||||
(list replace-canvas
|
||||
|
|
|
@ -360,37 +360,37 @@
|
|||
edit-menu:edit-target-on-demand
|
||||
#f)
|
||||
|
||||
(make-an-item 'edit-menu 'find-again
|
||||
'(string-constant find-again-info)
|
||||
(make-an-item 'edit-menu 'find-next
|
||||
'(string-constant find-next-info)
|
||||
'(λ (item control) (void))
|
||||
#\g
|
||||
'(get-default-shortcut-prefix)
|
||||
'(string-constant find-again-menu-item)
|
||||
'(string-constant find-next-menu-item)
|
||||
edit-menu:edit-target-on-demand
|
||||
#f)
|
||||
(make-an-item 'edit-menu 'find-again-backwards
|
||||
'(string-constant find-again-backwards-info)
|
||||
(make-an-item 'edit-menu 'find-previous
|
||||
'(string-constant find-previous-info)
|
||||
'(λ (item control) (void))
|
||||
#\g
|
||||
'(cons 'shift (get-default-shortcut-prefix))
|
||||
'(string-constant find-again-backwards-menu-item)
|
||||
'(string-constant find-previous-menu-item)
|
||||
edit-menu:edit-target-on-demand
|
||||
#f)
|
||||
(make-an-item 'edit-menu 'replace-and-find-again
|
||||
'(string-constant replace-and-find-again-info)
|
||||
'(λ (item control) (void))
|
||||
#\r
|
||||
'(get-default-shortcut-prefix)
|
||||
'(string-constant replace-and-find-again-menu-item)
|
||||
edit-menu:edit-target-on-demand
|
||||
#f)
|
||||
(make-an-item 'edit-menu 'replace-and-find-again-backwards
|
||||
'(string-constant replace-and-find-again-backwards-info)
|
||||
(make-an-item 'edit-menu 'show/hide-replace
|
||||
'(string-constant show/hide-replace-info)
|
||||
'(λ (item control) (void))
|
||||
#\r
|
||||
'(cons 'shift (get-default-shortcut-prefix))
|
||||
'(string-constant replace-and-find-again-backwards-menu-item)
|
||||
edit-menu:edit-target-on-demand
|
||||
'(string-constant show-replace-menu-item)
|
||||
on-demand-do-nothing
|
||||
#f)
|
||||
(make-an-item 'edit-menu 'replace
|
||||
'(string-constant replace-info)
|
||||
'(λ (item control) (void))
|
||||
#\r
|
||||
'(get-default-shortcut-prefix)
|
||||
'(string-constant replace-menu-item)
|
||||
on-demand-do-nothing
|
||||
#f)
|
||||
(make-an-item 'edit-menu 'replace-all
|
||||
'(string-constant replace-all-info)
|
||||
|
@ -398,7 +398,7 @@
|
|||
#f
|
||||
'(get-default-shortcut-prefix)
|
||||
'(string-constant replace-all-menu-item)
|
||||
edit-menu:edit-target-on-demand
|
||||
on-demand-do-nothing
|
||||
#f)
|
||||
|
||||
(make-a-checkable-item 'edit-menu 'find-case-sensitive
|
||||
|
|
|
@ -901,10 +901,6 @@ framework)) @(require (for-label scheme/gui)) @(require
|
|||
are no more search hits after the insertion point, but there are
|
||||
search hits before it).
|
||||
}
|
||||
@defmethod[(search-skip) boolean?]{
|
||||
Just like @method[frame:searchable<%> search-replace],
|
||||
but does not do the replace.
|
||||
}
|
||||
@defmethod[(replace-all) void?]{
|
||||
Loops through the text from the beginning to the end, replacing
|
||||
all occurrences of the search string with the contents of the replace
|
||||
|
|
Loading…
Reference in New Issue
Block a user