iniciar emacsclient con foco desde la línea de comando

11

Cuando inicio emacsclient desde la línea de comandos como se muestra a continuación:

emacsclient -a '' -c "$@"

Siempre comienza en segundo plano (ventana de terminal en la parte superior de la ventana de emacsclient), por lo que tengo que usar el mouse para hacer clic en la ventana para cambiar a emacsclient.

Es realmente frustrante, ¿puedo hacer que emacsclient enfoque el marco que aparece cuando se invoca desde la línea de comandos?

ingrese la descripción de la imagen aquí

lucky1928
fuente
Probablemente sea más una función del entorno de escritorio / administrador de ventanas que de emacs / emacsclient. En mi caso, el nuevo marco aparece en la parte superior de la ventana del terminal, por ejemplo (Gnome 3.20 en Fedora 24).
NickD

Respuestas:

14

Es posible que pueda usar server-switch-hooky elevar el marco. Algo como:

(add-hook 'server-switch-hook #'raise-frame)

Si eso te deja sin foco en el nuevo marco, puedes probar algo como esto en su lugar:

(add-hook 'server-switch-hook (lambda () (select-frame-set-input-focus (selected-frame))))

Si desea tener un comando de shell para abrir un marco de Emacs (sin especificar uno o más archivos para editar), también puede hacerlo desde la línea de comandos:

emacsclient -e "(raise-frame)"
glucas
fuente
No funciona pero parece que si agrega un nombre de archivo en la línea de comando, emacs aparecerá en primer plano pero sin abrir el archivo, permanecerá en segundo plano.
lucky1928
Si no necesita pasar argumentos de nombre de archivo, también puede llamar a una función desde la línea de comando, por ejemplo:emacsclient -e '(raise-frame)'
glucas
1
Su consejo (select-frame-set-input-focus (selected-frame)) funcionó para mí.
Tim Stewart
2

Este problema también se informó como un problema ( consulte el problema # 7078 de spacemacs ). La solución de usar un script de envoltura publicado allí funcionó para mí. Para completar, agregaré el contenido del script aquí:

#!/usr/bin/bash

if [[ "$#" -lt 1 ]] ; then
    emacsclient -c -e \
                "(select-frame-set-input-focus (selected-frame))" \
                "(delete-other-windows)" \
                "(spacemacs/home)" else
    emacsclient -c -e \
                "(select-frame-set-input-focus (selected-frame))" \
                "(delete-other-windows)" \
                "(find-file \"$1\")" fi

No tengo suficientes puntos de reputación para comentar aquí. Pero sería genial si server-switch-hook@glucas pudiera agregar a la respuesta información sobre dónde colocarla. Al final, no obtuve ninguna de sus soluciones para trabajar de una manera totalmente directa ...

dalanicolai
fuente