正在学习 rust
,现在用 SPC m c c
编译项目,然后用 SPC m c x
运行,这时候会弹出一个 output buffer。我的程序需要接受用户输入才会运行,但在 output buffer 里面输入不了东西…
请问我应该怎样做?
正在学习 rust
,现在用 SPC m c c
编译项目,然后用 SPC m c x
运行,这时候会弹出一个 output buffer。我的程序需要接受用户输入才会运行,但在 output buffer 里面输入不了东西…
请问我应该怎样做?
在eshell里运行吧
那不就相当于直接在 shell 运行?
对啊,反正实质区别不大。
噢噢,这样。
如果是 shell/sed/awk
脚本,有个 :stdin
头可以传递用户输入:
定义一个块,模拟用户输入的结果
#+NAME: press_a
#+BEGIN_SRC sh :results output
echo a
#+END_SRC
自动填充 stdin
#+BEGIN_SRC sh :results output :stdin press_a
read -n 1 -p "Press any key to continue: " key
echo "You pressed: $key"
#+END_SRC
#+RESULTS:
: You pressed: a
其它语言虽然暂不支持 :stdin
,但还是有些可发挥的空间,以 python 为例:
把源代码 tangle 到文件
#+BEGIN_SRC python :tangle /tmp/user-input.py3 :eval no
key = input("Press any key to continue: ")
print("\nYou pressed: %s" % key)
#+END_SRC
通过 shell 块执行文件,并传递用户输入
#+BEGIN_SRC sh :results output
echo a | python3 /tmp/user-input.py3
# or
# python3 /tmp/user-input.py3 <<< b
#+END_SRC
#+RESULTS:
: Press any key to continue:
: You pressed: a
这样就不需要离开 emacs,去 shell 敲命令了。
前面的源代码快还可以做到自动 tangle,最后只需在 shell 这个块上按 C-c C-c 就可以了,参考:Org-mode 如何自动 tangle 一个代码块?