Как я могу изменить значок диалога Zenity?

Переменные следует использовать в нижнем регистре (это наилучшая практика).
Итак, я буду использовать имя файла и расширение вместо FILENAME и EXTENSION

Поскольку вы говорите, что «имя файла считывается из файла», я предположу, что сценарий:

read -r filename  <file.txt
extension=World.txt

и что вы хотите объединить обе переменные $ имя файла и $ расширение с подчеркиванием _ .
Примеры, которые вы предоставляете (за исключением: нет double\) правильно работают здесь:

name=${filename}_$extension
name=${filename}'_'$extension
name=$filename\_$extension

Как и некоторые другие:

name="${filename}"'_'"${extension}"
name="$filename"'_'"$extension"
name="${filename}_${extension}"

Итак, ваша проблема не в том, как переменные держатся вместе, а с содержанием vars. Кажется разумным думать, что это:

read -r filename  <file.txt

прочитает возврат каретки \r при чтении из файла окна.

Одним из простых решений (для ksh, bash, zsh) является удаление всех управляющих символов из читаемой переменной:

filename=${filename//[[:cntrl:]]/}

Это может быть смоделировано значением, которое имеет возврат каретки:

$ filename=$'Hello\r'
$ echo "starting<$filename>end"
>endting<Hello                       ### note the return to the start of line.
$ echo "starting<${filename//[[:cntrl:]]/}>end"
starting<Hello>end

Или, заменяя значение имя файла :

$ filename="${filename//[[:cntrl:]]/}"
$ echo "start<$filename>end"
start<Hello>end

Заключение.

Таким образом:

name="${filename//[[:cntrl:]]/}_${extension//[[:cntrl:]]/}"

Будет получено правильное значение для name , даже если другие переменные содержат управляющие символы.

-121--7252-

В то время как $1 обычно имеет особое значение (первый параметр, переданный сценарию/функции/и т.д.), вы действительно можете сохранить выходные данные команд в переменных.

title=$(jq '.results[0].title' file.json)
curl -i -H "Accept: application/html" -H "Content-Type: application/html" -X GET http://example.com/test/"$title" > test.txt

Первая часть выполняет команды jq '.results [0] .title' file.json и сохраняет выходные данные (все, что отображается на stdout , в переменной title . Затем выполните команду завитков и разверните переменную title как часть url

-121--209414-

Введите control-b , а затем измененный ключ (отпустите control и b перед вводом измененного ключа). Клавиша Apple/command ничего не делает в рамках обычной терминальной сессии, и Распян не распознает клавишу (и тот факт, что она нажата, вероятно, даже не передается по ssh-соединению). tmux требует ключа управления в качестве модификатора, если не изменить значения по умолчанию, изменение на команду, скорее всего, не сработает и, если это так, может создать другие проблемы.

Извините, я должен был осознать проблему раньше, но я не прочитал ваш вопрос достаточно близко, я думаю. Вы не вводите клавишу Apple/command, когда находитесь в терминале, вы используете фактическую клавишу «control», которая должна быть 2 клавишами слева от клавиши Apple/command. Вы делаете это в любой терминальной сессии, даже локально, так как клавиша Apple/command остается связанной с GUI AQUA (например, если вы нажмете Command-f в терминале, вы выведете поле GUI Find за пределы терминала, который является частью оболочки приложения Terminal, на терминал. Системы Linux и Unix (включая Darwin) обычно не распознают ключ Apple/command. В том случае, если вам нужна мета-клавиша, обычно необходимо включить эту клавишу в настройках терминала.

4
09.12.2018, 11:34
2 ответа

Во-первых, --window-icon— это значок, отображаемый в строке заголовка окна, а не значок в диалоговом окне, который помещается слева от указанного вами текста.

Во-вторых, последний значок можно установить с помощью --icon-name, что является недокументированной функцией, которая не отображается на странице руководства.

Тем не менее, здесь не разрешен путь, а только одно из предопределенных имен «ошибка», «информация», «вопрос», «предупреждение» и, возможно, «пароль».

В Debian эти имена преобразуются в пути к файлам значков, например, «info» в /usr/share/icons/gnome/xx/status/dialog-information.png, где «xx» — это разрешение значка, которое рассчитывается как подходящее для отображения в диалоговом окне в зависимости от разрешения экрана., например "48x48".

Если для параметра --icon-nameустановлено недопустимое значение, значок вообще не отображается.

Если вы опустите --icon-name, то будет использоваться жестко заданная иконка в zenity.

Итак, если вы хотите отобразить другой значок, например, в «информационном диалоговом окне», вам нужно будет указать --icon-name=infoи заменить существующий значок, например. /usr/share/icons/gnome/48x48/status/dialog-information.pngна любой вкус, который может иметь разрешение, отличное от 48x48.

Обновление:

Говоря о подкаталоге gnome/:Это соответствует теме значка, которую я выбрал в настройках внешнего вида. Например, если бы я выбрал «Adwaita», подкаталог был бы Adwaita/.

6
27.01.2020, 20:54

@nst0022 правильно, используйте --icon-name="foo", но, похоже, вы можете использовать любое из стандартных имен значков в GNOME (см.https://developer.gnome.org/icon-naming-spec/#names).

Спасибо всем, кто ответил на этот вопрос здесь:https://askubuntu.com/questions/526202/getting-window-icon-to-work-with-zenity

0
27.01.2020, 20:54

Теги

Похожие вопросы