Nido Apple

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Creación de nuevo archivo que se incorpora como pestaña.

Hola.

Pretendo conseguir abrir un nuevo archivo de una aplicación ya abierta y que ese archivo se fusione como pestaña si esa aplicación lo permite.

Se consigue la apertura de un nuevo archivo, pero no la fusión como pestaña

Agradecería ayuda sobre en qué parte cometo el error

set laLista to {"Finder", "Google Chrome", "TextEdit", "Script Editor"}

--EXTRAE EL NOMBRE DE LA APLICACIÓN
tell application "System Events"
    set nombreAplic to name of the first process whose frontmost is true
end tell

--ABRE NUEVO DOCUMENTO DE LA LISTA Y LO FUSIONA COMO PESTAÑA SI FUERA POSIBLE
tell application "System Events"
    if laLista does not contain nombreAplic then
        quit
    else if nombreAplic is "Finder" then
        keystroke "t" using command down
        fusion(nombreAplic)
    else if nombreAplic is "Google Chrome" then -- Admite la creación, no la fusión
        keystroke "t" using command down
    else if nombreAplic is "TextEdit" then
        keystroke "n" using command down
        fusion(nombreAplic)
    else if nombreAplic is "Script Editor" then
        keystroke "n" using command down
        fusion(nombreAplic)
    end if
end tell

on fusion(nombreAplic)
    tell application "System Events"
        tell process nombreAplic
            click menu item "Fusionar todas las ventanas" of menu "Ventana" of menu bar 1
        end tell
    end tell
end fusion

0voto

Peter comentado

Por favor describe lo que quieres hacer por pasos, con que aplicaciones, etc... Es para tener una idea global y ver si es mejor hacerlo de otra forma.

1voto

DJUNQUERA comentado

El fin es abrir un nuevo archivo y, si la aplicación lo admite, fusionar inmediatamente ese archivo como pestañas con otro similar desde el que se ha invocado el comando de voz (para no hacerlo en un segundo paso una vez creado el nuevo archivo).

Hago una lista de las aplicaciones que permiten fusionar como pestañas los archivos abiertos (Finder, TextEdit, Google Chrome y Editor de Scripts)

Finder y Google Chrome crean un nuevo archivo con el atajo (Cmd-T) y el Editor de Scripts y TextEdit lo hacen con (Cmd-N).

El tipo del nuevo archivo creado dependerá de la aplicación situada en primer plano en el momento de invocar el comando de voz.

El siguiente paso del script debe ser fusionar (como pestaña) el nuevo archivo creado con otros existentes de esa misma aplicación y se llevaría a cabo mediante la simulación de la pulsación en un ítem de menú a través de System Events ➡︎ "Fusionar todas las ventanas" (Chrome no lo necesita porque ya todos los archivos creados son pestañas).
Este último (el de fusionar los archivos como pestañas) pretendo que se lleve a cabo como rutina o subprograma (handler)
[Reconozco que ahí me hago un buen lío :-(( ]

Muchas gracias por tu tiempo y tu interés en prestar ayuda.

1 Respuesta

1voto

Peter Puntos289100

Aclaro un par de puntos y te digo como lo haría.

En las aplicaciones se tiene que diferenciar pestaña, ventana y archivo.

Cmd-N = Archivo o Ventana Nueva (N=New)
Cmd-T = Pestaña Nueva (T=Tab)

Por ejemplo Chrome abre ventanas nuevas, pero Text Edit crea archivos nuevos.

Aclarar que en el Finder también puedes utilizar Cmd-T para tener una pestaña nueva en lugar de una ventana nueva.

Lo mas sencillo es que pongas directamente tu combinación de teclas para fusionar las ventanas.

En Preferencias del Sistema > Teclado > Atajos > Atajos de Aplicaciones:

Dale al + Seleccionas Finder y pones tu comando para Fusionar, por ejemplo:

Cmd+Ctrl+Shift+M

Y con eso ya puedes invocarlo cuando necesites. Lo mismo aplicaría con las demás aplicaciones.

Con las cosas que estas haciendo, te recomiendo que veas Keyboard Maestro para tener total control de atajos y flujos de trabajo.

0voto

DJUNQUERA comentado

Hola, Peter

Muchas gracias por tu ayuda.

Muy clarificadora tu exposición sobre Carpetas-Ventanas-Pestañas y los atajos. (Creo que hay un lapsus en T= Tab; pienso que en este caso T se refiere a la tecla “T”).

Estuve mirando donde me sugieres (Preferencias del Sistema > Teclado > Atajos > Atajos de Aplicaciones); en versión de Big Sur aparece como “Funciones Rápidas” y ha sido una grata sorpresa pues es un potente recurso que no conocía, al igual que la aplicación Keyboad Maestro ¡Impresionante!

Sin embargo mi interés, además de conseguir resultados, también es avanzar en el aprendizaje de AppleScript.
Por eso quería enfocar la solución mediante el manejo de un “handler”.

Hice un script similar que logra la fusión de las ventanas de la aplicación desde donde es invocado (Finder, TextEdit, Script Editor y Pages).
Mi problema ocurrió cuando me planteé añadir la opción de fusionar una nueva pestaña/ventana creada; no logro conectar la creación del nuevo elemento con la fusión y te rogaría que indicaras dónde está el error.

else if nombreAplic is "Finder" then
        keystroke "t" using command down
        fusion(nombreAplic) -- ??

on fusion(nombreAplic) -- ???
    tell application "System Events"
        tell process nombreAplic -- ??
            click menu item "Fusionar todas las ventanas" of menu "Ventana" of menu bar 1
        end tell
    end tell
end fusion

Muchas gracias por compartir tu tiempo y tus conocimientos.
¡Salud!

1voto

Peter comentado

Eso es, Funciones Rápidas y ahí puedes hacer muchas cosas. Yo lo tengo en inglés y lo van cambiando. :)

El Script si es en el Finder, tienes que activarlo y de ahí aplicar los comandos de fusión.

Algo así:

tell application "Finder"
  activate
  tell application "System Events"
    tell process "Finder"
     click menu item "Merge All Windows" of menu "Window" of menu bar 1
    end tell   
  end tell
end tell

Con eso se activa el Finder en caso de que no lo esté y el evento se hace directamente en el Finder para fusionar las ventanas que existen.

0voto

DJUNQUERA comentado

Hola, Peter.

Creo que no me he explicado bien.

Lo que pretendo es no tener que escribir el código que fusiona las pestañas tras cada una de las sentencias "else if".

De ahí mi interés en que ese fragmento del código forme parte de un "handler" que será invocado por cada uno del los bloque "else if".

Mi dificultad en este caso es que no es correcto mi código fusion()

on fusion(nombreAplic) -- ???
tell application "System Events"
tell process nombreAplic -- ??
click menu item "Fusionar todas las ventanas" of menu "Ventana" of menu bar 1
end tell
end tell
end fusion

o bien no es correcta la forma de invocarlo en las sentencias "else if"

else if nombreAplic is "Script Editor" then
keystroke "n" using command down
fusion(nombreAplic) -- ???

Gracias por tu paciencia.

0voto

Peter comentado

Crea el comando global en "Funciones Rápidas" y utiliza ese. Así con ese comando la fusión debe de funcionar para todas las apps.

Si utilizas:

click menu item "Fusionar todas las ventanas" of menu "Ventana" of menu bar 1

de forma independiente en cada una de las apps, te funciona en todas?

Porque estas ejecutando ese comando sin importar la app, pero si la app no tiene esa opción, no funciona.

¿Te marca algún error? ¿Cómo lo estás probando?

1voto

Peter comentado

Acabo de revisarlo y el error esta en:

on fusion(nombreAplic)

fusion no existe.

Utiliza al final unicamente:

    tell application "System Events"
        tell process nombreAplic
            click menu item "Fusionar todas las ventanas" of menu "Ventana" of menu bar 1
        end tell
    end tell

El script completo sería así:

set laLista to {"Finder", "Google Chrome", "TextEdit", "Script Editor"}

--EXTRAE EL NOMBRE DE LA APLICACIÓN
tell application "System Events"
    set nombreAplic to name of the first process whose frontmost is true
end tell

--ABRE NUEVO DOCUMENTO DE LA LISTA Y LO FUSIONA COMO PESTAÑA SI FUERA POSIBLE
tell application "System Events"
    if laLista does not contain nombreAplic then
        quit
    else if nombreAplic is "Finder" then
        keystroke "t" using command down

    else if nombreAplic is "Google Chrome" then -- Admite la creación, no la fusión
        keystroke "t" using command down

    else if nombreAplic is "TextEdit" then
        keystroke "n" using command down

    else if nombreAplic is "Script Editor" then
        keystroke "n" using command down

    end if

    tell application "System Events"
        tell process nombreAplic
            click menu item "Merge All Windows" of menu "Window" of menu bar 1
        end tell
    end tell

end tell

1voto

DJUNQUERA comentado

Te envié mi comentario, por error, a través de "Responder".

Te comentaba que los que domináis la materia tenéis una visión clara que no tenemos los que caminamos en ella con torpeza.

Tu solución es, una vez sabida..., sencilla y tajante: Ya definida la aplicación y creado un nuevo ítem, se sale del bloque "if" y luego se fusionan las pestañas. Querer fusionar dentro del bloque "if" el ítem creado usando un "handler" no es una buena estrategia.

¡¡¡MUCHAS GRACIAS!!!

:-))

1voto

Peter comentado

Justo lo acabo de ver porque las respuestas te avisan a ti, pero no a mí. :P

Que bueno que te ayudó y explicó las cosas la solución!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...