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í


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

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.