Obtendo feedback visual da mudança do espaço de trabalho no xfce

7

Não tenho certeza se essa é uma pergunta apropriada para este site, já que não é realmente específica para o Ubuntu. Aqueles que acham que não é, provavelmente devem responder ao meu crosspost em o site Unix e Linux stackexchange . Desculpe por qualquer confusão, ainda estou negociando as fronteiras entre esses sites (e superuser.com, onde eu também crossposted ). Eu acho que todos nós somos.

Eu faço uso pesado de espaços de trabalho e tenho muitos deles (uma grade 6x4). Eu geralmente uso o openbox, mas atualmente estou usando uma máquina que não tem o openbox configurado, então estou usando o xfce porque ele já está configurado principalmente para o meu gosto. Eu me acostumei a obter feedback visual quando eu mudo de espaços de trabalho, me mostrando qual deles eu mudei para, e estou me encontrando um pouco desorientado no xfce. No openbox, este é um grande display de heads-up, que é praticamente ideal. Estou ciente de que o miniaplicativo do painel de alternador do espaço de trabalho realçará o espaço de trabalho ativo, mas isso parece funcionar apenas para espaços de trabalho que exibem algum espaço de área de trabalho; já que eu geralmente tenho todas as minhas janelas maximizadas, isso não é super útil.

Existe uma maneira de ativar o feedback visual que mostra o novo espaço de trabalho ao alternar espaços de trabalho no xfce?

    
por intuited 03.12.2010 / 01:30

8 respostas

10

Eu escrevi um pequeno código que mostra uma notificação sobre a ação de mudança do espaço de trabalho. Este código requer libnotify e libwnck

Para compilar use o comando:

gcc -O2 -o wsnd 'pkg-config  --cflags --libs libnotify --libs libwnck' wsn.c

Se você encontrou erros de compilação com o comando acima, tente este:

gcc -O2 -DWNCK_I_KNOW_THIS_IS_UNSTABLE -o wsnd 'pkg-config  --cflags --libs libnotify --libs libwnck-1.0' wsn.c

Para testá-lo a partir de um terminal: ./wsnd

Inclua-o como aplicativo de inicialização do XFCE: No XFCE, você precisa adicioná-lo como aplicativo de inicialização na sessão e inicialização do settings-manager- > - > Autostart de aplicativo

O código:

//////////////////////////////////////////////////////////////////////////////////////
// Workspace Switch Notifier                                                        //
// Shows a OSD with workspace name on workspace switching action                    //
//                                                                                  //
// wsn.c -                                                                          //
//                                                                                  //
// Authors:                                                                         //
//    Isaac Maia Pessoa                                                             //
//                                                                                  //
// This program is free software: you can redistribute it and/or modify it          //
// under the terms of the GNU General Public License version 3, as published        //
// by the Free Software Foundation.                                                 //
//                                                                                  //
// This program is distributed in the hope that it will be useful, but              //
// WITHOUT ANY WARRANTY; without even the implied warranties of                     //
// MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR               //
// PURPOSE.  See the GNU General Public License for more details.                   //
//                                                                                  //
// You should have received a copy of the GNU General Public License along          //
// with this program.  If not, see <http://www.gnu.org/licenses/>.                  //
//////////////////////////////////////////////////////////////////////////////////////

#include <libnotify/notify.h>
#include <libwnck/libwnck.h>

#define N_SUMMARY "Workspace Changed"
#define N_ICON    "dialog-information"
#define N_APPNAME "workspace switch notifier"
#define N_TIMEOUT 2000 /*2000ms = 2s */

static NotifyNotification * m_notification = NULL;

static void
on_active_workspace_changed (WnckScreen    *screen,
                             WnckWorkspace *space,
                             gpointer      data)
{

  WnckWorkspace * active_workspace = wnck_screen_get_active_workspace(screen);
  const char * w_name = wnck_workspace_get_name (active_workspace);

  notify_notification_update(m_notification, N_SUMMARY, w_name, N_ICON);
  notify_notification_show(m_notification, NULL);
}

int main(int argc, char ** argv)
{

   GMainLoop *loop;   
   WnckScreen *screen;

   if (notify_init(N_APPNAME))
       m_notification = notify_notification_new(N_SUMMARY, "" , N_ICON);
   else
       fprintf(stderr, "Failed to init notifications\n");
   notify_notification_set_timeout(m_notification, N_TIMEOUT);

   gdk_init (&argc, &argv);

   loop = g_main_loop_new (NULL, FALSE);
   screen = wnck_screen_get_default();

   g_signal_connect (screen, "active-workspace-changed",
                    G_CALLBACK (on_active_workspace_changed), NULL);

   g_main_loop_run (loop);

   g_main_loop_unref (loop);    

   return 0;
}
    
por Isaac Pessoa 03.08.2012 / 10:24
2

Eu modifiquei a resposta de Isaac Pessoa para minhas próprias preferências. Em vez de mostrar uma notificação na área de trabalho alterada, isso mostra brevemente um painel Xfce oculto com o widget alternador da área de trabalho.

Aqui está o que parece ao mudar espaços de trabalho:

Salveestearquivocomowschanged.c:

#include<libwnck/libwnck.h>#include<stdlib.h>staticvoidon_active_workspace_changed(WnckScreen*screen,WnckWorkspace*space,gpointerdata){//Executesascriptonworkspacechangesystem("~/.workspace-changed");
}

int main(int argc, char ** argv)
{

   GMainLoop *loop;   
   WnckScreen *screen;

   gdk_init (&argc, &argv);

   loop = g_main_loop_new (NULL, FALSE);
   screen = wnck_screen_get_default();

   g_signal_connect (screen, "active-workspace-changed",
                    G_CALLBACK (on_active_workspace_changed), NULL);

   g_main_loop_run (loop);
   g_main_loop_unref (loop);    

   return 0;
}

Agora, crie um novo painel do Xfce em qualquer lugar na borda da tela e configure-o para ocultar automaticamente. Adicione o widget do alternador de espaço de trabalho. Anote o número do painel conforme exibido no menu suspenso da janela de preferências do painel.

Crie um arquivo .workspace-changed em seu diretório pessoal, substituindo < P_NUMBER > com o número do painel que você acabou de criar. Certifique-se de que este arquivo seja executável! ( chmod + x .workspace-changed )

#!/bin/sh

# Show the auto-hidden workspace panel for a moment, then set it to autohide again
xfconf-query -c xfce4-panel -p /panels/panel-<P_NUMBER>/autohide -t bool -s false
xfconf-query -c xfce4-panel -p /panels/panel-<P_NUMBER>/autohide -t bool -s true

Agora compile com:

gcc -O2 -DWNCK_I_KNOW_THIS_IS_UNSTABLE -o wschanged 'pkg-config  --cflags --libs libwnck-1.0' wschanged.c

Teste-o no seu terminal ( ./wschanged ) para garantir que tudo esteja certo. Quando estiver satisfeito, adicione o programa como um aplicativo de inicialização do Xfce: Configurações - > Sessão e inicialização - > Autostart de aplicativo.

    
por zspotter 11.01.2014 / 17:22
1

Você poderia instalar o conky

salve isso em um arquivo ...

# Static and Variable Values used by Habitual/John Jones

# Static Values
own_window yes
own_window_transparent yes
own_window_type desktop
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
double_buffer yes
use_xft yes
draw_outline no
draw_borders no
uppercase no
draw_shades no
draw_shades yes
double_buffer yes
border_width 0
text_buffer_size 2048
default_color white
update_interval 1.0

# Variable Values # These values are the ONLY thing that change from widget to widget
alignment bm
gap_x 5
gap_y 44
minimum_size 50 1
maximum_width 100

TEXT
${desktop_number}

executá-lo no Xfce. (terminal) - > com conky -c / path / to / file &

ícone / iniciador conky -c / caminho / para / arquivo

Sempre que mudar de área de trabalho, o número da área de trabalho estará na tela.

o valor "alinhamento bm" controla o posicionamento da área de trabalho. bm é meio-baixo.

Veja o link para os DOCs.

    
por Habitual 03.12.2010 / 16:32
1

A única coisa que posso pensar é usar papéis de parede separados (eu acredito que isso é possível, mas não posso confirmar como eu não uso o xfce todos os dias) para cada desktop. Se você não se importa em usar o compiz, você pode configurá-lo como o xfwm, e instalando o plugin namer do espaço de trabalho, que permite que você tenha nomes para cada espaço de trabalho exibido quando você alterna.

    
por RolandiXor 03.12.2010 / 03:52
1

Eu fiz uma pequena modificação no script do conky acima

Ele permitirá transparência para os números no XFCE e também é possível modificar o tamanho da fonte. Ele também usa a variável correta para exibir a identidade do espaço de trabalho

# Static and Variable Values used by Habitual/John Jones
# Added to by AMH to add transparency under newer XFCE, the gothic font
# for sizing and changed the desktop variable to display the workspace
# correctly

# Static Values
own_window yes
own_window_transparent yes
own_window_type desktop
# Added to allow transparency in XFCE
own_window_argb_visual yes
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
double_buffer yes
use_xft yes
draw_outline no
draw_borders no
uppercase no
draw_shades no
draw_shades yes
double_buffer yes
border_width 0
text_buffer_size 2048
default_color white
update_interval 1.0

# Variable Values # These values are the ONLY thing that change from widget to widget
alignment bm
gap_x 5
gap_y 44
minimum_size 50 1
maximum_width 100

TEXT
${color light blue}${font URW Gothic L:size=60}${desktop}
    
por Alan HArding 13.12.2011 / 17:05
1

Isso é exatamente o que eu estava procurando. Obrigado, Isaac Pessoa e Zspotter! Estou usando o Xfce no Arch e, no espírito de mantê-lo mínimo, não quis recorrer à instalação do Compiz.

Não tenho certeza se isso aconteceu ou aconteceu com mais ninguém, mas notei algo muito estranho: o painel que configurei como indicador de espaço de trabalho foi configurado para mostrar 3 linhas (tenho 9 áreas de trabalho). Ele foi definido para ser aproximadamente o mesmo tamanho que o que você teria no Ubuntu (cerca de 3x6 polegadas). No entanto, ele mostraria apenas uma linha até que eu clicasse com o botão direito do mouse no painel e nas propriedades selecionadas (o que, claro, era exibir a janela de propriedades do alternador de espaço de trabalho). A correção foi remover o alternador de espaço de trabalho que estava em outro painel.

Além disso, para alterar por quanto tempo o painel indicador da área de trabalho é exibido antes que ele se autoimpresse novamente, você precisará adicioná-lo ao seu arquivo .gtkrc-2.0:

    style "xfce-panel-window-style"
{
  # Time in miliseconds before the panel will unhide on an enter event
  XfcePanelWindow::popup-delay = 225

  # Time in miliseconds before the panel will hide on a leave event
  XfcePanelWindow::popdown-delay = 350

  # Size of autohide window in pixels
  XfcePanelWindow::autohide-size = 3
}
class "XfcePanelWindow" style "xfce-panel-window-style"

Encontrado aqui

No meu caso, como estou no Arch, o arquivo gtkrc-2.0 não existe. Eu tive que adicionar isso ao arquivo gtkrc no meu diretório ~ / .themes / [theme name here].

Altere o atraso de pop-up e o atraso de pop-up ao seu gosto. Por alguma estranha razão, eu tive que definir os valores em cerca de metade do que eu queria que eles fossem. Provavelmente tem algo a ver com a execução do script.

Se você quiser colocar um painel no meio da sua tela mostrando uma grade de espaços de trabalho, (semelhante ao Ubuntu), você precisará definir o alfa desse painel (na guia aparência nas preferências do painel) até o fim . Dessa forma você não verá um pequeno bar em cima de todas as suas janelas. Definir o valor do tamanho de autohide como 1 tornará praticamente impossível que o painel seja exibido por acidente.

Uma última coisa: se o cursor estiver na parte superior do painel quando você estiver trocando de espaços de trabalho, ele mostrará aleatoriamente uma dica de ferramenta e eu tenho que mover o cursor para fora do painel para que ele se esconda novamente. Não é um grande problema embora.

EDIT: Eu usei o conserto do zspotter para isso.

EDIT: Acabei de notar que a rolagem do mouse enquanto focada na área de trabalho irá alternar espaços de trabalho (usando a correção do zspotter). Nice!

EDIT: Isso faz com que o meu popus de notificação (ou seja, ao usar teclas de volume, etc.) apareça no lugar errado. Especificamente, ao usar as opções superior esquerda ou superior direita, as notificações aparecem no meio esquerdo ou no meio direito. Eu não tenho o osd-notify instalado - apenas xfce4-notifyd. Tudo nas configurações parecia estar correto. Quando removi o painel e retirei a lista de inicialização automática de aplicativos, o problema foi corrigido.

    
por brciii 12.01.2014 / 07:40
1

Eu tenho esse pequeno code-blob python3 que reage à troca de espaço de trabalho.

Não foi feito para exibir uma notificação, mas para solucionar um bug de redesenho de cromo. Tudo o que você quer que aconteça na mudança do espaço de trabalho, você pode facilmente jogar para a função "fire_the_kludge" embora.

link

Aqui está um exemplo retrabalhado que usa o libnotify2 para lhe contar sua área de trabalho:

#!/usr/bin/env python3

from gi.repository import Wnck, Gtk, Notify
import signal, time

class Kludge:
    def __init__(self):
        self.first = True
        signal.signal(signal.SIGINT, signal.SIG_DFL)
        self.screen = Wnck.Screen.get_default()
        Notify.init("Workspace Switch Notifier")

    def fire_the_kludge(self, data_a, data_b):
        time.sleep(.1)
        try:
            workspace_num = str(self.screen.get_active_workspace().get_number())
        except:
            workspace_num = "Some error happened"
        popup = Notify.Notification.new("Workspace: " + workspace_num)
        popup.show()
        time.sleep(1)
        popup.close()

    def main(self):
        self.screen.connect("active-workspace-changed", self.fire_the_kludge)
        Gtk.main()

if __name__ == '__main__':
    print("Here comes the kludge")
    kludge = Kludge()
    kludge.main()
    
por RobotHumans 13.07.2014 / 14:23
0

A maioria das respostas tem 5 anos e a partir do xubuntu 18.04 não funciona mais. Eu juntei uma versão atualizada da resposta do zspotter que é executada em 18.04. Para simplificar, assumirei que todos os arquivos estão localizados no diretório inicial, você pode adaptar facilmente os scripts a uma pasta diferente.

Primeiro crie um arquivo chamado wschanged.c com este conteúdo:

#include <libwnck/libwnck.h>
#include <stdlib.h>

static void
on_active_workspace_changed (WnckScreen    *screen,
                             WnckWorkspace *space,
                             gpointer      data)
{
    // Executes a script on workspace change
    system ("~/.workspace-changed");
}

int main(int argc, char ** argv)
{

   GMainLoop *loop;   
   WnckScreen *screen;

   gdk_init (&argc, &argv);

   loop = g_main_loop_new (NULL, FALSE);
   screen = wnck_screen_get_default();

   g_signal_connect (screen, "active-workspace-changed",
                    G_CALLBACK (on_active_workspace_changed), NULL);

   g_main_loop_run (loop);
   g_main_loop_unref (loop);    

   return 0;
}

Em segundo lugar, crie um novo painel do Xfce em qualquer lugar na borda da sua tela e defina-o para auto-ocultar. Adicione o widget do alternador de espaço de trabalho. Anote o número do painel conforme exibido no menu suspenso da janela de preferências do painel; no nosso exemplo, o número do painel é 2, ajuste de acordo.

Terceiro, aqui as coisas começam a ficar diferentes, crie outro script na mesma pasta chamada wschanged.sh com este conteúdo (lembre-se de defini-lo como executável com rightclick - > properties- > definido como executável ou chmod +x .wschanged.sh em um terminal):

#!/bin/sh

# Show the auto-hidden workspace panel for a moment, then set it to autohide again
xfconf-query -c xfce4-panel -p /panels/panel-2/autohide-behavior -s 1
xfconf-query -c xfce4-panel -p /panels/panel-2/autohide-behavior -s 2

Os painéis não têm mais uma propriedade de autohide, mas uma propriedade de comportamento de autohide e, portanto, os ajustes no script.

Em quarto lugar, temos que compilar o arquivo .c, os comandos nas respostas anteriores não funcionam mais, como sugerido. error-to-glib-components-even-with-glib-incluído "> aqui use:

gcc -O2 -DWNCK_I_KNOW_THIS_IS_UNSTABLE -o wschanged 'pkg-config --cflags libwnck-3.0' wschanged.c 'pkg-config --libs libwnck-3.0'

Se você receber um erro, instale o libwnck-3-dev com sudo apt install libwnck-3-dev .

Agora você pode testar o script com ./wschanged (coloque-se no mesmo diretório que o executável). Você também pode agora definir para executar o comando na inicialização.

    
por dsSTORM 16.10.2018 / 17:26