क्या स्रोत ब्लॉक को टेंगल करते हुए STDIN से उपयोगकर्ता इनपुट पढ़ना संभव है org-babel-tangle
?
मुझे इस बारे में पता है: ऑर्ग मोड बैबेल - इंटरएक्टिव कोड ब्लॉक मूल्यांकन ।
यह इस विशेष उपयोग के मामले को हल करने में मदद नहीं करता है, क्योंकि यह अभी भी शेल से उचित STDIN इनपुट की अनुमति नहीं देता है, लेकिन केवल एक सीमित इनपुट को Emacs में आंतरिक रूप से अनुकरण करता है।
पृष्ठभूमि
मैं ओआरजी फाइल से कुछ ट्यूटोरियल को निष्पादित करके नई प्रोग्रामिंग भाषाओं (पर्ल और बैश) को सीखने के लिए ऑर्ग के बैबेल का उपयोग करना चाहूंगा।
समस्या यह है कि कई ट्यूटोरियल एसटीडीआईएन पर भरोसा करते हैं। उदाहरण के लिए, यदि कोई निम्नलिखित पर्ल टिडबिट चलाता है:
#+BEGIN_SRC perl :tangle hello-name.pl :results output :export code
use 5.010;
use strict;
use warnings;
say "What is your name?";
my $name=<STDIN>;
say "Hello $name, how are you?";
#+END_SRC
Emacs उपयोगकर्ता के STDIN पर नाम ठीक से टाइप करने के लिए बातचीत का इंतजार नहीं करेंगे , और यह तुरंत आउटपुट कर देगा:
#+RESULTS:
: What is your name?
: Hello , how are you?
एक बैश उदाहरण का उपयोग कर एक ही बात। इस:
#+BEGIN_SRC sh :results output :export code :tangle dir-input.sh
#!/bin/bash
if [ -z "$TEST_DIR" ]
then
echo "TEST_DIR was not set, please enter the path: "
read input_variable
export TEST_DIR=$input_variable
fi
#+END_SRC
उपयोगकर्ता इनपुट के लिए इंतजार नहीं करेंगे, और Emacs तुरंत इसे वापस कर देंगे:
#+RESULTS:
: TEST_DIR was not set, please enter the path:
क्या एमएसीएस के लिए एक मूल तरीका है एक निष्पादित पेचीदा ब्लॉक पर इनपुट की प्रतीक्षा करना?
यदि नहीं, तो क्या आप कृपया कुछ संकेत दे सकते हैं tangle-and-run-via-shell-buffer
कि एक फ़ंक्शन की तरह कुछ कैसे लिखें :
- बिंदु पर कोड ब्लॉक को टेंगल करें, दिए गए फ़ाइल नाम के साथ बचत करें,
- दृश्यमान
shell
बफ़र में संबंधित फ़ाइल निष्पादित करें , - संभवतः उपयोगकर्ता से इनपुट स्वीकार करना,
- और अंत में रिपोर्टिंग
STDOUT
, यदि कोई हो, को#+RESULTS:
?
यदि ऑर्ग में ऐसी सुविधा (अभी तक) लागू नहीं है, तो कोई इसे कैसे लागू कर सकता है?
अपडेट: अधिक Emacs और elisp मैन्युअल की खोज और अध्ययन के बाद, ऐसा लगता है कि ऐसा करने का तरीका शायद कॉमिंट का लाभ उठाना होगा , जैसे कि make-comint-in-buffer
।
(make-comint-in-buffer "*cmd-buffer*" nil "perl" nil "hello-name.pl")
दुर्भाग्य से, यह अभी मेरे सिर पर है my