Linux

Yad:通過按鈕或輸入欄位選擇文本

  • January 10, 2022

我想創建一個顯示 1 個按鈕和 1 個輸入欄位的 yad 命令。我希望當使用者點擊按鈕時,將預定義的文本返回到標準輸出。當使用者在輸入欄位中寫入內容並按下輸入/點擊另一個按鈕時,輸入欄位文本將返回到標準輸出。

你會怎麼做這樣的事情?

所以你想要這樣的東西:

OPS 對話

whereDefault列印一個預設值stdout並關閉對話框。

不確定是否可以不將其包裝在腳本中。您可以使用退出狀態來檢測按下了哪個按鈕並採取相應的措施。可以將其列印到,stdout但 AFAIK 沒有辦法在不終止程序的情況下關閉對話。如果您擷取輸入,則每次按下按鈕都會產生一個額外的欄位。

最好的折衷辦法是使用--entry-text具有預設值的選項,例如:

yad \
   --entry \
   --text "Enter value" \
   --entry-text="foo" \
   --button=gtk-ok

給你這樣的東西:

yad 預設輸入範例

可選地添加Cancel按鈕,如果你使用數據,你會想要檢查退出鍵和關閉對話×(即中止場景)。

這可能是最乾淨的方法,但誰知道呢。此外,使用者無需編寫整個文本即可輕鬆更改預設值。


使用退出程式碼yad

input=$(yad \
       --entry \
       --text "Enter text or press Default to use ‘foo’" \
       --button=Default:1 \
       --button=gtk-ok:0)

case $? in
1) input=foo ;;
252) echo 'Aborting'; exit 1;;
esac

printf 'INPUT: %s\n' "$input"

解析退出狀態

252當對話被×或 Escape 鍵關閉時,一個會獲得退出狀態。

您可能想要驗證按下input時是否為空。OK


另一種方法是使用 shell 呼叫,但是在回顯文本後,AFAIK 無法關閉對話,而終止程序是唯一的出路(注意引號)。YadYAD_PID執行時導出:

--button="Default":'sh -c "echo foo; kill YAD_PID;"'

# or

--form \
--input="Default":btn 'sh -c "echo foo; kill YAD_PID;"'

在這種情況下,也可以使用一個函式(注意使用 bash 如果是 bash 腳本),例如:

foo() {
   echo foo
   kill $YAD_PID
}

export -f foo

yad \
   --button="Default":'bash -c foo'

如果您可以使用HTML那當然是另一種選擇,但需要使用 webkit 編譯 Yad。我的不是。

引用自:https://unix.stackexchange.com/questions/685702