Intereting Posts
Нет CPU в таблице Process в системном мониторе ifconfig показывает неверный IP-адрес В Vim, как я могу удалить весь текст из текущей позиции курсора до следующего пробела? Как мне изменить адрес FROM с помощью mailx на FreeBSD из командной строки? Как просмотреть содержимое моего жесткого диска другим пользователем, отличным от root. Я все время отказываюсь от разрешения условный DirectoryIndex на основе IP-адреса, используя .htaccess Вывод ANSI в приглашении Pash отображается как мусор в терминале Gnome Когда и почему я должен использовать обновление apt-get? В чем разница между STDIN и аргументами, переданными команде? Как установить часы в Debian 8 Вопрос об экологической переменной Как отделить содержимое первого столбца в разных строках Выполнение команды с помощью ssh и предотвращение закрытия соединения (с помощью Control + C) Как автоматизировать настройку сервера Linux? bash, который включает содержимое из файла как часть команды

Окна диалога Zenity имеют чрезмерную высоту и не могут быть изменены. Ошибка обхода?

Я пытаюсь сделать что-то в зените, и это заставило меня запугивать. Чтобы проиллюстрировать мою проблему, попробуйте выполнить следующее:

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

Достаточно просто. Теперь попробуйте следующее:

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

Обратите внимание, как диалоговое окно стало значительно выше?

Таким образом, вы можете изменить размер диалогового окна. В частности, обратите внимание, что происходит, когда вы пытаетесь сделать ширину как можно меньше. Это иллюстрирует мой следующий момент: вы не можете изменять высоту DOWN вообще – у нее, как представляется, есть жесткий минимум, основанный на высоте, которая потребуется, если ваше диалоговое окно было сжато горизонтально до наименьшего возможного размера.

Ничего из этого не имеет для коротких сообщений, но что, если у вас длинное сообщение? Вам не нужно много вводить, чтобы в итоге появилось диалоговое окно, которое настолько велико, что кнопка ok выключена с экрана – и это большая проблема для моих пользователей.

Вот сообщение об ошибке: FS # 34164: [zenity] – ошибка размера диалогового окна https://bugs.archlinux.org/task/34164

Но этот патч не приносит мне никакой пользы. Мои конечные пользователи устанавливают Zenity на своих компьютерах, и я не могу исправлять их Zenity.

Есть ли способ обойти это? Любые трюки в отношении текста или чего-нибудь еще?

Я не понял способ уменьшить его размер ниже значений по умолчанию. gxmessage этого вы можете попробовать gxmessage . Он может быть уменьшен, хотя он также имеет минимальный размер, который может быть усохнут. У этого есть лучшие поверхности управления, IMO, чем zenity относительно выбора размера шрифта и размеров окна, хотя.

пример

 $ 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." 

ss of gxmessage

.gtkrc-2,0

Если вы действительно хотите контролировать внешний вид приложений GTK +, я считаю, что подходящий путь – через файл ресурсов $HOME/.gtkrc-2.0 . Вы можете добавить такие вещи, как шрифт здесь, чтобы переопределить, чтобы сказать моноширинный шрифт. Для экспериментов я сделал копию .gtkrc-2.0 и назвал ее .gtkrc-20.mono8 .

Следующее сделает шрифт monospace по умолчанию 8:

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

Затем вы можете управлять использованием этого файла GTK + такими приложениями:

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

Итак, вот zenity использующие значения по умолчанию:

файл zenity rc по умолчанию

Вот zenity используя наш .gtkrc-2.0.mono8 ресурсов .gtkrc-2.0.mono8 :

Файл mono8 zenity rc

ПРИМЕЧАНИЕ. Приведенная выше команда была следующей:

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

GTK-паразит

Таким образом, вы можете видеть, что мы можем управлять приложениями GTK + через файл .gtkrc-2.0 но какие параметры мы можем поместить в этот файл. Ну, есть приложение для этого 8-), называемое gtk-паразитом . Это было в моих хранилищах Fedora как gtkparasite .

После установки вы вызываете его против приложения GTK + следующим образом:

 $ GTK_MODULES=gtkparasite <gtk app> 

Итак, давайте обратимся к zenity :

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

Если вы возитесь с изменением интервала в некоторых субкомпонентах и ​​скрываете значок, вы можете получить zenity до размера 440×65:

ss of little zenity

Если у вас есть возможность запустить wmctrl после создания окна, у вас есть некоторый контроль над ним, например:

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

Однако, как представляется, минимальный вертикальный размер, при котором zenity не хочет изменять размер.

Добавление --no-wrap в zenity похоже, исправить.

EDIT # 1

После большего тестирования, похоже, это ошибка в zenity .

Если используется текстовая обработка (которая по умолчанию используется по умолчанию), она, как представляется, устанавливает высоту окна на основе минимальной ширины окна, при этом обтекание текста делает этот размер выше. Тем не менее, полученный диалог намного шире, в результате чего перенос текста становится короче, что приводит к слишком высокому окну для текста.

существуют два обходных пути

  1. Добавьте --no-wrap чтобы отключить упаковку. Если ваш текст не слишком широк, вы можете использовать его, но если он слишком широк, диалог будет слишком широким для экрана, и вам, возможно, придется создавать новые строки для ручной упаковки, если текст жестко закодирован. Если текст будет автоматически сгенерирован откуда-то, вам, возможно, придется заглянуть в команду fold чтобы текст соответствовал.

  2. change --warning --info и --error to --question . По какой-то причине кажется, что вопрос не затрагивает вопрос, и размер диалогового окна намного более разумен. Ловушка здесь заключается в том, что с значком вопроса появится диалоговое окно с ошибкой. Также вам будут предложены кнопки «Да» и «Нет» вместо кнопки «ОК».

Кажется, это старый баг, и я не уверен, исправлена ​​ли эта ошибка. Но у меня все еще есть эта проблема на моем Linux Mint 17.1. Однако я нашел обходное решение, которое работает для меня и может работать и для других:

Опция --no-wrap – вот что делает трюк (как упоминалось ранее). Опустите параметр --width и --height или установите его на минимальное --height значение. И добавьте опцию --no-wrap . Теперь используйте \n везде, где вы хотите разбить строку (предложение). Ширина всплывающего окна настраивается на самое длинное предложение. Используйте \n\n для создания пустой строки.

Вот пример:

 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. Я улучшил свое объяснение и заменил пример, поскольку он не запускался с терминала (хотя он отлично работал с скриптом).