Impossibile stampare il punto ('.') dalla semplice macchina virtuale AppleScript a VMware Fusion

2

Quindi ho un semplice AppleScript che penso dovrebbe digitare un mazzo di chiavi, ma il carattere del periodo non viene stampato nelle macchine virtuali di VMware Fusion. Questo è strano perché la mia chiave del periodo (. ) entra in un periodo come normale in quelle VM.

MCVE

Ecco la mia ultima versione che ho provato:

on run {input, parameters}

    set file_text to "this another test: ... hello ..."
    delay 0.3
    repeat with ch in file_text
        tell application "System Events" to keystroke ch
        delay 0.1
    end repeat

    return input
end run

L'ho creato come servizio in Automator. Eseguo questo andando alla mia applicazione, quindi nella barra del titolo seleziono Servizi - > QuickType.

Comportamento previsto

Dovrebbe semplicemente digitare il testo this another test: ... hello ... . In molte applicazioni, fa esattamente questo.

True Behavior

In una VM di FreeBSD, premendo . si esegue il rendering di un punto nella shell (come normale). Quando viene eseguito lo script precedente, tuttavia, i periodi sembrano backspaces. Risultato finale:

InunamacchinavirtualeWindows,.esegueilrenderingdiunperiodonelBlocconote(comenormale).Quandovieneeseguitoloscriptprecedente,tuttavia,iperiodisembranoessereignoraticompletamente.Risultatofinale:

Domande

C'è un modo per really emulare premendo i tasti da una stringa di caratteri in AppleScript? Perché chiaramente il modo sopra non lo sta facendo.

Qualcuno sa perché sta accadendo il comportamento che ho descritto sopra? Perché funziona in TextMate e Terminal e in altre app Mac, ma non in Fusion VM?

    
posta Greg Schmit 10.04.2018 - 00:53
fonte

1 risposta

1

Non capisco perché questo non funzioni, tuttavia ho una soluzione. Ho capito che fare tell application "System Events" to key code 47 invia correttamente un periodo.

Così, ho avvolto la mia lettura in un condizionale come questo:

on run {input, parameters}

    #set input_file to "/path/to/file"
    #set file_text to read input_file
    set file_text to "test: ... hello ..."
    delay 0.3
    repeat with ch in file_text
        if ch as string = "." then
            tell application "System Events" to key code 47
        else
            tell application "System Events" to keystroke ch
        end if
        delay 0.1
    end repeat

    return input
end run
    
risposta data 20.07.2018 - 02:52
fonte

Leggi altre domande sui tag