As janelas de diálogo do Zenity têm altura excessiva e não podem ser redimensionadas. Bug workaround alguém?

3

Estou tentando fazer algumas coisas em zenity, e isso tem me deixado maluco. Para ilustrar meu problema, tente executar isso:

zenity --info --text "Hello there friends."

Simples o suficiente. Agora tente isto:

zenity --info --text " Hello there friends. Hello there friends. Hello there friends. Hello there friends."

Observe como a caixa de diálogo ficou consideravelmente mais alta?

Assim você pode redimensionar a largura da caixa de diálogo. Em particular, observe o que acontece quando você tenta deixar a largura o menor possível. Isso ilustra meu próximo ponto: você não pode redimensionar a altura para baixo - parece ter um mínimo rígido que é baseado na altura que seria necessária se sua caixa de diálogo fosse comprimida horizontalmente no menor tamanho possível.

Nada disso importa para mensagens curtas, mas e se você tiver uma mensagem longa? Você não precisa fazer muita digitação para terminar com uma caixa de diálogo tão alta que o botão ok está fora da tela - e isso é um grande problema para meus usuários.

Aqui está um relatório de bug: FS # 34164: [zenity] - bug do tamanho do diálogo link

Mas esse patch não me faz bem. Meus usuários finais estão instalando o Zenity em seus próprios computadores e não consigo consertar seu Zenity.

Existe alguma maneira de contornar isso? Algum truque com relação ao texto ou qualquer outra coisa?

    
por MountainX 20.06.2013 / 07:21

4 respostas

4

Eu também não descobri um método para reduzir seu tamanho abaixo dos padrões. Você pode querer dar gxmessage uma tentativa em vez disso. Pode ser reduzido, embora também tenha um tamanho mínimo que possa ser diminuído. Ele tem melhores superfícies de controle, IMO, do que zenity com relação à seleção do tamanho da fonte e às dimensões da janela.

Exemplo

$ gxmessage -center -timeout 60 -font "monospace 9" -buttons "Okay":1 
    -geometry 300x50 --wrap \
    " Hello there friends. Hello there friends. Hello there friends. Hello there friends."

.gtkrc-2.0

SevocêrealmentequisercontrolaraaparênciadosaplicativosGTK+,acreditoqueamaneiraapropriadaéatravésdoarquivoderecursos$HOME/.gtkrc-2.0.Vocêpodeadicionarcoisascomoafonteaquiparasubstituirumafontemonoespaçada.Parafinsdeexperimentação,fizumacópiade.gtkrc-2.0echamei-ade.gtkrc-20.mono8.

Ositensaseguirtornarãoafontepadrãoespaçada8:

#$HOME/.gtkrc-2.0.mono8style"font" {
 font_name = "monospace 8"
}
widget_class "*" style "font"
gtk-font-name = "monospace 8"

Você pode então controlar se este arquivo é usado por aplicativos GTK + da seguinte forma:

$ GTK2_RC_FILES=.gtkrc-2.0.mono8 <gtk app>

Então aqui está zenity usando os padrões:

Vejazenityusandonossoarquivoderecursos.gtkrc-2.0.mono8:

NOTA: O comando usado acima foi este:

$ GTK2_RC_FILES=.gtkrc-2.0.mono8 zenity --info --title="Status" --text \
    "Hello there friends. Hello there friends. Hello there friends."

parasita gtk

Então você pode ver que podemos controlar os aplicativos GTK + através do arquivo .gtkrc-2.0 , mas quais opções podemos colocar neste arquivo. Bem, há um aplicativo para o 8-), chamado gtk-parasite . Estava nos meus repositórios do Fedora como gtkparasite .

Uma vez instalado, você o invoca contra um aplicativo GTK + da seguinte forma:

$ GTK_MODULES=gtkparasite <gtk app>

Então, vamos invocar zenity :

$ GTK_MODULES=gtkparasite zenity --info --title="Status" --text \
    "Hello there friends. Hello there friends. Hello there friends."

Se você alterar o espaçamento em alguns dos subcomponentes e ocultar o ícone, poderá obter o zenity em um tamanho de 440x65:

    
por 20.06.2013 / 09:21
2

Se você tem a possibilidade de iniciar wmctrl depois de criar a janela, você tem algum controle sobre ela. com:

wmctrl -r Information -e 1,100,100,200,70

No entanto, parece haver um tamanho vertical mínimo sob o qual zenity não deseja redimensionar.

    
por 20.06.2013 / 08:29
1

Parece ser um bug antigo e não tenho certeza se esse bug já foi corrigido. Mas eu ainda tenho esse problema no meu Linux Mint 17.1. No entanto, encontrei uma solução alternativa que funciona para mim e pode funcionar para outras pessoas também:

A opção --no-wrap é o que faz o truque (como mencionado anteriormente). Omita a opção --width e --height ou configure-a para o valor mínimo que você exige. E adicione a opção --no-wrap . Agora use \n onde você quiser para quebrar a linha (sentença). A largura do pop-up se ajustará à sentença mais longa. Use \n\n para criar uma linha vazia.

Aqui está um exemplo:

zenity --warning --title="Zenity | Workaround excessive height" --width=100 --height=100 --no-wrap --text="<big><b>Zenity problem:\n Excessive height with long text.</b></big>\n\nSomehow Zenity's option '<b>--height</b>' doesn't seem to do the job.\nHowever, this doesn't have to spoil your fun! Omit the '<b>--width</b>'\nand '<b>--height</b>' option or set it to the minimum value you require.\nAnd add the '<b>--no-wrap</b>' option. Now use '<b>\\n</b>' wherever you want\nto break the line (sentence). The width of the popup will adjust\nitself to the longest sentence."

PS. Eu melhorei minha explicação e substituí o exemplo, pois ele não funcionava no terminal (apesar de funcionar bem com um script).

    
por 16.07.2015 / 13:07
1

Adicionar --no-wrap a zenity parece resolver o problema.

EDIT # 1

Após mais testes, parece ser um erro zenity .

Se o agrupamento de texto for usado (o que em zenity é usado por padrão), parece definir a altura da janela com base na largura mínima da janela, com a quebra de texto tornando esse tamanho mais alto. No entanto, a caixa de diálogo resultante é muito mais ampla, fazendo com que a quebra de texto seja mais curta, o que resulta em uma janela muito alta para o texto.

existem duas soluções alternativas

  1. adicione --no-wrap para desativar o agrupamento. Se o texto não for muito largo, você poderá usá-lo. No entanto, se ele for muito largo, a caixa de diálogo será muito ampla para a tela e talvez seja necessário criar novas linhas para quebra automática, se o texto for codificado. Se o texto for gerado automaticamente de algum lugar, talvez seja necessário examinar o comando fold para ajustar o texto.

  2. altere --warning --info e --error para --question . Por alguma razão, parece que a questão não é afetada por isso, e o tamanho do diálogo é muito mais sensato. O problema aqui é que uma caixa de diálogo de erro será exibida com o ícone da pergunta. Você também será presenteado com "Sim" & "Não" botões em vez de apenas o botão "OK".

por 31.07.2013 / 03:09

Tags