O atalho de teclado "Sempre no topo" do GNOME 3 não está desativado

O atalho de teclado "Sempre no topo" do GNOME 3 não está desativado

Este não é um grande problema, mas é um pouco chato e, acima de tudo, intrigante. Eu executo uma máquina estável Debian 9 com Xfce 4.12 por um tempo e estou configurando um desktop GNOME em paralelo para testá-lo.

No Xfce, tenho um atalho de teclado personalizado wmctrl -r :ACTIVE: -b toggle,aboveque funciona para alternar as janelas em foco na parte superior e no mesmo nível das outras.

Eu tentei o mesmo no GNOME 3.22 em System settings / Keyboard , só consigo alternar a janela em foco sobre outras, mas não a alterna de volta para o mesmo nível das outras janelas. Tenho que clicar com o botão direito na moldura da janela e desmarcar a opção "Sempre visível".

Alguém tem alguma ideia de por que isso pode acontecer?

Responder1

Percebi isso também em abril de 2016, minha solução alternativa é usar 2 teclas para alternar, por exemplo:

wmctrl  -r :ACTIVE: -b add,above
wmctrl  -r :ACTIVE: -b remove,above

Responder2

Bem, depois de muita pesquisa e de descobrir como escrever código adequado no bash, criei um único comando que usa os comandos wmctrl dentro de uma camada de lógica para alternar efetivamente o estado 'sempre no topo' na área de trabalho GNOME atual! Contemplar:

bash -c 'wmctrl -r :ACTIVE: -b $([[ $(xprop -id $(xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}") _NET_WM_STATE) =~ "ABOVE" ]] && echo "remove" || echo "add"),above'

Ele verifica a propriedade de estado da janela ativa "_NET_WM_STATE" usando xpropse, se contiver o texto "ABOVE", significa que a opção 'sempre visível' está ativa. Depois é só executar o wmctrlcomando com o parâmetro addou removeconforme apropriado.


Divisão de comandos (cada comando é inserido no próximo, substituindo o espaço reservado):

  • Obtenha o ID da janela ativa:

    xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}"

  • Obtenha o estado da janela do xprop usando o id:

    xprop -id $(■) _NET_WM_STATE

  • Verifique se o estado contém 'ABOVE', indicando que a janela está definida como 'sempre visível':

    [[ $(■) =~ "ABOVE" ]]

  • Retorne "remove" se for verdadeiro, caso contrário retorne "add":

    ■ && echo "remove" || echo "add"

  • execute o comando wmctrl usando o valor retornado como parâmetro

    wmctrl -r :ACTIVE: -b $(■),above

  • Envie tudo para bashque você possa usar a substituição de comando ${ ... }, a avaliação booleana do bash [[ ... ]]e o operador de correspondência regex=~

    bash -c '■'

    Este último passo em particular levou muito tempo para descobrir. Até perceber que os atalhos de teclado não estavam sendo executados no bash por padrão, eu não tinha ideia de por que os comandos estavam funcionando no console enquanto os testava, mas falhavam silenciosamente quando executados diretamente como um atalho de teclado. Isso me deixou louco por muito tempo!

Nota: como você precisa de aspas em torno do comando que está enviando para o bash, tive que ter cuidado ao escrever o comando para nunca ter mais de um nível de profundidade (usando aspas duplas). Qualquer aninhamento adicional de strings entre aspas exigiria muitas barras invertidas confusas para escapar das aspas.

informação relacionada