Use vários WM_CLASS'es do Firefox no mesmo perfil

0

Criei um perfil do Firefox chamado "app" com algumas extensões usadas para ocultar o endereço e as barras de guias. Meu objetivo é obter arquivos .desktop para a Caixa de entrada do Google, o Google Agenda, etc., que imitam a funcionalidade "Adicionar ao desktop" do Google Chrome. No momento, eu tenho arquivos .desktop algo como

#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Terminal=false
Type=Application
Name=Google Inbox (Firefox)
Exec=firefox -P app -new-window --class googleinbox inbox.google.com
Icon=email
StartupWMClass=googleinbox

No entanto, quando eu tenho mais de um deles, todas as janelas recebem um lançador agrupado no ícone abaixo do primeiro. Quando eu uso xprop WM_CLASS em cada janela, descubro que todos eles possuem a WM_CLASS de qualquer que eu tenha aberto primeiro.

Como posso fazer com que o Firefox manipule o sinalizador -class por janela, e não por perfil?

    
por tsbertalan 26.08.2016 / 23:07

1 resposta

0

Como ninguém parece ter uma resposta específica do Firefox (provavelmente porque -class flag, não sendo documentado na página man, não está funcionando corretamente), vou postar meu hack feio como uma solução. Se alguém puder melhorar substancialmente, eu darei a eles o crédito da resposta.

Eu escrevi o seguinte script, chamado firefoxApp.sh, e coloquei em ~ / bin /. É um truque terrível e tenho vergonha disso. E também orgulhoso. Abandonei o perfil separado do Firefox e, em vez disso, usei apenas wmctrl, grep e xprop para alterar o WM_CLASS da janela recém-criada, após um atraso (já que as janelas demoram bastante tempo para aparecer e ser intituladas). Se alguém pudesse me dizer uma maneira mais precisa e confiável de encontrar as janelas para reclassificar, isso não seria afetado pelas condições de tempo / corrida, esse script seria muito melhorado. Eu tentei e não consegui fazer isso com o PID do processo iniciado (presumivelmente porque todo o perfil do Firefox tem um PID raiz). Eu não vou postar aqui o código para essa tentativa, já que eu não tenho mais isso.

#!/bin/sh
targetclass=$1
url=$2
titlegrep=$3
if [ "$#" -ne 3 ]
then
    echo "USAGE: $0 TARGETCLASS URL TITLEGREP" 1>&2
    exit 1
fi

firefox -P default -new-window "$url" &

sleep 10

# Ensure only newlines split items in the upcoming for loop:
IFS='
'

for wid in 'wmctrl -l -x | grep $titlegrep | awk '{ print \ }''
do
    xprop -id $wid -f WM_CLASS 8s -set WM_CLASS $targetclass
done

Este script eu chamo usando arquivos .desktop em ~ / .local / share / applications que se parecem com o seguinte.

#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Terminal=false
Type=Application
Name=Calendar (Firefox)
Exec=firefoxApp.sh googlecalendar calendar.google.com Calendar
Icon=calendar
StartupWMClass=googlecalendar

Se eu escolher, posso usar um nome de ícone mais específico como google-calendar-firefox-app e, em seguida, descartar um arquivo chamado google-calendar-firefox-app.svg em ~ / .local / share / icons.

    
por 03.09.2016 / 18:23