Mailing List Archive: 49091 messages
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

[REBOL] Re: dirty editor

From: g:santilli:tiscalinet:it at: 29-Jun-2002 21:08

Hi Jim, On Friday, June 28, 2002, 5:01:48 PM, you wrote: JC> put: func [str num][ JC> if my-area <> system/view/focal-face [return] JC> if not system/view/caret [return] JC> insert system/view/caret str JC> system/view/caret: skip system/view/caret num JC> show my-area JC> ] How about: put: func [str] [ if my-area <> system/view/focal-face [return] if not system/view/caret [return] system/view/caret: insert system/view/caret str show my-area ] JC> My question is, can I get this into a block or series? You'd better change your Area's feel; it handles keys this way: engage: func [face act event][ switch act [ down [ either not-equal? face view*/focal-face [ focus face view*/caret: offset-to-caret face event/offset ] [ view*/highlight-start: view*/highlight-end: none view*/caret: offset-to-caret face event/offset ] show face ] over [ if not-equal? view*/caret offset-to-caret face event/offset [ if not view*/highlight-start [view*/highlight-start: view*/caret] view*/highlight-end: view*/caret: offset-to-caret face event/offset show face ] ] key [edit-text face event get in face 'action] ] ] i.e. calling the EDIT-TEXT function that you can find in the CTX-TEXT object:
>> probe get in ctx-text 'edit-text
func [ face event action /local key set-caret liney hi swap-text tmp tmp2 page-up page-down ][ key: event/key if flag-face? face hide swap-text: [ tmp: face/text face/text: face/data face/data: tmp view*/caret: either error? try [index? view*/caret] [tail face/text] [ at face/text index? view*/caret ] ] if word? key [ either event/shift [ hi: view*/caret if not view*/highlight-start [view*/highlight-start: hi] ] [unlight-text] tmp: caret-to-offset face view*/caret textinfo face view*/line-info view*/caret liney: view*/line-info/size/y hi: event/shift ] if char? key [ either find keys-to-insert key [insert-char face key] [key: select keymap key] ] if word? key [ set-caret: [view*/caret: offset-to-caret face tmp] page-up: [ tmp/y: tmp/y - face/size/y if not head? view*/line-info/start set-caret ] page-down: [ tmp/y: tmp/y + face/size/y if not tail? offset-to-caret face tmp set-caret ] switch key [ back-char [ if all [not delete-selected-text not head? view*/caret] [ either event/control [ tmp2: view*/caret remove/part view*/caret: back-word tmp2 tmp2 ] [ remove view*/caret: back view*/caret ] ] face/dirty?: true ] del-char [ if all [not delete-selected-text not tail? view*/caret] [ either event/control [ remove/part view*/caret next-word view*/caret ] [ remove view*/caret ] ] face/dirty?: true ] up [ either event/control page-up [ tmp/y: tmp/y - liney if not head? view*/line-info/start set-caret ] ] down [ either event/control page-down [ tmp/y: tmp/y + liney if not tail? offset-to-caret face tmp set-caret ] ] home [ view*/caret: either event/control [head view*/caret] [beg-of-line view*/caret] ] end [ view*/caret: either event/control [tail view*/caret] [end-of-line view*/caret] ] left [ if not head? view*/caret [ view*/caret: either event/control [back-word view*/caret] [back view*/caret] ] ] right [ if not tail? view*/caret [ view*/caret: either event/control [next-word view*/caret] [next view*/caret] ] ] page-up page-up page-down page-down enter [ either flag-face? face return [ if flag-face? face hide swap-text action face face/data if flag-face? face tabbed [focus next-field face] exit ] [insert-char face newline] ] copy-text [copy-text face unlight-text] cut-text [copy-text face delete-selected-text face/dirty?: true] paste-text [ delete-selected-text face/line-list: none face/dirty?: true view*/caret: insert view*/caret read clipboard:// ] clear-tail [ remove/part view*/caret end-of-line view*/caret face/dirty?: true ] all-text [hilight-all face] tab-char [ if flag-face? face tabbed [ either in face 'refocus [face/refocus event/shift] [ tmp2: either event/shift [back-field face] [next-field face] if flag-face? face hide swap-text action face face/data focus tmp2 ] exit ] insert-char face tab ] ] ] if hi [view*/highlight-end: view*/caret] if face: view*/focal-face [ if flag-face? face hide [ insert/dup clear face/data "*" length? face/text do swap-text ] textinfo face view*/line-info view*/caret liney: view*/line-info/size/y tmp: caret-to-offset face view*/caret tmp2: face/para/scroll if all [tmp/x <= 0 tmp2/x < 0] [face/para/scroll/x: tmp2/x - tmp/x] if all [tmp/y <= 0 tmp2/y < 0] [face/para/scroll/y: tmp2/y - tmp/y] action: face/size - tmp - face/para/margin if action/x - 5 <= 0 [face/para/scroll/x: tmp2/x + action/x - 5] if action/y - liney <= 0 [face/para/scroll/y: tmp2/y + action/y - liney] show face ] ] Notice the lines with: face/dirty?: true But I still think it would be easier to remove or change the event func instead of having to patch edit-text... Regards, Gabriele. -- Gabriele Santilli <[g--santilli--tiscalinet--it]> -- REBOL Programmer Amigan -- AGI L'Aquila -- REB: http://web.tiscali.it/rebol/index.r