2012-01-11 13 views
6

मैं एक बहुत ही सरल बैश स्क्रिप्ट करने की कोशिश कर रहा हूं जो उपस्थिति में चेकबॉक्स के व्यवहार को अनुकरण करता है! मैं इसे कुछ विकल्प दिखाना चाहता हूं और बाएं या दाएं तीर कुंजियों की कुंजी प्रेस के अनुसार कर्सर को अगले चेकबॉक्स में ले जाना चाहता हूं। मैं पहले से ही तीर कुंजियों का पता लगाने के लिए रीड और Ansii एस्केप अनुक्रमों का उपयोग करके ऐसा करने में कामयाब रहा हूं और मैं कर्सर को स्थानांतरित करने के लिए ट्यूट का उपयोग करता हूं।बैश स्क्रिप्ट के साथ चेकबॉक्स

इसके साथ मेरी समस्या यह है कि मुझे दबाए जाने के लिए एक निश्चित अक्षर (उदाहरण के लिए एक्स) पढ़ने की आवश्यकता है और फिर एक और कार्रवाई करें। लेकिन मैं इस कुंजी प्रेस का पता कैसे लगा सकता हूं और साथ ही यह पता लगा सकता हूं कि एक तीर कुंजी दबाया जा रहा है या नहीं ??

ansii कोडों का पता लगाने के लिए मुझे 3 अक्षरों और एक्स वर्ण ("चयन" की कुंजी) के साथ पढ़ने की आवश्यकता है, मुझे केवल एक को पढ़ने की जरूरत है, मैं 3 अक्षरों को कैसे पढ़ सकता हूं और साथ ही एक ही पढ़ सकता हूं?

इसके अलावा मैं कुछ बनाने की कोशिश कर रहा हूं ताकि उपयोगकर्ता बाएं या दायां तीर कुंजी या एक्स कुंजी दबा सकें लेकिन यदि वह किसी अन्य कुंजी को दबाता है, तो कुछ भी नहीं होना चाहिए! है सबसे उत्तम कोड कभी

#!/bin/bash 
## Here I just print in the screen the "form" with the "checkboxes" 
function screen_info(){ 
clear 
cat <<EOF 

    /\_/\_/\_/\_/\_/\_/\_/\_/\_/\_ 
    || 
    ||  1[ ] 2[ ] 3[ ] 
    || 
    ############################# 



EOF 
} 

## This function detects the arrow keys and moves the cursor 
function arrows(){ 

## I use ANSII escape sequences to detect the arrow keys 
left_arrow=$'\x1b\x5b\x44' #leftuierda 
right_arrow=$'\x1b\x5b\x43' #rightecha 
just_x_key="" 

## With tput I move the cursor accordingly 
cursor_x=14 
cursor_y=3 
tput cup $cursor_y $cursor_x 

while [ -z "$just_x_key" -o "$just_x_key" != "$just_x_key" ]; do 
    read -s -n3 key 
    while [ `expr length "$key"` -ne 3 ]; do 
     key="" 
     read -s -n3 key 
     break 
    done 
    case "$key" in 
    $left_arrow) 
     if [ $cursor_x -gt 14 ]; then 
      cursor_x=`expr $cursor_x - 8` 
     fi 
     tput cup $cursor_y $cursor_x 
     #This is supposed to be a simple condition detecting the x key pressed wich I want to trigger something... But how to read a single character to this condition and 3 characters at the same time if the user presses the arrow key ???? =/ 
     #read -s just_x_key 
     #if [ $just_x_key == x ]; then 
     # echo X 
     # tput cup 7 15 
     # echo "YOU PRESSED THE RIGHT KEY!!! =D" 
     #fi 
     ;; 
    $right_arrow) 
     if [ $cursor_x -lt 28 ]; then 
      cursor_x=`expr $cursor_x + 8` 
     fi 
     tput cup $cursor_y $cursor_x 
     #read -s just_x_key 
     #if [ $just_x_key == x ]; then 
     # echo X 
     # tput cup 7 15 
     # echo "YOU PRESSED THE RIGHT KEY!!! =D" 
     #fi 
     ;; 
    esac 
done 

exit $? 
} 


#EXECUTION 
#========= 

## I just call the functions! 
screen_info 
arrows 

हाँ मैं जानता हूँ कि, ऐसा नहीं है, लेकिन मैं सीखने के लिए कोशिश कर रहा हूँ:

मैं इस इतनी दूर किया है। सुझावों की बहुत सराहना की जाएगी।

+0

क्या आपने अभी तक 'चयन' कथन को देखा है? यह बिल्कुल चेकबॉक्स नहीं है, लेकिन यह एक क्रमांकित मेनू है। – SiegeX

+0

@ घेराबंदी हां मैं इस आदेश के बारे में जानता हूं और इसे आजमाया, हालांकि मुझे कीबोर्ड पर कुछ कुंजी स्वीकार करने के लिए मजबूर करने का कोई तरीका नहीं मिला। मैं चाहता हूं कि मेरी छोटी लिपि उपयोगकर्ता-सुरक्षित-सबूत हो = पी मेरा मतलब है कि उपयोगकर्ता कुछ भी टाइप नहीं कर सकता! चुनिंदा होने के बावजूद यदि यह उपयोगी है, तो विकल्प 1, 2, 3 हैं, तो उपयोगकर्ता idfsbhisdolasokjcmnh टाइप कर सकता है और मैं चाहता हूं कि उन्हें केवल वांछित टाइप करने के लिए मजबूर किया जाए और शेष कीबोर्ड "लॉक" हो। आपके उत्तर के लिए धन्यवाद;) – Metafaniel

उत्तर

7

तुम सिर्फ एक लिपि में चेक बॉक्स चाहते हैं, आप चेक बॉक्स बनाने के लिए whiptail(1) या dialog(1) उपकरणों का उपयोग कर सकते हैं:

$ whiptail --checklist "Please pick one" 10 60 5 one one off two two off\ 
    three three off four four off five five off 


       ┌──────────────────────────────────────────────────────────┐ 
       │ [ ] one one          │ 
       │ [*] two two          │ 
       │ [ ] three three          │ 
       │ [*] four four          │ 
       │ [ ] five five          │ 
       │               │ 
       │    <Ok>     <Cancel>    │ 
       │               │ 
       └──────────────────────────────────────────────────────────┘ 

"two" "four"$ 

अंतिम "two" "four" चयनित प्रविष्टियों whiptail(1) कार्यक्रम से लौटे है।

यदि आप इसे अपने मजाक के लिए प्रोग्रामिंग कर रहे हैं, तो मुझे बताएं और मैं आशा करता हूं कि भविष्य में यह संकेत किसी और को उपयोगी संकेत मिलेगा।

+0

मैंने संवाद के बारे में पढ़ा, लेकिन मैं कुछ करना चाहता था क्योंकि मैं कुछ और स्थापित नहीं करना चाहता था, जिसे डिफ़ॉल्ट रूप से इंस्टॉल नहीं किया गया है (लुबंटू 10 में उपयोग किया जाना चाहिए।10 पतली टर्मिनलों में) लेकिन मुझे whiptail के बारे में पता नहीं था और यह उस डिस्क में स्थापित है जिसे मुझे स्क्रिप्ट = डी चलाने की आवश्यकता है, मैं निश्चित रूप से इसे आजमाउंगा! धन्यवाद। हालांकि, purpouses सीखने के लिए, मैंने अपनी छोटी लिपि में कुछ घंटे बिताए, यह जानना दिलचस्प होगा कि पढ़ने वाले 1 चरित्र को कैसे दूर किया जाए और एक ही समय में 3 वर्ण पढ़ें;) आपके उत्तर के लिए धन्यवाद, काफी उपयोगी;) – Metafaniel

4

वैकल्पिक रूप से, आप https://sites.google.com/site/easybashgui

पर मेरे पुस्तकालय का उपयोग कर सकते यह पता लगाता है स्वचालित रूप से अगर संवाद या whiptail स्थापित किया गया है। (आम तौर पर, दोनों में से कम से कम एक हमेशा भी नंगे सिस्टम में मौजूद है ...)

तो अपनी स्क्रिप्ट हो जाता है:

source easybashgui; menu 1 2 3 ; clean_temp

पहिया क्यों पुनर्रचना? ; पी

संबंधित मुद्दे