2 votos

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

Tengo el siguiente AppleScript código que abre un archivo en el editor de texto 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 cualquier otra TextEdit archivos abiertos, el código también traerá el resto de la documentación a la parte delantera. Me gustaría, sin embargo, que sólo de esta, archivo de texto específico se llevó a la parte delantera.

El código no va a traer una minimizado TextEdit ventana al frente, pero traerá todo lo oculto, no se minimiza, el Notepad de windows en la parte delantera.

Cuando me quite la activate línea del código:

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

el archivo está abierto, pero la ventana no es traído a primer plano.

OS X El Capitan, versión 10.11.6.


Aquí es una representación visual de lo que he descrito anteriormente. Tenía cero de windows minimizado en mi pc cuando estas imágenes fueron tomadas.

Esto es lo que mi pantalla se ve como antes de la AppleScript se activa:

Before

Esto es lo que quiero de mi pantalla para ver como después de la AppleScript se activa:

After - Desired

Esto es lo que mi pantalla actualmente se ve como después de la AppleScript se activa:

After - Actual


En el interés de la divulgación completa, mi código también se mueve el TextEdit ubicación del cursor después de abrir el archivo. No sé de que esto podría afectar una posible solución, pero aquí está el código adicional que sigue el pasaje anterior (x es un número entero que es asignado 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

2voto

Monomeeth Puntos 139

Creo que el problema que tienes es que te he entendido mal lo que realmente está pasando. Déjame que te explique...

La primera pregunta a responder es por qué fueron los de windows que falta en su primera captura de pantalla no es visible? Obviamente, Mi Fruta Log.txt archivo no era visible, porque no estaba todavía abierto (es decir, la secuencia de comandos no había ejecutado todavía). Pero, ¿y el otro windows? Sólo hay tres posibilidades:

  1. TextEdit no estaba funcionando (por lo tanto no existen ventanas). Este sería obvio, así que no hay más discusión necesaria.
  2. TextEdit fue corriendo, pero estaba oculto (por lo tanto, todas las ventanas están ocultos). Esto solo significa que se escondió TextEdit de la vista. Ejecute la secuencia de comandos, simplemente lo hace de nuevo visible (junto con todos los windows , excepto que puede ser minimizado).
  3. TextEdit se estaba ejecutando, pero todas las ventanas se minimizan. Esto solo significa TextEdit se está ejecutando, pero no son visibles debido a que han sido miminimed. Ejecute la secuencia de comandos de la aplicación visible y en el primer plano de nuevo, pero todos minimiza todas las ventanas permanezcan mínimo.

En el escenario, es casi seguro que la Opción 2 se aplica. Así que, aunque no es lo que usted quiere oír, su guión es en realidad el trabajo de la manera que se supone que en macOS. La única manera que se me ocurre en la actualidad para lograr lo que desean de una manera práctica es asegurarse de que la secuencia de comandos minimiza todas las otras ventanas a excepción de la que acaba de abrir. Por ejemplo, usted podría conseguir 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 se puede ver, sólo he añadido dos líneas de código. Creo que son bastante auto-explicativo - Que acaba de decir TextEdit para minimizar cualquier ventana que cumpla estas dos condiciones (1. no es la ventana del frente y 2. es visible).

Esperemos que esto funciona para usted - pero si no tal vez a alguien se le ocurre una solución mejor.

1voto

Mockman Puntos 16

¿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 que hay otros métodos para identificar las ventanas. También se podría hacer algo como esto... donde se utiliza una lista de windows de la segunda a 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'.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X