Quiero recrear exactamente macOS del Texto incorporado Al Discurso de método abreviado de teclado cuentan con AppleScript. Cuando digo "exactamente", quiero decir "exactamente".
El construido-en opción se puede encontrar en las Preferencias del Sistema → Dictado Y Habla → Texto a Voz:
Aquí está la descripción de esta función:
Configurar una combinación de teclas para hablar de texto seleccionado.
El uso de esta combinación de teclas para escuchar su equipo hablan de texto seleccionado. Si el ordenador está hablando, presione las teclas para detener.
La razón por la que quiero volver a esta función (en lugar de simplemente utilizando) es porque está libre de errores; a veces funciona, pero otras veces, presione el método abreviado de teclado y no pasa nada. Si I código manualmente en AppleScript, tengo la esperanza de que el proceso será más fiable.
Entiendo cómo iniciar y detener el Discurso en AppleScript, como se explica aquí.
Pero me gustaría usar el mismo método abreviado de teclado, y por lo tanto el mismo .scpt archivo, tanto para iniciar y detener el Discurso, reflejo de la funcionalidad de la incorporada en el Discurso de método abreviado de teclado.
Estoy usando FastScripts para ejecutar el .scpt archivo por un atajo de teclado.
Si de la misma .scpt archivo es el encargado de parada y de arranque de la Voz, la secuencia de comandos requiere de una declaración de si en la parte superior de la AppleScript, o algo similar, para comprobar inmediatamente si el Discurso es que actualmente se habla o no se habla, antes de que el script pueda continuar. No sé cómo implementar esta comprobación, o si es que es posible.
Pero, he aquí lo que tengo:
if <This is where I need your help, Ask Different> then
say "" with stopping current speech
error number -128 -- quits the AppleScript
end if
-- Back up original clipboard contents:
set savedClipboard to my fetchStorableClipboard()
-- Copy selected text to clipboard:
tell application "System Events" to keystroke "c" using {command down}
delay 1 -- Without this, the clipboard may have stale data.
set theSelectedText to the clipboard
-- Restore original clipboard:
my putOnClipboard:savedClipboard
-- Speak the selected text:
say theSelectedText waiting until completion no
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use framework "AppKit"
on fetchStorableClipboard()
set aMutableArray to current application's NSMutableArray's array() -- used to store contents
-- get the pasteboard and then its pasteboard items
set thePasteboard to current application's NSPasteboard's generalPasteboard()
-- loop through pasteboard items
repeat with anItem in thePasteboard's pasteboardItems()
-- make a new pasteboard item to store existing item's stuff
set newPBItem to current application's NSPasteboardItem's alloc()'s init()
-- get the types of data stored on the pasteboard item
set theTypes to anItem's types()
-- for each type, get the corresponding data and store it all in the new pasteboard item
repeat with aType in theTypes
set theData to (anItem's dataForType:aType)'s mutableCopy()
if theData is not missing value then
(newPBItem's setData:theData forType:aType)
end if
end repeat
-- add new pasteboard item to array
(aMutableArray's addObject:newPBItem)
end repeat
return aMutableArray
end fetchStorableClipboard
on putOnClipboard:theArray
-- get pasteboard
set thePasteboard to current application's NSPasteboard's generalPasteboard()
-- clear it, then write new contents
thePasteboard's clearContents()
thePasteboard's writeObjects:theArray
end putOnClipboard:
(Originalmente, tenía el deseo de la AppleScript para hablar the clipboard
, pero luego me di cuenta de que era sobrescribir el original el contenido del portapapeles. Así que, de hecho, quiero que el AppleScript para hablar el contenido de la theSelectedText
variable, como se muestra en el código anterior.)