AppleScript: se la selezione è vuota, seleziona tutto

5

Ho realizzato molti moduli AppleScript per TextWrangler ma questa volta ho un problema "stupido": L'idea: se non è selezionato nulla nel testo, imposta la selezione su tutto il testo. Ho fatto molti test, senza alcun risultato. Ecco l'ultimo:

tell application "TextWrangler"
    set my_selection to (get selection)
    set nb_mot to count words of (my_selection)

    if nb_mot < 1 then
        tell application "System Events"
            keystroke "a" using command down
            display dialog "Select all"
            delay 1
        end tell
        set my_selection to (get selection)

        delay 2
        set nb_new_mot to count words of (my_selection)
        display dialog "After select all " & nb_new_mot
    end if

    set var_1 to (replace "(" using "(" searching in my_selection options {search mode:literal, starting at top:false, wrap around:false, backwards:false, case sensitive:false, match words:false, extend selection:false})
end tell

Quando seleziono una parte del testo, va bene. Quando nulla è selezionato, inserisco il blocco if , ma questo mi dà una selezione vuota.

Qualche idea su come posso afferrare solo il testo selezionato quando c'è qualcosa ed eseguire una selezione tutto e copiarlo se non è selezionato alcun testo?

    
posta Peter 17.12.2017 - 23:31
fonte

2 risposte

2

Il motivo per cui ottieni una selezione vuota, cioè quando nulla è selezionato e set my_selection to (get selection) restituisce , ad esempio insertion point before character 1 of text document 1 , il blocco if istruzione fallisce con la

tell application "System Events"
    keystroke "a" using command down

porzione del codice perché TextWrangler non ha lo stato attivo.

Il comando keystroke va a qualsiasi cosa abbia focus, quindi prima di Eventi di sistema keystroke qualcosa, activate il bersaglio per primo, ad esempio:

tell application "TextWrangler"
    activate
    -- delay 1 -- # Uncomment and or adjust the value of the 'delay' command as/if necessary.
    set my_selection to (get selection)
    set nb_mot to count words of (my_selection)

    if nb_mot < 1 then
        tell application "System Events"
            keystroke "a" using command down
            display dialog "Select all"
...

Detto questo, puoi omettere il comando activate e utilizzare il seguente esempio codice AppleScript :

tell application "TextWrangler"
    set my_selection to selection
    set nb_mot to count words of my_selection

    if nb_mot < 1 then
        set my_selection to characters 1 thru -1 of text document 1
        set nb_new_mot to count words of my_selection
    end if

    set var_1 to (replace "(" using "(" searching in my_selection options {search mode:literal, starting at top:false, wrap around:false, backwards:false, case sensitive:false, match words:false, extend selection:false})
end tell

Nota per chiarezza, ho rimosso i comandi display dialog e delay insieme a tutti gli Eventi di sistema codice e altro codice non necessario, poiché la seguente riga di codice è tutto ciò che è necessario se nb_mot is < 1 :

set my_selection to characters 1 thru -1 of text document 1

Il registro eventi e risultato di questo esempio codice AppleScript è:

tell application "TextWrangler"
    get selection
        --> insertion point before character 1 of text document 1
    count every word of insertion point before character 1 of text document 1
        --> 0
    get characters 1 thru -1 of text document 1
        --> characters 1 thru 499 of text document 1
    count every word of characters 1 thru 499 of text document 1
        --> 70
    replace "(" using "(" searching in characters 1 thru 499 of text document 1 options {search mode:literal, starting at top:false, wrap around:false, backwards:false, case sensitive:false, match words:false, extend selection:false}
        --> 3
end tell
Result:
3

Come puoi vedere, sostituisce il tre ( in:

set var_1 to (replace "(" using "(" searching in my_selection options {search mode:literal, starting at top:false, wrap around:false, backwards:false, case sensitive:false, match words:false, extend selection:false})
    
risposta data 18.12.2017 - 00:17
fonte
2

Funziona per me usando l'ultima versione di Sierra

property currentSelection : ""
property selectAll : ""
property oldClipboard : ""

copy (the clipboard) to oldClipboard

tell application "TextWrangler"
    set currentSelection to contents of selection
    if currentSelection is not "" then
        set the clipboard to currentSelection
    else
        tell its document 1 -- assuming the document in question is document 1
            select every text
        end tell
        set selectAll to contents of selection
        set the clipboard to selectAll
    end if
end tell
    
risposta data 18.12.2017 - 01:19
fonte

Leggi altre domande sui tag