2011-09-28 33 views
2

我喜歡在psql.el下運行Postgres客戶端「psql」,同時在單獨的窗口中與.sql文件進行交互。有時,我想在運行psql進程的緩衝區中使用tab-completion來查找適當表名的名稱。但是,我無法弄清楚如何產生所需的結果。Gnu Emacs:在sql.el中運行的psql的tab-completion進程

一個非常相關的問題已經在這裏問:https://superuser.com/questions/236574/how-can-i-send-a-literal-tab-to-bash-in-emacs-shell-mode

沒有任何成功的建議。

在此先感謝!

的setjmp

回答

2

通常,在管使用時,在交互使用設計的(當他們自己的終端)禁用交互功能(如歷史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編輯功能...