1 votos

Cómo optimizar mi script, un script para abrir una nueva instancia de emacs solo si no hay instancia presente

Yo uso emacs y he escrito un script que es la mitad en bash y la otra mitad en AppleScript para hacer el siguiente (primero escribo el código y, a continuación, el pseudocódigo). Suponemos que una de emacs demonio se está ejecutando.

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 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    

Me han asignado switchToEmacs.sh para un acceso directo mediante Alfred 3 y hace lo que espera que haga, pero es lento! No es extremadamente lento, pero el cambio no es inmediato y que tengo que esperar alrededor de 0,3 segundos. Por el contrario si yo tengo una ventana de emacs abierto y de tipo "emacs" en el centro de atención, entonces la transición es inmediata, así que me gustaría quitar que esperas innecesarias.

Como yo odio que el tiempo de espera (me parece muy corto, pero cuando usted necesita para navegar por una gran cantidad de comedero de aplicaciones se vuelve torpe), por ahora estoy haciendo lo siguiente: Me han quitado el emacs demonio, cada vez que me registro en la empiezo a emacs.la aplicación, cuando tengo que cerrar el emacs app que no uso CMD+Q, pero CMD+H, cuando necesito recordar emacs yo simplemente lanzamiento de emacs.aplicación (a través de un Alfred 3 acceso directo), así que conseguir emacs enfoque. Con esta solución, la transición a emacs es inmediata, pero yo preferiría que mi script por dos razones: en primer lugar, con la secuencia de comandos para que yo pueda usar emacs desde la terminal antes de haber lanzado una emacs instancia la apertura de emacs.la aplicación, pero la verdadera razón es que el uso de este método si escribo "emacsclient -t miarchivo" en la terminal y luego cierro el búfer de regresar a la terminal, a continuación, el emacs de windows (el de emacs.app) se obtiene el enfoque, incluso si no he dado a él. Esto es realmente incómodo.

IMPORTANTE EDITAR: Me di cuenta de que la apertura de una nueva instancia es inmediata, lo que lleva tiempo es abierta-una de Emacs. He intentado reemplazarlo con tell application "Emacs" to activate window 1 (compilado), pero sigue siendo lento. Alguna idea?

EDITAR: He logrado el perfecto rendimiento con el uso de esta herramienta gratuita https://sabi.net/nriley/software/#appswitch Ahora todavía hay un poco de retraso, pero es debido a que el resto del código.

3voto

Yo suelo correr

 emacsclient -a emacs FILE
 

o

 emacsclient -a SHELL-SCRIPT-WHICH-STARTS-EMACS-WITH-PARAMETERS FILE
 

Y dejar emacsclient calcular el resto.

-1voto

woolfie Puntos 41

¿Es el script osa el que está tomando el tiempo?

Yo uso un enfoque similar a usted, pero hacer todo el procesamiento en bash. Esta es la función bash que utilizo (en Linux, no estoy cerca de mi Mac para verificar la portabilidad en este momento):

 ec ()
{
    running=$(pgrep -u $USER -c emacs)
    if [ $running -eq 0 ]; then
        emacs --geometry 85 --fullheight $* &
        return 0
    fi
    emacsclient --no-wait $*
    return 0
}
 

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