通常,在管使用時,在交互使用設計的(當他們自己的終端)禁用交互功能(如歷史UP/DOWN,完成了TAB)程序。
Emacs通常使用管道進行外部處理。因此禁用了交互功能。
你發送TAB,你的客戶端程序不會爲你解釋它,只要你想。
您可以閱讀程序的man/help,並通過提供命令行開關(例如--GNU Bash的--login)來嘗試強制交互模式。
要發送TAB EVAL:
(defun my-comint-send-string (string)
"Send string to comint buffers. Useful for *compilation* read-only buffer."
(interactive
(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Ç-QTABRET。
但是,如果在你的程序的標準輸入輸出啓用緩衝(刷新輸入你還必須發送\ n)的,這可能無法正常工作......
晴同樣的問題在Bash autocompletion in Emacs shell-mode
注意的Mx長期討論使用僞終端,以便所有交互式程序按需要工作。但在此模式下,您將失去任何Emacs編輯功能...