Uso emacs y he escrito un script que es mitad en bash y mitad en AppleScript para hacer lo siguiente (primero escribo el código y luego el pseudocódigo). Suponemos que se está ejecutando un demonio emacs.
pseudocódigo:
if (no emacs GUI process is active or a process is active but no window is present)
then
open a new emacs window using emacsclient
and
put that window in foreground
else
open the app Emacs.app (so no new instance is created and we simply put
the focus on the existing emacs window)
código para "switchToEmacs.sh"
#!/bin/bash
openedWindows=$(/usr/bin/osascript ~/emacsWindowsCount.scpt)
if [ $openedWindows -eq 0 ]; then
/Applications/Emacs.app/Contents/MacOS/bin/emacsclient -n -c -e "(select-frame-set-input-focus (selected-frame))"
else
open -a Emacs
fi
código para "emacsWindowsCount.scpt" (utilizado en el script anterior, he compilado el código con osacompile para mejorar el rendimiento)
tell application "System Events"
if exists (process "Emacs") then
else
return 0
end if
tell application "Emacs"
set numberOfWindows to (count windows)
end tell
return numberOfWindows
end tell
He asignado switchToEmacs.sh a un acceso directo con Alfred 3 y hace lo que espero que haga, ¡pero es lento! No extremadamente lento, pero el cambio no es inmediato y tengo que esperar unos 0,3 segundos. A la inversa, si tengo una ventana de emacs abierta y escribo "emacs" en el centro de atención, la transición es inmediata, por lo que me gustaría eliminar esa espera innecesaria.
Ya que odio ese tiempo de espera (parece muy corto, pero cuando necesitas navegar mucho por las aplicaciones se vuelve incómodo) por ahora estoy haciendo lo siguiente: He eliminado el emacs deamon, cada vez que inicio sesión, inicio emacs.app, cuando necesito cerrar la aplicación emacs, no uso CMD + Q, pero CMD + H, cuando necesito recuperar emacs, simplemente inicio emacs. aplicación (a través de un atajo de Alfred 3) para obtener emacs focus. Con esta solución, la transición a emacs es inmediata, pero preferiría mi script por dos motivos: primero, con el script para poder usar emacs desde el terminal antes de lanzar una instancia de emacs abriendo emacs.app, pero el motivo real es que este método si escribo "emacsclient -t myFile" en el terminal y luego cierro el búfer que regresa al terminal, entonces las ventanas de emacs (emacs.app) obtendrán el foco, incluso si no se lo he dado. Esto es realmente incómodo.
EDITAR IMPORTANTE:
Me di cuenta de que abrir una nueva instancia es inmediato, lo que lleva tiempo está abierto, como Emacs. He intentado reemplazarlo con tell application "Emacs" to activate window 1
(compilado) pero aún es lento. ¿Alguna idea?
EDITAR: He logrado un rendimiento perfecto con esta herramienta gratuita enlace Ahora todavía hay un pequeño retraso, pero se debe al resto del código.