我認爲你說得很對,sql-set-sqli-buffer找不到合適的SQLi緩衝區的原因是因爲它在遍歷列表時考慮了SQL模式緩衝區的產品子類型打開緩衝區。
下面是從我的sql.el的副本,它隨我的emacs(版本緩衝測試的代碼 - 的GNU emacs用於主要用於測試的資格是24.2.1
(defun sql-find-sqli-buffer (&optional product connection)
"Returns the name of the current default SQLi buffer or nil.
In order to qualify, the SQLi buffer must be alive, be in
`sql-interactive-mode' and have a process."
(let ((buf sql-buffer)
(prod (or product sql-product)))
(or
;; Current sql-buffer, if there is one.
(and (sql-buffer-live-p buf prod connection)
buf)
;; Global sql-buffer
(and (setq buf (default-value 'sql-buffer))
(sql-buffer-live-p buf prod connection)
buf)
;; Look thru each buffer
(car (apply 'append
(mapcar (lambda (b)
(and (sql-buffer-live-p b prod connection)
(list (buffer-name b))))
(buffer-list)))))))
兩個值一個緩衝區和一個標識產品類型的符號,這個符號作爲參數傳入,或者默認爲sql-product的值,看起來sql-product,除非以其他方式設置,默認爲'ansi,它是爲什麼你的編輯緩衝區是SQL [ANSI]
你應該嘗試在此緩衝區中設置產品類型(例如使用M-x sql-set-product
)試圖將SQLi緩衝區與查詢緩衝區相關聯。如果你想在默認永遠是「MySQL的」你可以在你的init文件中設置此,或使用M-x customize-variable
SQL模式是相當秩序依賴於具有緩衝,從而設置了正確的本地變量來定製它有一個工作關聯的iSQL會話。
一個典型的序列,通過訪問一個文件也許是我用來啓動一個isql緩衝區與另一個緩衝區我已經修改爲如下
- 切換到與它的SQL文本的緩衝區查詢,或使用
C-x b
創建臨時緩衝區。
- 將此緩衝區設置爲正確的SQL類型,然後輸入
M-x sql-set-product
,然後在提示符處輸入已知類型,例如「mysql」。
- 命中
C-c <TAB>
(綁定到sql-product-interactive
)切換到關聯於這個緩衝器的緩衝器的iSQL,潛在地通過定位或創建一個新的通信情報處理
這可能是值得讀取M-x sql-help
命令的輸出。 SQL模式的文檔很輕。我主要通過閱讀資料來發現我對它的瞭解。
來源
2013-01-14 16:39:59
cms
感謝您的回答。我以前只能在我用C-x b創建的緩衝區上使用M-x sql模式,而且它會做正確的事情。現在我必須M-x sql模式RET M-x sql-set-product RET「postgres」RET。假設在Emacs 24中更改了sql-find-sqli-buffer代碼。 – felideon
實際上,當我嘗試使用C-c C-c時,它仍然會在迷你緩衝區中產生「無SQL進程啓動」錯誤。 :/ – felideon
即使使用sql-postgres SQLi緩衝區已經在運行?我認爲對於emacs 24,SQL模式可能已經有所改變,因爲稍後我又回過頭來使用了一些,而且看起來好像有點誇張。我的1-2-3例子不適合你嗎(用postgres替換mysql)? – cms