test.py.qrinput 的内容是:
abc
没有 newline.
quickrun 执行的 buffer test.py 是:
import sys
s = sys.stdin.read()
print(s)
结果 quickrun 输出为空.
如果 test.py.qrinput 的内容加上 newline, 就有输出.
执行会执行的是 quickrun-exec. 其中关于 input-file 的逻辑在 quickrun–send-file-as-stdin, 实现如下:
(defun quickrun--send-file-as-stdin (process file)
"Not documented."
(let ((open-buf-func (cond ((file-exists-p file) 'find-file-noselect)
((get-buffer file) 'get-buffer))))
(when open-buf-func
(quickrun--log "Send '%s' to STDIN of %s" file (process-name process))
(with-current-buffer (funcall open-buf-func file)
(process-send-region process (point-min) (point-max))
(process-send-eof process)))))
主要就是调用了 (process-send-region process (point-min) (point-max))
, edebug 这个函数,
试了一下 eval (buffer-substring-no-properties (point-min) (point-max))
. 并没有问题, 有内容的, 而调用的 process-send-region, 是 emacs built-in function, 是 c 写的. 所以看起来好像 quickrun 的实现并没有任何问题. 为什么 .qrinput 就不 work?