Gnu Emacs:在sql.el进程中运行的psql的tab-completion

时间:2011-09-28 17:20:41

标签: sql emacs postgresql tab-completion

我喜欢在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

没有任何成功的建议。

提前致谢!

的setjmp

1 个答案:

答案 0 :(得分:3)

通常用于交互式使用的程序(当他们拥有终端时)在管道中使用时禁用交互功能(如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 C-q TAB RET

但是,如果为程序的stdio启用了缓冲,则可能无效(要刷新输入,您也必须发送\n)...

Bash autocompletion in Emacs shell-mode

讨论了大致相同的问题

注意 M-x术语使用伪终端,以便所有交互式程序按需运行。但是在这种模式下你会失去任何Emacs编辑功能......