TL;DR: No se puede script el Diccionario.
Siga leyendo para conocer mi viaje de descubrimiento. Empecé mirando el script y comprobando errores antes de descubrir que Dictionary no es scriptable. Ah bueno Espero que mi ayuda no haya sido en vano.
Espero haber entendido bien la cuestión. Está intentando ejecutar este script desde Safari a través del menú script de la barra de menús?
Lo he colocado en ~/Library/scripts/.
Sólo con ver tu script, parece que vas por buen camino con tu código. Aquí hay algunos problemas que veo en su código que podría estar causando errores:
-
En on run
no tiene un valor de retorno especificado. Además, si no está pasando ninguna entrada o parámetro al script, puede simplemente eliminar el parámetro {input, parameters}
del on run
línea. Corrígeme, si me estoy perdiendo algo aquí, de cómo llamas al script. Tal vez puedas detallar donde colocas el script.
-
La línea if first character of (input as text) is not in "abcdefghijklmnopqrstuvwxyz" then
debe cambiarse por if the first character of input is not in "abcdefghijklmnopqrstuvwxyz" then
para comparar directamente el primer carácter de la entrada, sin necesidad de convertirlo en texto.
-
La línea open location "dict://" & input
debe ir dentro de un tell application "Dictionary"
para asegurarse de que la aplicación Diccionario es el objetivo.
-
La línea set theTargetFilename to quoted form of (POSIX path of (path to documents folder as string) & theDictionaryHistoryFilename)
debe cambiarse por set theTargetFilename to quoted form of (POSIX path of (path to documents folder) & theDictionaryHistoryFilename)
desde el path to documents folder
ya devuelve una ruta POSIX.
-
La línea do shell script "echo "" & input & "" >> " & theTargetFilename
debe cambiarse por do shell script "echo " & quoted form of input & " >> " & theTargetFilename
para tratar correctamente las palabras introducidas con espacios o caracteres especiales.
-
Como mencionó red_menace, el on error
al final del archivo try
bloque. Si se produce un error durante la ejecución del código dentro del bloque try
bloque, el on error
y se mostrarán el mensaje y el número de error en un cuadro de diálogo. Puede personalizar el mensaje de error y el formato según sea necesario. También puede añadir varios on error
para manejar tipos específicos de errores si es necesario. Por ejemplo, puede añadir un on error number -1712
para gestionar los errores que se producen cuando la aplicación Diccionario no está abierta.
Con esto el script revisado con estas correcciones es:
on run
try
considering diacriticals
if the first character of input is not in "abcdefghijklmnopqrstuvwxyz" then
tell current application
activate
display dialog "The selected text starts with a non-valid character." & return & return & ¬
"Make a different selection and try again." buttons {"OK"} default button 1 ¬
with title "Dictionary Look Up Logging Service"
end tell
return
end if
end considering
tell application "Dictionary"
activate
open location "dict://" & input
set theDictionaryHistoryFilename to "Dictionary Look Up Service History Log File.txt"
set theTargetFilename to quoted form of (POSIX path of (path to documents folder) & theDictionaryHistoryFilename)
set foundSelectedWord to (do shell script "grep '^" & input & "$' " & theTargetFilename & " > /dev/null; echo $?") as integer
if foundSelectedWord is greater than 0 then
do shell script "echo " & quoted form of input & " >> " & theTargetFilename
end if
end tell
display dialog "Definition and example for " & input & ":" & return & return & ¬
(do shell script "osascript -e 'tell application \"Dictionary\" to ¬
set d to first result whose title = \"" & input & "\"' -e 'get \" Definition: \" & definition of d & return & return & \" Example: \" & (example of d)'")
on error errorMessage number errorNumber
tell current application
activate
display dialog errorMessage & return & return & "Error Number: " & errorNumber buttons {"OK"} default button 1 ¬
with title "Dictionary Look Up Logging Service"
end tell
end try
end run
Este código revisado debería comprobar correctamente si hay caracteres no válidos, abrir la aplicación Diccionario, buscar la palabra introducida, guardarla en un archivo, formatear el resultado y mostrarlo en un cuadro de diálogo.
No conseguí que se ejecutara ya que no estaba seguro de cómo se ejecuta su script existente, pero también puede ser que Dictionary no sea scriptable como sugiere red_menace. Así que hice otra búsqueda y encontré esta fuente :
Puede obtener una primera visión general de la situación mediante el programa script Editor de Apple (está en /Aplicaciones/AppleScript ): elija Archivo > Abrir diccionario, que muestra una lista de aplicaciones presentes en su ordenador que el Editor script cree que son scriptables. No obstante, debería mirar esta lista con un poco de recelo y confirmar que una aplicación en particular realmente es o no scriptable. Para ello, seleccione Ventana > Biblioteca y, en la ventana Biblioteca, pulse el botón el botón "+" (o pulse Control y haga clic para obtener el menú contextual, y seleccionar Añadir). Aparecerá un cuadro de diálogo estándar Abrir. Navegue hasta una aplicación, selecciónela y pulse Abrir. Ocurrirá una de estas dos cosas:
La aplicación no es scriptable
Puede aparecer un cuadro de diálogo de error que diga "No se puede añadir la aplicación o extensión porque no es scriptable". En este caso, la aplicación definitivamente no es scriptable y ese es el final de eso.
La aplicación se añade a la ventana Biblioteca
Esto significa que el aplicación podría ser scriptable. Pero podría tener un falso positivo. Para averiguarlo, haz doble clic en el listado de la aplicación en la Biblioteca Biblioteca. Esto debería abrir la pantalla del diccionario de la aplicación (ver Figura 2-2). Incluso si lo hace, es posible que tenga un falso positivo. Explore el diccionario, haciendo clic en las distintas Suites (en la primera columna del navegador) y mirando a través de las clases y comandos (en la segunda columna) para asegurarse de que éstos realmente hacen algo apropiado para la función de esa aplicación en particular.
Un buen ejemplo es la aplicación llamada, apropiadamente, Diccionario (ubicada en /Aplicaciones ). En script Editor, puede abrir la pantalla del diccionario de la aplicación Diccionario; este diccionario tiene unas dos docenas de entradas. Pero es un falso positivo; el Diccionario no es realmente scriptable.