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 <[EMAIL PROTECTED]>  --  REBOL Programmer
Amigan -- AGI L'Aquila -- REB: http://web.tiscali.it/rebol/index.r

-- 
To unsubscribe from this list, please send an email to
[EMAIL PROTECTED] with "unsubscribe" in the 
subject, without the quotes.

Reply via email to