2012-11-17 7 views
7

में अनबफर किए गए कीबोर्ड इनपुट को पढ़ना क्लोजर में टर्मिनल (स्विंग नहीं) से एक एकल कीस्ट्रोक कैसे पढ़ता है?क्लोजर

मैंने जेएल लाइब्रेरी के variousversions सहित कुछ चीजों की कोशिश की है, लेकिन इसे काम नहीं मिला है (नीचे उदाहरण देखें)।

मैं खुशी से काम कर रहा हूं, यूनिक्स-केवल (मैक, लिनक्स, ...) उदाहरण। आदर्श रूप से मैं जानना चाहता हूं कि स्टडीन और स्टडआउट दोनों के लिए बफरिंग बंद कैसे करें।

यहाँ कुछ बंद है:

;; project.clj dependencies: 
;; [[org.clojure/clojure "1.4.0"] 
;; [jline/jline "2.8"]]) 

(ns slosh.core 
    (:import [jline.console ConsoleReader]) 
    (:gen-class))  

(defn -main [] 
    (println "start") 
    (let [cr (ConsoleReader.)] 
    (.readCharacter cr) 
    (println "done"))) 

यह प्रिंट "शुरुआत" लेकिन नियंत्रण-सी को छोड़कर किसी भी इनपुट का जवाब नहीं है।

उत्तर

5

मुझे यकीन नहीं है कि आप इसे कैसे चला रहे हैं, लेकिन यदि आप lein run का उपयोग कर रहे हैं, तो आप समस्याओं में भाग लेंगे। lein trampoline run का उपयोग करने का प्रयास करें।

मैं Single character console input in java/clojure लिंक करूंगा लेकिन ऐसा करने के लिए मेरे पास पर्याप्त इंटरनेट अंक नहीं हैं।

+0

'लीन ट्रैम्पोलिन रन' वास्तव में काम करता है, जैसा कि उबरर से चल रहा है। कोई विचार क्यों कोई काम करता है और दूसरा नहीं? – JohnJ

+1

'लीन रन' के साथ उपयोग किया गया 'sh' फ़ंक्शन केवल उप-प्रोसेस के रूप में चलने वाले प्रोजेक्ट के 'आउट' और' त्रुटि 'को हुक करता है (https://github.com/technomancy/leiningen/blob/master/leiningen-core देखें /src/leiningen/core/eval.clj#L155)। 'ट्रैम्पोलिन' परियोजना को 'इन', 'आउट' और खोल से जुड़ी 'गलती' के साथ एक स्वतंत्र प्रक्रिया के रूप में चलाने का कारण बनती है। – johnwayner

+0

बहुत बढ़िया, धन्यवाद! – JohnJ