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

2

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 también. Sin embargo, me gustaría que solo este archivo de texto específico aparezca en primer plano.

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 línea activate 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 Capitan, versión 10.11.6.

Aquí hay una representación visual de lo que he descrito anteriormente. Tuve cero ventanas minimizadas en mi computadora cuando se tomaron estas capturas de pantalla.

Esto es lo que parece mi pantalla antes de que se active AppleScript :

EstoesloquequieroparaquemipantallaseveacomodespuésdequeseactiveelAppleScript:

EstoesloquemipantallaactualmenteparecedespuésdequeseactiveelAppleScript:

Eninterésdeladivulgacióncompleta,micódigotambiénmuevelaubicacióndelcursorTextEditdespuésdeabrirelarchivo.Noséqueestoafectaríaunasoluciónpotencial,peroaquíestáelcódigoadicionalquesiguealpasajeanterior(xesunnúmeroenteroqueseasignadeantemano):

tellapplication"TextEdit" to activate
    tell application "System Events" to tell process "TextEdit"
        repeat x times
            key code 125
        end repeat
    end tell
end tell
    
pregunta rubik's sphere 15.03.2017 - 02:30

2 respuestas

3

Creo que el problema que tienes es que has entendido mal lo que realmente está sucediendo. Déjame tratar de explicar ...

La primera pregunta para responder es ¿por qué no se veían las ventanas de su primera captura de pantalla? Obviamente, el archivo My Fruit Log.txt no estaba visible porque no estaba No se ha abierto todavía (es decir, su script no se ha ejecutado todavía). Pero ¿qué pasa con las otras ventanas? Solo hay tres posibilidades:

  1. TextEdit no se estaba ejecutando (por lo tanto, no existe ninguna ventana). Esto sería obvio, por lo que no se necesita más discusión.
  2. TextEdit estaba en ejecución, pero estaba oculto (por lo tanto, todas las ventanas están ocultas). Esto solo significa que ocultaste TextEdit de la vista. La ejecución de su script simplemente lo hace visible nuevamente (junto con todas sus ventanas excepto para cualquiera que pueda minimizarse).
  3. TextEdit se estaba ejecutando pero todas las ventanas se minimizaron. Esto solo significa que TextEdit se está ejecutando, pero no hay ventanas visibles porque han sido minimizadas. La ejecución del script hace que la aplicación sea visible y vuelva a aparecer en primer plano, pero todas las ventanas minimizadas permanecen minimizadas.

En su escenario, es casi seguro que se aplique la Opción 2. Entonces, si bien no es lo que quieres escuchar, tu script realmente funciona como se supone en macOS. La forma única en la que puedo pensar en este momento para lograr lo que desea de manera práctica es garantizar que su script minimice todas las demás ventanas, excepto la que se 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 puedes ver, acabo de agregar dos líneas de código. Creo que se explican por sí solos: solo le dicen a TextEdit que minimice cualquier ventana que cumpla con estas dos condiciones (1. no es la ventana frontal y 2. está visible).

Esperemos que esto funcione para usted, pero si no, quizás alguien más encuentre una solución mejor.

    
respondido por el Monomeeth 15.03.2017 - 07:41
1

¿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 puedes 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'.

    
respondido por el Mockman 15.03.2017 - 07:20

Lea otras preguntas en las etiquetas