Gnu Emacs:在 sql.el 进程中运行的 psql 的制表符补全
问题:Gnu Emacs:在 sql.el 进程中运行的 psql 的制表符补全
我喜欢在 psql.el 下运行 Postgres 客户端“psql”,同时在单独的窗口中与 .sql 文件进行交互。有时,我想在运行 psql 进程的缓冲区中使用制表符补全来查找适当表名的名称。但是,我无法弄清楚如何导致预期的结果。
这里提出了一个非常相关的问题:https://superuser.com/questions/236574/how-can-i-send-a-literal-tab-to-bash-in-emacs-shell-mode
没有任何成功的建议。
提前致谢!
SetJmp
解答
通常,为交互使用而设计的程序(当他们拥有终端时)在管道中使用时会禁用交互功能(例如 UP/DOWN 的历史记录,TAB 的完成)。
Emacs 通常将管道用于外部进程。因此禁用了交互功能。
即使您发送 TAB,您的客户端程序也不会按照您的意愿为您解释它。
您可以阅读程序的 man/help 并通过提供命令行开关(如 GNU Bash 的 --login)来尝试强制交互模式。
发送 TAB 评估:
(defun my-comint-send-string (字符串)
“将字符串发送到 comint 缓冲区。对于 *compilation* 只读缓冲区很有用。”
(交互的
(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 自动完成讨论的问题基本相同
注意 M-x 术语使用伪终端,因此所有交互式程序都可以按需要工作。但是在这种模式下,您将失去任何 Emacs 编辑功能......
更多推荐
所有评论(0)