AppleScript: ¿Cómo abrir un archivo en TextEdit, sin traer las otras ventanas de TextEdit al frente?

Tengo el siguiente código AppleScript que abre un archivo específico en TextEdit en una ventana con límites predeterminados:

set targetFilepath to "/Users/Me/Desktop/My Fruit Log.txt"
tell application "TextEdit"
    activate
    open targetFilepath
    set bounds of front window to {279, 111, 1180, 719}
end tell

El problema con este código es que, si tengo otros archivos de TextEdit abiertos, el código también traerá los otros documentos al frente. Sin embargo, me gustaría que solo este archivo de texto específico se traiga al frente.

El código no traerá una ventana de TextEdit minimizada al frente, pero traerá todas las ventanas de TextEdit ocultas, no minimizadas, al frente.

Cuando elimino la activatelínea del código:

tell application "TextEdit"
    open targetFilepath
    set bounds of front window to {279, 111, 1180, 719}
end tell

el archivo se abre, pero su ventana no se pone en primer plano.

OS X El Capitán, versión 10.11.6.


Aquí hay una representación visual de lo que he descrito anteriormente. No tenía ninguna ventana minimizada en mi computadora cuando se tomaron estas capturas de pantalla.

Así es como se ve mi pantalla antes de que se active el AppleScript :

Antes

Así es como quiero que se vea mi pantalla después de que se active el AppleScript :

Después - Deseada

Así es como se ve mi pantalla actualmente después de que se activa AppleScript :

Después - Real


En interés de la divulgación completa, mi código también mueve la ubicación del cursor de TextEdit después de abrir el archivo. No sé si esto afectaría una posible solución, pero aquí está el código adicional que sigue al pasaje anterior ( xes un número entero que se asigna de antemano):

tell application "TextEdit" to activate
    tell application "System Events" to tell process "TextEdit"
        repeat x times
            key code 125
        end repeat
    end tell
end tell
Mi publicación original contenía un error. Por favor, vea la publicación revisada. No se abre ninguna ventana de TextEdit sin activate, ni siquiera la ventana del archivo que se abre.
Entonces, ¿cuál es su solución preferida aquí? ¿Quiere que su secuencia de comandos se ejecute y luego oculte todas las demás ventanas de TextEdit, o quiere que minimice todas las demás ventanas de TextEdit? ¿O no importa? ¿O algo mas?
@Monomeeth No minimizado. Mi solución preferida es que este archivo pase al primer plano y las otras ventanas de TextEdit (que actualmente están en segundo plano cuando se activa el script) permanezcan donde están en segundo plano. Si las otras ventanas se deben traer al frente, entonces, luego, me gustaría que se enviaran al fondo.
No entiendo muy bien cuál es el problema aquí, ¡tal vez necesito otro café! :) Tenga paciencia conmigo, pero, si su secuencia de comandos abre el archivo que desea en TextEdit y lo activa para que aparezca en primer plano, ¿no significa eso de forma predeterminada que todas las demás ventanas de TextEdit están en segundo plano ? ¿O realmente desea cambiar la forma en que se comportan las aplicaciones en macOS (por ejemplo, cuando activa el Finder, todas las ventanas del Finder están visibles pero solo una está en primer plano, al igual que con todas las demás aplicaciones). Entonces, a menos que desee que las ventanas estén cerradas, minimizadas u ocultas, estarán visibles.
@Monomeeth Puede que no esté usando la terminología correcta. Quiero que las otras ventanas estén ocultas. Estas ventanas pueden estar técnicamente "en segundo plano" cuando se activa mi Servicio, pero ya no están ocultas. Creo que usar capturas de pantalla es la mejor manera de mostrar lo que estoy describiendo. Por favor, vea las capturas de pantalla que he agregado a mi publicación.

Respuestas (2)

Creo que el problema que tienes es que has entendido mal lo que realmente está pasando. Déjame intentar explicar...

La primera pregunta a responder es ¿por qué no se veían las ventanas que faltaban en su primera captura de pantalla? Obviamente, el archivo My Fruit Log.txt no estaba visible porque aún no estaba abierto (es decir, su secuencia de comandos aún no se había ejecutado). Pero ¿qué pasa con las otras ventanas? Solo hay tres posibilidades:

  1. TextEdit en realidad no se estaba ejecutando (por lo tanto, no existen ventanas). Esto sería obvio, por lo que no se necesita más discusión.
  2. TextEdit se estaba ejecutando, pero estaba oculto (por lo tanto, todas las ventanas están ocultas). Esto solo significa que ocultó TextEdit de la vista. Ejecutar su secuencia de comandos simplemente la hace visible nuevamente (junto con todas sus ventanas, excepto las que pueden minimizarse).
  3. TextEdit se estaba ejecutando pero todas las ventanas estaban minimizadas. Esto solo significa que TextEdit se está ejecutando pero no hay ventanas visibles porque se han minimizado. Ejecutar su secuencia de comandos hace que la aplicación sea visible y vuelva a estar en primer plano, pero todas las ventanas minimizadas permanecen minimizadas.

En su escenario, es casi seguro que se aplica la Opción 2. Entonces, si bien no es lo que desea escuchar, su secuencia de comandos en realidad funciona de la manera en que se supone que debe hacerlo en macOS. La única forma que se me ocurre en este momento para lograr lo que desea de manera práctica es asegurarse de que su secuencia de comandos minimice todas las demás ventanas, excepto la que acaba de abrir. Por ejemplo, podría lograr esto con el siguiente código:

set targetFilepath to "/Users/Me/Desktop/My Fruit Log.txt"
tell application "TextEdit"
    activate
    open targetFilepath
    tell (windows whose id is not (get id of front window) and visible is true)
        set miniaturized to true
    end tell
    set bounds of front window to {279, 111, 1180, 719}
end tell

Como puede ver, acabo de agregar dos líneas de código. Creo que se explican por sí mismos: simplemente le dicen a TextEdit que minimice cualquier ventana que cumpla con estas dos condiciones (1. no es la ventana frontal y 2. es visible).

Esperemos que esto funcione para usted, pero si no, tal vez a alguien más se le ocurra una solución mejor.

"TextEdit se estaba ejecutando, pero estaba oculto (por lo tanto, todas las ventanas están ocultas)". ¿Está diciendo que hice clic en el botón "Ocultar" que se presenta cuando uno hace clic con el botón derecho en el icono de TextEdit en el Dock? Ese no es el caso. La razón por la que no se ven ventanas de TextEdit en mi primera captura de pantalla es porque se abrió una aplicación diferente (es decir, Preview.app) encima de las ventanas de TextEdit. Además, uso Mission Control, por lo que es completamente posible que tenga, por ejemplo, dos ventanas de TextEdit frente a una ventana de una aplicación diferente y dos ventanas de TextEdit ocultas detrás de esa ventana.
Eso no es exactamente lo que estoy diciendo, pero el ejemplo de Dock que ha usado es una forma en que podría ocultarse. Otra es usar la opción Ocultar otros del menú de aplicaciones de otras aplicaciones. Y otra más es exactamente lo que acaba de describir en su comentario: que estaba oculta porque otras aplicaciones y sus ventanas (Preview.app en su ejemplo de captura de pantalla) estaban en primer plano. Independientemente de cómo se ocultó TextEdit de la vista, cada vez que se vuelve a poner en primer plano, todas sus ventanas se vuelven visibles ( a menos que estén minimizadas), y eso es lo que sucede cuando se ejecuta el script.
Básicamente, lo que estaba tratando de hacer con mi respuesta era explicar por qué su secuencia de comandos resultó en el comportamiento que estaba experimentando y por qué era de esperar. Mi pequeña adición a su código se ocupa de este hecho, pero, por supuesto, puede haber mejores formas de hacer lo que quiere. No he probado la respuesta de @Mockman, pero también puede ser una buena solución. La razón por la que opté por mi enfoque fue que noté que está haciendo muchas preguntas sobre AppleScript y pensé que modificar ligeramente su código existente era un mejor enfoque para usted. Pero solo tú puedes decidir cuál, si es que hay alguno, te conviene.
Entiendo. Agradezco tu respuesta. Fue solo que dijiste: "TextEdit se estaba ejecutando, pero estaba oculto (por lo tanto, todas las ventanas están ocultas)". lo que me confundió.

¿Qué tal esto?

tell application "TextEdit"

    set fWin to front window -- Since you're already using 'front window'
    repeat with w in every window
        set visible of w to false
    end repeat

    -- set visible of window id 189 to true (frontmost on my mac now)
    set visible of fWin to true
    activate
end tell

Estoy seguro de que hay otros métodos para identificar las ventanas. También podría hacer algo como esto... donde se usa una lista de ventanas desde la segunda hasta la última.

tell application "TextEdit"
    -- Assuming that front window should be visible…
    set winList to (windows 2 thru -1)
    repeat with w in winList
        set visible of w to false
    end repeat

    activate
end tell

El término clave aquí es 'visible'.

No consigo que ninguna de estas soluciones funcione correctamente. ¿ Debería mi open targetFilepathlínea ir antes o después de su código? Puse esta línea antes de tu código. No noto ninguna diferencia con tu primera solución; las ventanas ocultas de TextEdit aún se vuelven visibles. Su segunda solución cierra completamente las ventanas ocultas, en lugar de simplemente ocultarlas.
Interesante. En cuanto al segundo guión, no está cerrado. Pero es realmente invisible. Si abre un script y ejecuta comandos como 'visible de la ventana id xxx' o 'id de la tercera ventana', etc., obtendrá resultados diferentes a los que obtendría con una ventana 'cerrada'. Así es como el diccionario define la propiedad de la ventana...visible (boolean) : Whether the window is currently visible.
Respecto al primer guión… sí. Empecé desde el punto en el que todos sus documentos ya estaban abiertos.
Con respecto a su primer comentario, ¿cómo puedo hacer que estas ventanas invisibles no estén ocultas (sin usar AppleScript para hacerlo)? Si minimizo todas las ventanas de todas las aplicaciones, estas ventanas invisibles siguen sin aparecer. Hacer clic con el botón derecho en el icono de TextEdit en el Dock y seleccionar "Mostrar todas las ventanas" tampoco muestra las ventanas invisibles.
Podría ser que no puedas (sin applescript, eso es). Aunque parece un poco raro.