Linux
Yad:通過按鈕或輸入欄位選擇文本
我想創建一個顯示 1 個按鈕和 1 個輸入欄位的 yad 命令。我希望當使用者點擊按鈕時,將預定義的文本返回到標準輸出。當使用者在輸入欄位中寫入內容並按下輸入/點擊另一個按鈕時,輸入欄位文本將返回到標準輸出。
你會怎麼做這樣的事情?
所以你想要這樣的東西:
where
Default
列印一個預設值stdout
並關閉對話框。不確定是否可以不將其包裝在腳本中。您可以使用退出狀態來檢測按下了哪個按鈕並採取相應的措施。可以將其列印到,
stdout
但 AFAIK 沒有辦法在不終止程序的情況下關閉對話。如果您擷取輸入,則每次按下按鈕都會產生一個額外的欄位。最好的折衷辦法是使用
--entry-text
具有預設值的選項,例如:yad \ --entry \ --text "Enter value" \ --entry-text="foo" \ --button=gtk-ok
給你這樣的東西:
可選地添加
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 無法關閉對話,而終止程序是唯一的出路(注意引號)。Yad
YAD_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。我的不是。