O Zenity só pode exibir o valor anterior quando há apenas um campo de entrada. Assim, o código abaixo coloca os valores anteriores nos campos de rótulo e instrui o usuário a digitar o novo valor em campos de entrada ou deixar em branco para manter o valor existente.
O Código Bash
#!/bin/bash
# Read configuration file with entries separated by " " into array
IFS=' ' read -ra CfgArr < ~/bin/adaptive-brightness-configuration-file
# Zenity form with current values in entry label
# because initializing multiple entry data fields not supported
output=$(zenity --forms --title="Laptop Adaptive Brightness Configuration" \
--text="Enter new settings or leave entries blank to keep (existing) settings" \
--add-entry="/sys/class/backlight/??????/brightness driver : (${CfgArr[0]})" \
--add-entry="Day time maximum display brightness : (${CfgArr[1]})" \
--add-entry="Transition minutes after sunrise to maximum : (${CfgArr[2]})" \
--add-entry="Night time minimum display brightness : (${CfgArr[3]})" \
--add-entry="Transition minutes before sunset to minimum : (${CfgArr[4]})")
IFS='|' read -a ZenArr <<<$output # Split zenity entries separated by "|" into array elements
# Update non-blank zenity array entries into configuration array
for i in ${!ZenArr[@]}; do
if [[ ${ZenArr[i]} != "" ]]; then CfgArr[i]=${ZenArr[i]} ; fi
done
# write configuration file using array (fields automatically separated by " ")
echo "${CfgArr[@]}" > ~/bin/adaptive-brightness-configuration-file
Fiquei surpreso depois de horas pesquisando, exemplos desse código não puderam ser encontrados. Espero que outros pesquisando o mesmo problema possam encontrar este código.
A tela
Nesta resposta, o formulário zenity
tem um pedido diferente e os rótulos expandidos para os campos. Embora 4882 seja o máximo para esse driver intel_backlight
, é como olhar para o sol e 1000 é o máximo prático para ambientes fechados.
Muito obrigado ao muru por orientar a conversão de código original do formato COBOL de estilo antigo usando nomes de campo, para o formato moderno de Bash utilizando matrizes.