Bir kaynak bloğunu dolaşırken STDIN'den kullanıcı girişini okumak mümkün müdür org-babel-tangle
?
Bunun farkındayım: Org Mode Babel - Etkileşimli kod bloğu değerlendirmesi .
Bu, bu özel kullanım senaryosunun çözülmesine yardımcı olmaz, çünkü hala kabuktan düzgün STDIN girişine izin vermez, ancak yalnızca Emacs için sınırlı bir girişi dahili olarak simüle eder .
Arka fon
Bir kuruluş dosyasından bazı öğreticiler yürüterek yeni programlama dillerini (Perl ve Bash) öğrenmek için Org'un Babil'ini kullanmak istiyorum.
Sorun, birçok öğreticinin STDIN'e güvenmesidir. Örneğin, aşağıdaki perl tidbit çalıştırılırsa:
#+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, kullanıcının etkileşiminin STDIN'de düzgün bir ad yazmasını beklemez ve hemen çıktı:
#+RESULTS:
: What is your name?
: Hello , how are you?
Aynı şey bash örneği kullanarak. Bu:
#+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
Kullanıcı girdisini beklemez ve Emacs hemen bunu döndürür:
#+RESULTS:
: TEST_DIR was not set, please enter the path:
Emacs'ın yürütülen karışık bir blokta girdi beklemesinin yerel bir yolu var mı?
Değilse, bir tangle-and-run-via-shell-buffer
işlev gibi bir şeyin nasıl yazılacağına dair bazı işaretler verir misiniz :
- Kod bloğunu noktaya dolaştırıp verilen dosya adıyla kaydedin,
- ilgili dosyayı görünür bir
shell
arabellekte yürütme , - muhtemelen kullanıcıdan girdi kabul etmek,
- ve son olarak
STDOUT
, eğer varsa#+RESULTS:
?
Bu özellik Org'da (henüz) uygulanmadıysa, elisp ile nasıl uygulanabilir?
Güncelleme: Emacs ve elisp kılavuzlarını araştırıp inceledikten sonra, Comint'ten yararlanabileceği gibi, belki de olduğu gibi görünüyor make-comint-in-buffer
.
(make-comint-in-buffer "*cmd-buffer*" nil "perl" nil "hello-name.pl")
Ne yazık ki, şu an başımın üstünde 😣