通常,为交互使用而设计的程序(当他们拥有终端时)在管道中使用时会禁用交互功能(例如 UP/DOWN 的历史记录,TAB 的完成)。
Emacs 通常将管道用于外部进程。因此禁用了交互功能。
即使您发送 TAB,您的客户端程序也不会按照您的意愿为您解释它。
您可以阅读程序的 man/help 并通过提供命令行开关(如 GNU Bash 的 --login)来尝试强制交互模式。
发送 TAB 评估:
(defun my-comint-send-string (字符串)
“将字符串发送到 comint 缓冲区。对于 *编译 * 只读缓冲区很有用。”
(交互的
(list (read-input "Type string: " nil 'my-comint-send-hist-list)))
(comint-send-string (get-buffer-process (current-buffer)) string))
(define-key XXX-mode-map [C-return] 'my-comint-send-string)
并使用这样的键序列:C-RET C-q TAB RET.
但是,如果为程序的 stdio 启用了缓冲(要刷新输入,您也必须发送),这可能不起作用\n
...
与Emacs shell-mode 中的 Bash autocompletion讨论的问题基本相同
注意Mx 术语使用伪终端,因此所有交互式程序都可以按需要工作。但是在这种模式下,您将失去任何 Emacs 编辑功能......