¿Es posible asignar el idioma predeterminado del teclado para aplicaciones específicas? Sé que hay una opción para iniciar siempre una aplicación con un idioma de teclado predeterminado, pero esto no es lo que quiero.
Estoy buscando algo similar a los "espacios de trabajo fijos" que puede configurar con CompizConfig (configura Chrome para que siempre se abra en X1Y1, terminal en X2Y1, etc.). Algo donde configuraría Chrome: checo, terminal: inglés, Spotify: inglés, ...
Respuestas:
Introducción
El siguiente script establece el idioma para cada programa definido por el usuario, de acuerdo con la posición de ese idioma en el menú de idiomas. Por ejemplo, si mi pedido es: inglés (1), chino (2) y ruso (3), puedo configurar Firefox para que tenga el idioma 2, terminal para que tenga el idioma 1 y LibreOffice para que tenga el idioma 3.
El guión viene en dos partes: la primera parte es el guión real que hace el trabajo, el segundo guión sirve como elemento de control. La idea es ejecutar el script de configuración de idioma como una aplicación de inicio y siempre que necesite cambiar el idioma manualmente, haga doble clic en el acceso directo al script del controlador.
Prerrequisitos
wmctrl
programa consudo apt-get install wmctrl
.Guión
Script de controlador
Archivo del iniciador (.desktop) para el script set-lang.sh
Archivo del iniciador (.desktop) para set-lang-controller.sh
Hacer que el guión funcione
bin
. Puedes hacerlo en el administrador de archivos o usar el comandomkdir $HOME/bin
en la terminalbin
carpeta cree dos archivos:set-lang.sh
yset-lang-control.sh
. Guardar script enset-lang.sh
y script de controlador enset-lang-control.sh
. Hacer que ambos scripts sean ejecutables consudo chmod +x $HOME/bin/set-lang-control.sh $HOME/bin/set-lang.sh
.desktop
archivos. Una de ellas esset-lang.desktop
. Debe colocarse en el.config/autostart
directorio oculto . El segundo esset-lang-controller.desktop
, se puede colocar en subin
carpeta. A continuación, arrastre y fije al iniciador elset-lang-controller.desktop
archivo. Esto se convertirá en el acceso directo para detener y reanudar temporalmente la ejecución del script.Tenga en cuenta que la línea
Exec=
debe modificarse para tener su nombre de usuario real en la ruta al script (porque ese es su directorio de inicio real). Por ejemplo, el mío seríaExec=/home/serg/bin/set-lang.sh
Explicación y personalización:
El script mismo se ejecuta en un ciclo while infinito y verifica la ventana activa actual. Si la ventana activa actual coincide con una de las opciones en la estructura del caso, cambiamos al idioma apropiado. Para evitar la configuración constante, cada parte de la estructura del caso tiene una declaración if que comprueba si el idioma ya se ha establecido en el valor deseado.
El doble clic en el iniciador para
set-lang-controller.sh
verificará el estado delset-lang.sh
script; si el script se está ejecutando, se pausará, y si el script está en pausa, se reanudará. Se mostrará una notificación con el mensaje correspondiente.Para personalizar el script, puede abrir las aplicaciones deseadas, ejecutar
wmctrl -lx
y anotar la tercera columna: la clase de ventana. Salida de muestra:Seleccione las clases de ventana apropiadas para cada programa. A continuación, vaya a la parte del script que permite la personalización y agregue dos entradas para PROG_CLASS y LANG. A continuación, agregue la entrada apropiada en la estructura del caso.
Por ejemplo, si quiero agregar el Escritor de LibreOffice, abro la ventana del Escritor de LibreOffice, voy a la terminal y ejecuto
wmctrl -lx
. Me dirá que la ventana del escritor tiene claselibreoffice.libreoffice-writer
. A continuación, iré al script, agregarPROG_CLASS_4=libreoffice.libreoffice-writer
yLANG4=3
en el área correspondiente. Observe el número correspondiente 4. A continuación, vaya a la estructura del caso y agregue la siguiente entrada entre last;;
yesac
:Nuevamente, observe el signo $ y el número coincidente 4.
Además, si el script se ejecuta como un elemento de inicio automático y desea detenerlo temporalmente para personalizarlo, use
pkill set-lang.sh
y reanude connohup set-lang.sh > /dev/null 2&>1 &
Pequeña nota: otra forma de averiguar la clase de ventana para un programa (esas cosas que van antes de un paréntesis redondo en la estructura del caso) es usar esto
xprop
yawk
oneliner:xprop | awk '/WM_CLASS/ {gsub(/"/," "); print $3"."$5}
fuente
kill -STOP $(pgrep set-lang.sh)
y luego reanudar el script conkill -CONT $(pgrep set-lang.sh)
. De esa manera puede pausarlo, cambiar de idioma normalmente y luego reanudarlo.~/bin
no necesitan la ruta (ni la extensión, ya que está$PATH
después de un reinicio de sesión, consulte: lintian.debian.org/tags/script-with-language-extension .html ), y podría combinar detener / iniciar en un.desktop
archivo; ya sea en una lista rápida o una función de alternar. Se ve bastante perfecto para mí.Puede instalar
gxneur
para eso ejecutandoEste software puede cambiar automáticamente los diseños, pero no es perfecto con eso.
Pero tiene herramientas muy buenas para configurar interruptores de diseño manual.
Puedes hacer exactamente lo que quieras. Para establecer diseños específicos para aplicaciones específicas.
fuente
La secuencia de comandos a continuación es una versión editada de esta , que se publicó como una solución similar para una sola aplicación (
gnome-terminal
) hace un tiempo.El guión fue reescrito parcialmente para esta pregunta, para poder usarlo para configurar automáticamente los idiomas para múltiples aplicaciones.
Cómo usar en la práctica; recuerda automáticamente establecer idioma por aplicación
Si se inicia el guión por primera vez, el idioma actual se supone que es el idioma por defecto, que se recuerda en un archivo oculto:
~/.lang_set
.Entonces, el uso es simple: si ejecuta, por ejemplo,
gedit
en la ventana más frontal y establece un idioma diferente, ese idioma se conecta automáticamente agedit
partir de ese momento, hasta que cambie el idioma nuevamentegedit
en frente.El número de idiomas / aplicaciones específicos es, en principio, ilimitado; simplemente ejecute la aplicación y configure el idioma con la ventana de la aplicación al frente. La aplicación se configurará y recordará automáticamente sin editar el código.
¿Evento conducido?
Aunque el script se ejecuta en un bucle, el consumo de recursos es mínimo. Evento dirigido significaría que el evento es un cambio en la ventana frontal. No veo otra opción que "espiar" para la ventana más frontal que comprobar en un bucle.
La secuencia de comandos
Como instalar
El script usa ambos
xdotool
ywmctrl
:Copie el script anterior en un archivo vacío, guárdelo como
set_language.py
Pruébalo con el comando:
Si todo funciona como se esperaba, agréguelo a Aplicaciones de inicio: Agregar a Aplicaciones de inicio: Tablero> Aplicaciones de inicio> Agregar. Agrega el comando:
fuente