我喜欢在psql.el下运行Postgres客户端“psql”,同时在单独的窗口中与.sql文件交互。有时,我想在运行psql进程的缓冲区中使用tab completion来查找适当表名的名称。但是,我不知道怎样才能得到想要的结果。
这里有一个非常相关的问题:https://superuser.com/questions/236574/how-can-i-send-a-literal-tab-to-bash-in-emacs-shell-mode
没有任何成功的建议。
提前谢谢!
设置JMP
最佳答案
通常,为交互使用而设计的程序(当它们拥有终端时)在管道中使用时会禁用交互功能(如上/下历史记录、制表符完成)。
Emacs通常将管道用于外部进程。因此交互功能被禁用。
即使您发送TAB,您的客户端程序也不会按照您的需要为您解释它。
您可以阅读程序的man/help,并通过提供命令行开关(例如--login for GNU Bash)尝试强制交互模式。
发送TAB eval:
(解除我的comint发送字符串(字符串)
“将字符串发送到comint缓冲区。对于*编译*只读缓冲区很有用。”
(互动式
(list(read input“Type string:”nil“我的comint发送历史列表))
)
(comint发送字符串(获取缓冲区进程(当前缓冲区))字符串)
)
(定义键XXX mode map[C-return]'我的comint发送字符串)
并使用这样的键序列:C-RET C-q TAB RET。
但如果对程序的stdio启用了缓冲(要刷新输入,也必须发送\n
)。。。
在Bash autocompletion in Emacs shell-mode
注意M-x术语使用伪终端,因此所有交互程序都按需要工作。但在此模式下,您将失去任何Emacs编辑功能。。。