No se puede imprimir el período ('.') del simple AppleScript a la máquina virtual VMware Fusion

2

Tengo un simple AppleScript que creo que debería escribir un montón de teclas, pero el carácter de punto no se imprime en las máquinas virtuales de VMware Fusion. Esto es extraño porque mi clave de período (. ) ingresa un período como el normal en esas máquinas virtuales.

MCVE

Aquí está mi última versión que probé:

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

Construí esto como un servicio en Automator. Ejecuto esto yendo a mi aplicación, luego en la barra de título selecciono Servicios - > quicktype.

Comportamiento esperado

Simplemente debe escribir el texto this another test: ... hello ... . En muchas aplicaciones, hace exactamente eso.

Comportamiento verdadero

En una máquina virtual de FreeBSD, al presionar . se muestra un período en el shell (como normal). Sin embargo, cuando se ejecuta la secuencia de comandos anterior, los puntos parecen retrocesos. Resultado final:

EnunamáquinavirtualdeWindows,.representaunpuntoenelBlocdenotas(comoesnormal).Sinembargo,cuandoseejecutaelscriptanterior,losperiodosparecenignorarseporcompleto.Resultadofinal:

Preguntas

¿Hay una manera de realmente emular presionar las teclas de una cadena de caracteres en AppleScript? Porque claramente la forma anterior no está haciendo eso.

¿Alguien sabe por qué ocurre el comportamiento que describí anteriormente? ¿Por qué funciona esto en TextMate y Terminal, y en otras aplicaciones mac, pero no en las máquinas virtuales de Fusion?

    
pregunta Greg Schmit 10.04.2018 - 00:53

1 respuesta

1

No entiendo por qué esto no funciona, sin embargo, tengo una solución. Me di cuenta de que hacer tell application "System Events" to key code 47 envía un período correctamente.

Entonces, envolví mi lectura en un condicional como este:

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
    
respondido por el Greg Schmit 20.07.2018 - 02:52

Lea otras preguntas en las etiquetas