• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Sierra update, another broken script!
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Sierra update, another broken script!


  • Subject: Sierra update, another broken script!
  • From: Brian Christmas <email@hidden>
  • Date: Fri, 6 Oct 2017 07:13:31 +1100

G’day folks.

I thought I’d finished my App, but the latest Sierra has broken my Scroll Field
scrolling.

The present script takes 1 minute to trim excessive paragraphs, and a whopping
10 minutes or more to simly scroll to the end.

Used to be lightning fast.

I’ve found this recommended method to now use, but canot work out how to
re-write it for ASObC.

- (void)textDidEndEditing:(NSNotification *)notification {
    NSTextView *text = [notification object];
    unsigned whyEnd = [[[notification userInfo] objectForKey:@"NSTextMovement"]
unsignedIntValue];
    NSTextView *newKeyView = text;

    // Unscroll the previous text.
    [text scrollRangeToVisible:NSMakeRange(0, 0)];

    if (whyEnd == NSTabTextMovement) {
        newKeyView = (NSTextView *)[text nextKeyView];
    } else if (whyEnd == NSBacktabTextMovement) {
        newKeyView = (NSTextView *)[text previousKeyView];
    }

    // Set the new key view and select its whole contents.
    [[text window] makeFirstResponder:newKeyView];
    [newKeyView setSelectedRange:NSMakeRange(0, [[newKeyView textStorage]
length])];
}

My old script is below, and the handler ’ScrollToEnd’  literally freezes on
lines 2 & 3. Up to 15 minutes.

AnyBody kind enough to decipher the above, please?

As well, is there a faster way of removing excess lines from the top of the
field, leaving rthe first 4 lines alone?

Regards,

Santa

                This  takes 1 minute

                        if (my reDrawTheText) then
                                 set p to 1
                                set (my theYear) to year of (current date)
                                set adjustRange to (((my clientMax as integer)
* 10) + 5) as integer
                                set textStorage to mainMessagesView's
textStorage()
                                set textStorageString to mainMessagesView's
|string|()
                                set theRange to (count of (textStorageString's
paragraphs)) as integer
                                set theOffset to (count of paragraph 1 of
textStorageString) + (count of paragraph 2 of textStorageString) + (count of
paragraph 3 of textStorageString) + 4
                                        if theRange > (adjustRange + 40) then
                                        set c to current date
                                        set theCount to 0
                                         try
                                                set y to (theRange -
adjustRange - 8)
                                                if y > 14 then
                                                        repeat with x from 5 to
y
                                                                try
                                                                        set
theCount to theCount + (count of characters of paragraph x of
textStorageString) + 1
                                                                on error errmsg
                                                                        if (my
runForOz) then tell application "System Events" to display dialog errmsg giving
up after 20
                                                                        exit
repeat
                                                                end try
                                                        end repeat
                                                end if
                                        end try
                                        set textStorage to mainMessagesView's
textStorage()
                                        tell textStorage to
replaceCharactersInRange:{theOffset, theCount} withString:""
                                        set textStorageString to
mainMessagesView's |string|() as text
                                        set theRange to (count of
(textStorageString's paragraphs)) as integer
                                end if
                                set textStorageString to mainMessagesView's
|string|() as text
                                set theRange to (count of (textStorageString's
paragraphs)) as integer
                                 if theRange > adjustRange then
                                        repeat
                                                set textStorage to
mainMessagesView's textStorage()
                                                set textStorageString to
mainMessagesView's |string|() as text
                                                set theRange to (count of
(textStorageString's paragraphs)) as integer
                                                set textStorageLength to
((count of paragraph 5 of textStorageString) + 1) as integer
                                                set theText to (paragraph 5 of
textStorageString) as text
                                                try
                                                        if ((word 1 of theText)
as text) is in {"eMail", "ftp"} and theRange ≤ adjustRange then exit repeat
                                                end try
                                                tell textStorage to
replaceCharactersInRange:{theOffset, textStorageLength} withString:""
                                        end repeat
                                end if

        This takes 10-15 minutes, for 2000 paragraphs

        on scrollToEnd()
                try
                        say 1
                        set textStorage to mainMessagesView's textStorage()
                        say 2
                        set newTextLength to textStorage's |length|() as integer
                        say 3
                        if newTextLength > 40 then mainMessagesView's
scrollRangeToVisible:{location:newTextLength, |length|:0}
                        say 4
                end try
        end scrollToEnd

Attachment: smime.p7s
Description: S/MIME cryptographic signature

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
AppleScript-Users mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:
Archives: http://lists.apple.com/archives/applescript-users

This email sent to email@hidden

  • Prev by Date: Smile
  • Next by Date: Another Google Calendar Anomaly
  • Previous by thread: Smile
  • Next by thread: Another Google Calendar Anomaly
  • Index(es):
    • Date
    • Thread