Cómo hacer clic en el ícono en el muelle == abrir una nueva instancia

Tengo varias aplicaciones en mi base que pueden tener varias instancias abiertas (por ejemplo, Chrome, iTerm, Sublime, etc.)

Cuando hago clic en uno de los íconos, quiero que se abra una nueva ventana (esto es lo que sucede si no hay ventanas abiertas actualmente). Sin embargo, si una instancia ya está abierta, simplemente me lleva a esa instancia.

Esto se vuelve especialmente molesto cuando la instancia está en otra instancia de escritorio y hace que mi escritorio cambie.

¿Hay alguna configuración que pueda configurar para que cuando haga clic en el icono, se abra una nueva ventana en lugar de redirigirlo a una ventana ya abierta?

Podría mostrarle cómo hacer esto con un poco de AppleScript que podría guardar en el Dock.
O podría simplemente pulsar ctrl+n.
@CoffeeRain Ctrl-N? ¿Que es eso? No hace nada en iTerm y Chrome. Creo que quisiste decir Cmd-N, pero eso solo funciona si la aplicación está en primer plano.
@IanC. Lo siento, sí, quise decir Cmd-N.

Respuestas (2)

Puede juntar algo con algo de AppleScript y un ingenioso pegado de imágenes de iconos. Así es como lo haría para iTerm/iTerm2.

Abra el Editor de AppleScript y pegue el siguiente AppleScript:

set myapp to "iTerm"
on appIsRunning(appName)
    tell application "System Events" to (name of processes) contains appName
end appIsRunning
if appIsRunning(myapp) then
    # What you do here will depend on the program. This works for
    # iTerm but you'll need to look up the actions for other programs
    # since this bit is iTerm-specific.
    tell application "iTerm"
        set myterm to (make new terminal)
        tell myterm
            launch session "Default"
        end tell
    end tell
else
    tell application myapp
        activate
    end tell
end if

Puede usar el botón Ejecutar en el editor para probar que funciona. Si desea que se abra un perfil diferente, cambie "Predeterminado" en la línea 12 al nombre del perfil que desea abrir.

Ahora guarde este AppleScript. En el cuadro de diálogo Guardar en "Formato de archivo" en la parte inferior, seleccione "Aplicación" de la lista.

Guardé el mío como "Nuevo iTerm.app" en mi Escritorio.

Ahora, cada vez que hago clic en "Nuevo iTerm.app" en mi escritorio, aparece una nueva ventana de iTerm. Puedo arrastrar "New iTerm.app" a mi Dock y será un ícono de Dock en el que puedo hacer clic en cualquier momento que desee abrir una nueva ventana de iTerm. Pero el icono es el icono genérico de AppleScript.

Cambiémoslo al icono de iTerm. Seleccione "Nuevo iTerm.app" en el escritorio y haga clic en Cmd-I para que aparezca la pantalla de propiedades de la aplicación.

Ahora navegue /Applicationsen una ventana del Finder, busque iTerm en la lista de aplicaciones instaladas, selecciónelo y haga clic en Cmd-I para abrir la pantalla de propiedades de la aplicación iTerm.

Haga clic en el icono en la ventana de información de iTerm para que tenga una sombra azul suave a su alrededor. Presione Cmd-C para copiar el icono al portapapeles.

Ahora haga clic en el ícono en la ventana de información "New iTerm.app" y presione Cmd-V para pegar el ícono de iTerm en la aplicación "New iTerm.app".

Copiar el ícono de iTerm a New iTerm

Ahora debería tener un icono de iTerm.

Puede mover el "Nuevo iTerm.app" a su /Applicationscarpeta si lo desea. Arrástrelo desde la carpeta en la que decida guardarlo, de regreso a su base, y ahora puede hacer clic en él en el Dock para abrir una nueva ventana de iTerm con cada clic.

Si quisiera poder distinguirlo del ícono del Dock de iTerm.app en ejecución, podría considerar pegar el ícono en un editor de imágenes como Pixelmator y agregarle un gran rojo +para que se identifique claramente como el ícono para presionar para un nuevo iTerm ventana en lugar del icono para presionar para ver la aplicación iTerm abierta y existente.

Aquí hay algunos scripts más para algunas otras aplicaciones para que pueda comenzar a personalizar las cosas:

Google Chrome (ventana nueva)

set myapp to "Google Chrome"
on appIsRunning(appName)
    tell application "System Events" to (name of processes) contains appName
end appIsRunning
if appIsRunning(myapp) then
    tell application "Google Chrome"
        make new window
    end tell
else
    tell application myapp
        activate
    end tell
end if

Google Chrome (pestaña nueva)

set myapp to "Google Chrome"
on appIsRunning(appName)
    tell application "System Events" to (name of processes) contains appName
end appIsRunning
if appIsRunning(myapp) then
    tell application "Google Chrome"
        make new tab at end of tabs of window 1
    end tell
else
    tell application myapp
        activate
    end tell
end if

Texto sublime 2

Desafortunadamente, ST2 no parece tener extensiones accesibles de AppleScript. Siempre puede echar un vistazo a la herramienta de línea de comandos OS X que ST2 incluye . Puede llamar a eso desde un script simple en el Dock para abrir una nueva ventana en ST2. Asi que:

set myapp to "Sublime Text 2"
on appIsRunning(appName)
    tell application "System Events" to (name of processes) contains appName
end appIsRunning
if appIsRunning(myapp) then
    # Assumes you've installed the subl command line tool for ST2
    # in to /usr/local/bin. Adjust accordingly.
    do shell script "/usr/local/bin/subl --new-window"
else
    tell application myapp
        activate
    end tell
end if
¡Gran respuesta con ejemplos claros que cubren diferentes casos de uso y los detalles! ¡Gracias!
@AdamDavis Recién estoy comenzando con AppleScript, por lo que fue un buen ejercicio para probar lo que aprendí.
¿Podría usarse para obtener el nombre de la aplicación que se está ejecutando actualmente?
¿Hay alguna forma de verificar si la aplicación se está ejecutando Y NO está en el escritorio actual? Me encantaría una nueva ventana solo si la ventana existente está en otro escritorio.

Me gustaría expandir el comentario de @CoffeeRain y hacerlo un poco más claro como una respuesta adecuada. Puede lograr esto sin una aplicación de inicio con Mission Control configurado para tener más de un escritorio virtual en Big Sur y versiones posteriores.

Para abrir una nueva ventana en el escritorio actual:

  1. Abra preferencias->control de misión y deshabilite "Al cambiar a una aplicación..."
  2. Ahora supongamos que ha abierto su aplicación en Desktop1 y está en Desktop2. Haga clic en el icono de la aplicación en el muelle y presione cmd+n. Esto abrirá una nueva ventana de la aplicación en Desktop2
Gracias @bmike por tu edición
¿Hay alguna forma de eliminar la acción extra de presionar comando+n? Es muy molesto.
Pues esto, no es exactamente lo que quieres, pero al menos algo. Creé un atajo (en atajos.aplicación) para enlazar un atajo de algunas teclas para abrir mi aplicación (digamos control+opción+b). Ahora, para abrir esta aplicación, necesito presionar control+opción+b y luego comando+n. Se vuelve automático muy rápidamente para usted y lo suficientemente cómodo.